沙箱里的 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 后台命令:后台命令比会话活得更久时,沙箱的写入禁止会失效,这一点也已修复。
你该做什么
- 尽快升级到 2.1.309 或更新版本,尤其是把沙箱当作安全边界、或在 CI 里自动执行命令的场景。
- 审视自己的启动文件:顺手看看
~/.bashrc/~/.zshrc里有没有会联网、写文件或拉起程序的逻辑,这类内容放在交互式 shell 里比较合适,不必每条命令都跑。 - 用真实路径写 denyWrite:即使已经修复,用规范路径写规则也更不容易出意外。
- 别把 MCP 配置放在可写的工作目录:配合这次修复,把配置文件放到项目之外,进一步降低被篡改的可能。
小结
沙箱的价值在于「默认不信任」。2.1.309 补上了启动文件、符号链接、配置文件和多种组合命令上的漏洞,让这道边界更名副其实。如果你依赖沙箱来放心地让 Claude 自动执行命令,这次更新不应该拖。