explain --json 的 ruleId 字段中给出下面的某个规则 ID。
本页列出每个内置规则 ID、它阻止的内容以及生效条件。你可以据此从阻止消息中查找规则,并决定是否关闭它。各规则的边界和示例见被阻止的命令,destructive_command_protection schema 见策略,添加自己的规则见自定义规则。
共有 70 条已注册规则。其中 10 条是灾难性规则,无法关闭。其余所有规则都接受单条规则的覆盖。不是由任何规则产生的拒绝会改用某个固定拒绝 ID,任何覆盖都无法关闭它们。
允许某条内置规则
对每条非灾难性规则,都是同样的三个步骤:-
获取规则 ID。它会打印在阻止消息中;也可以对那条命令本身运行
explain,并读取ruleId: -
在
policy.json的destructive_command_protection.overrides中添加该 ID,值为"off"。用户文件适用于所有项目,项目文件.cc-safety-net/policy.json只适用于一个项目。请合并到你已有的文件中;下面是一个完整示例: -
再次用
explain确认。该命令的判定变为 allowed,status会列出这条覆盖。
"on" 则相反,会启用你的安全级别未启用的规则,例如 standard 模式下的 rm.recursive-force-paranoid。针对特定路径豁免递归删除,请使用 destructive_command_protection.allow_paths,见允许路径。未注册的 ID 会被 policy check 拒绝。
灾难性规则
有 10 条规则被标记为灾难性规则。它们忽略destructive_command_protection.enabled: false,也忽略 "off" 覆盖,因此在任何策略下、任何安全级别都会阻止。其中 8 条涵盖用 rm、find、PowerShell 和 cmd 递归删除 / 或主目录,以及删除 Git 元数据。另外 2 条针对目标无法安全读取的递归删除:一是引号写法可能把目标拆开、使其中一段指向驱动器根目录的 cmd 删除,二是以分析器不读取的形式交给 powershell 或 pwsh 的递归删除。下表中以 灾难性 标出。
如何阅读表格
生效条件说明哪个安全级别或能力会启用该规则。所有级别指 standard、strict 和 paranoid。与某项能力绑定的规则在该能力开启时生效,无论它是由安全级别还是由safety.overrides 条目开启的。示例是触发该规则的最短命令;各边界的具体位置见被阻止的命令参考。
Git 规则
文件系统规则
PowerShell 规则
命令提示符规则
这些规则判定cmd /c 或 cmd /k 正文中带 /s 开关的 rmdir、rd、del、erase 的目标。正文的读取方式见命令提示符正文。
执行规则
固定拒绝 ID
有些拒绝不来自任何规则,而是来自命令分析之前运行的防护、分析上限与失败,以及不可用的工作目录。这些拒绝带有固定 ID,会出现在阻止消息、审计日志、explain --json 的 ruleId 字段,以及 checkCommand 所返回拒绝的 ruleId 中。这些 ID 不是已注册规则,因此不能写进 destructive_command_protection.overrides。policy check 会以 unknown destructive command rule id "<id>" 拒绝其中每一个。