Skip to content

沙箱里的 Bash 命令,启动文件不再跑在沙箱外面 ​

开启沙箱后,Claude Code 执行的 Bash 命令会被限制在一个受控环境里:能写哪些路径、能不能联网,都由配置决定。这是让自动执行命令更放心的关键一环。但 CLI 2.1.309 修复的第一条问题提醒我们:沙箱的边界,比看上去更容易漏一个口子。

最重要的一条:启动文件跑在了沙箱外 ​

更新说明的原话是:修复了 macOS 和 Linux 上沙箱化的 Bash 命令,在每条命令之前于沙箱外运行 shell 启动文件的问题。

shell 启动文件就是 ~/.bashrc、~/.zshrc 一类在打开 shell 时自动执行的脚本。问题在于,命令本身在沙箱里,但这些启动文件却先在沙箱之外跑了一遍。如果启动文件里有会写文件、访问网络或调用其他程序的逻辑,它们就不受沙箱规则约束。

对大多数人来说,启动文件只是设置别名和 PATH,风险不大;但对把沙箱当作安全边界的团队来说,这是一个必须补上的洞。

同版本一起补上的口子 ​

2.1.309 这一版几乎可以看作一次「沙箱与权限加固」专项,值得关注的还有:

  • denyWrite 与符号链接:macOS 上,如果 denyWrite 的 glob 模式所在目录是通过符号链接访问的,规则不会作用于真实路径。现在已修复。
  • --mcp-config 文件被修改:沙箱命令和自动接受的编辑,之前能改写通过 --mcp-config 传入的 MCP 配置文件,现在被禁止。
  • 重定向打开失败时的变量:Bash 权限检查此前会信任一个由「重定向可能打开失败」的命令设置的变量,现已修正。
  • cd 后再跑 git 的组合命令:当 cd 被包裹或加了前缀时,部分组合命令没有触发权限确认,现在与普通 cd 的处理一致。
  • Edit(path) 拒绝规则:在含子 shell 的命令里,之前挡不住对该路径的 Bash 重定向写入,现在可以了。
  • Linux 后台命令:后台命令比会话活得更久时,沙箱的写入禁止会失效,这一点也已修复。

你该做什么 ​

  1. 尽快升级到 2.1.309 或更新版本,尤其是把沙箱当作安全边界、或在 CI 里自动执行命令的场景。
  2. 审视自己的启动文件:顺手看看 ~/.bashrc / ~/.zshrc 里有没有会联网、写文件或拉起程序的逻辑,这类内容放在交互式 shell 里比较合适,不必每条命令都跑。
  3. 用真实路径写 denyWrite:即使已经修复,用规范路径写规则也更不容易出意外。
  4. 别把 MCP 配置放在可写的工作目录:配合这次修复,把配置文件放到项目之外,进一步降低被篡改的可能。

小结 ​

沙箱的价值在于「默认不信任」。2.1.309 补上了启动文件、符号链接、配置文件和多种组合命令上的漏洞,让这道边界更名副其实。如果你依赖沙箱来放心地让 Claude 自动执行命令,这次更新不应该拖。

Claude-cn.org,专注于 Claude Code 中文教程