Skip to main content
大多数编码智能体 CLI 已内置或支持操作系统级沙箱,用于隔离文件系统和网络。沙箱提供广泛隔离:它限制进程能接触哪些资源,但不理解命令含义。CC Safety Net 提供有界的语义拦截:它分析受支持的工具调用,在破坏性操作运行前将其阻止,不论目标位于何处。两者应对不同威胁,适合同时使用。 已经在运行的保护层不只有沙箱。权限提示以及负责自动批准的分类器位于每个操作之前,有些配置还会把会话放进容器或虚拟机,或者搭配检查点。本页把 CC Safety Net 与它们逐一并列,其中沙箱讲得最细,因为它是最接近的对照。

各保护层覆盖与遗漏的范围

各层判断所依据的信息不同,因此每一层都会漏掉其他层能拦住的情况。

操作系统沙箱的工作方式

各平台的沙箱实现不同,常见基础机制包括 macOS Seatbelt 和 Linux bubblewrap。默认设置通常允许广泛读取,只允许向当前工作目录和临时目录写入,并限制或关闭网络访问。沙箱和审批策略是两项独立控制。沙箱限制进程能接触的资源,审批策略决定智能体何时必须先征得许可。

不同的保护层

编码智能体沙箱的限制

沙箱限制你可以向何处写入,但不判断进程在该范围做什么。Claude Code 的沙箱文档默认把写入限制在工作目录内,因此针对你项目的 git reset --hardrm -rf . 都落在允许的路径上,操作系统看到的只是被允许的写入。git push --force 通过网络改写远程仓库,本地什么都不写,文件系统的写入范围本来就覆盖不到它。以下命令沙箱全都允许:它们在当前工作目录内写入、读取沙箱允许的文件,或访问允许的远程端点。
这些命令自动运行还是需要确认,取决于智能体的沙箱模式和审批策略。git push --force 等依赖网络的命令还取决于允许的域配置。
沙箱把 git reset --hard 视为安全操作,因为它只修改当前目录内的文件。但你的编码智能体刚刚丢掉了你全部未提交的工作。
从操作系统的角度看,这些命令完全合法:它们向允许的路径写入或读取沙箱允许的文件,不接触网络(push 除外),并且正常完成。沙箱不理解 Git 历史、未提交更改和 stash 条目,也不知道哪些文件存放着凭证。CC Safety Net 理解这些语义,并据此阻止命令。 读取范围比多数人以为的更宽。Claude Code 的沙箱文档在描述默认读取行为时写明 “There is no built-in credential deny list”,并点名 ~/.aws/credentials~/.ssh/ 是它仍允许读取的文件。CC Safety Net 无需任何配置即可阻止对这些路径的内容访问。 同样的差异也适用于命令代理。代你运行命令的工具,在两个保护层看来都只是一个不透明的可执行文件;但在你用 cc-safety-net rule wrapper add <command> 声明它之后,CC Safety Net 会穿透它看到可见的子命令,并应用相同的规则。沙箱则完全不检查子命令,只限制整个进程树可以接触的对象。

何时更适合使用沙箱

如果你主要关注以下威胁,沙箱是正确的工具:
  • 提示注入攻击:通过限制出站网络域来降低数据外泄风险
  • 恶意依赖:限制不可信软件包的文件系统写入和网络访问
  • 不可信代码执行:操作系统级隔离从根本上强于命令文本分析
  • 网络控制:CC Safety Net 完全不提供网络保护
如果你要运行来自不可信来源的代码,或者担心被入侵的依赖会连向攻击者控制的服务器,那么沙箱才是应对这些威胁的那一层。

CC Safety Net 无法提供帮助的范围

CC Safety Net 解读受支持的工具调用,但不会隔离进程。以下每一项都需要靠隔离来解决,而不是靠语义分析:
  • 通过网络外泄数据。 运行时评估不发出网络请求,管线也不检查出站流量。域名允许列表是沙箱的工作。
  • 读取已识别集合之外的内容。 敏感路径保护覆盖一个有界模式集,包括 .env 及其变体、SSH 密钥、云凭证存储、编码 CLI 凭证文件以及你配置的拒绝路径,并覆盖受支持的 command、path、search 和 patch 形式。完整目录见机密保护参考。它不是通用的读取边界,因此凭证若位于未识别的文件中就得不到保护。沙箱则会限制所有读取,无需知道哪些文件重要。
  • 隐藏在二进制文件内的行为。 some-tool --task destructive-cleanup 在命令文本中看似无害;而如果某个代理改写子命令,而不是执行一个可见的子命令,那么即使把它配置为透明包装器,也无法展开它。
  • 完整的文件系统强制约束。 拒绝只会中止工具调用,并不强制实施权限。当你需要的是完整保护而不是尽力拦截时,请使用可信写入代理、操作系统权限或沙箱。
