Skip to main content
破坏性命令保护是命令分析阶段,用于阻止可能销毁未提交的工作、已暂存的更改、远程历史、其他数据或整个磁盘的命令。每次阻止都会在阻止消息、审计日志和 explain --json 的 ruleId 字段中给出下面的某个规则 ID。 本页列出每个内置规则 ID、它阻止的内容以及生效条件。你可以据此从阻止消息中查找规则,并决定是否关闭它。各规则的边界和示例见被阻止的命令,destructive_command_protection schema 见策略,添加自己的规则见自定义规则。 共有 70 条已注册规则。其中 10 条是灾难性规则,无法关闭。其余所有规则都接受单条规则的覆盖。不是由任何规则产生的拒绝会改用某个固定拒绝 ID,任何覆盖都无法关闭它们。

允许某条内置规则

对每条非灾难性规则,都是同样的三个步骤:
  1. 获取规则 ID。它会打印在阻止消息中;也可以对那条命令本身运行 explain,并读取 ruleId:
  2. 在 policy.json 的 destructive_command_protection.overrides 中添加该 ID,值为 "off"。用户文件适用于所有项目,项目文件 .cc-safety-net/policy.json 只适用于一个项目。请合并到你已有的文件中;下面是一个完整示例:
  3. 再次用 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>" 拒绝其中每一个。
最后修改于 2026年10月11日