这些问题需要沙箱提供的隔离。两种工具互为补充,不能相互替代。完整的残余限制列表见已知限制

权限提示与批准分类器

离你最近的一层是会开口询问的那一层。Claude Code 的权限模式文档这样描述它:在 Manual 模式下,Claude Code “stops and asks you before most actions that edit files, run shell commands, or reach the network”;在 auto 模式下,“a second model, the classifier, reviews actions instead of you”。分类器默认阻止的操作清单里包含 “git reset --hard, git checkout -- ., git restore ., git clean -fd, git stash drop, or git stash clear, which the classifier presumes would discard uncommitted changes”。 这道审查是一次判断,而且可以关掉。Anthropic 公布了 Claude Code auto-mode 分类器在真实过激操作上 17% 的漏报率,并称它 “not a drop-in replacement for careful human review”。同一份权限模式文档把 bypassPermissions 下无需询问就会运行的范围写作 “Everything”,并建议这一模式只用于 “Isolated containers and VMs only”。 切换模式不会让确定性检查失效。同一页写明 “Deny rules block in every mode, including bypassPermissions”。CC Safety Net 的拒绝也是如此:经 Claude Code 2.1.251 验证,PreToolUse 拒绝在 default、auto 和 bypassPermissions 模式下都仍会触发(项目仓库中的 tests/e2e-live/protection.test.ts)。这是针对特定版本的结果,不是长期保证,因此该测试套件会在每次发布和宿主升级时重新运行。deny rule 覆盖的是你事先想到并写下的命令,而且要按每个 CLI 各自的格式来写;CC Safety Net 横跨 13 个 CLI 应用同一份策略,并留下同一份审计记录。

容器、虚拟机与检查点

一台用完即弃的机器是真正的隔离,也是关掉提示之后那份权限模式文档指向的去处:bypassPermissions 只适用于 “Isolated containers and VMs only”。机器可以丢掉,里面的工作不会因此改变。云端会话会在真实分支上 clone 你的仓库、commit,然后 push 回真实的远端。在那里对未提交的工作执行 git reset --hard,损失的工作量和本地一模一样;git push --force 落在的也是队友会 pull 的分支。同一个会话的凭据一侧见云端环境。把工作树挂载进来的本地容器也是一样:挂载是可写的,未提交的工作就在里面。 检查点能收窄这个缺口,但不能封住它。Claude Code 的检查点文档说,检查点会 “automatically captures the state of your code before each user prompt”,随后写明了限制:“Checkpointing does not track files modified by bash commands.”。文档在那里举的例子是 rm file.txtmv old.txt new.txtcp source.txt dest.txt。对于这些改动,该页写道:“These file modifications cannot be undone through rewind. Only direct file edits made through Claude’s file editing tools are tracked.”。破坏性 git 命令是作为 bash 命令运行的,因此它丢掉的工作不在 rewind 能恢复的范围内。同一页把检查点定位为 “quick, session-level recovery”,并要求 “continue using version control, such as Git, for commits, branches, and long-term history”。

将沙箱与 CC Safety Net 一起使用

同时运行两者,形成纵深防御。两者的互补关系很清晰:
  • 沙箱限制影响范围。即使发生问题,损害也限于当前工作目录和已批准的网络域。
  • CC Safety Net 防止危险的误操作。它能拦下 Git 相关和破坏文件系统的误操作,因为这些操作发生在 cwd 内,沙箱会允许它们。它也会阻止读取已识别的凭证文件,而沙箱默认广泛允许读取,不会拦下这类操作。
沙箱在操作系统级限制智能体能做什么,以此应对未知威胁;CC Safety Net 在命令执行前拦截命令,以此应对已知的破坏性模式。两者结合,可以覆盖各自单独使用时留下的缺口。 其他几层也是这样叠加的。分类器会在静态检查无法判定的场合去权衡意图。用完即弃的机器和检查点能限制并部分撤销漏过去的操作。而在确定性检查负责的那类情况上,这两者都不成立。 沙箱和允许列表本身也会被攻破。CVE-2026-25725 通过 settings.json 逃逸了 Claude Code 的 bubblewrap 沙箱,CVE-2026-22708 绕过了 Cursor 的命令允许列表。请把你手上的每一层都跑起来。
最后修改于 2026年9月1日