Claude Code 的文件边界:--add-dir 到底限制了什么
来源:dev.to — 2026-10-24
📋 概述
很多团队照文档抄 --add-dir 就开跑,然后发现代理在自动模式下读 .env、改兄弟目录。原因在于把两层独立的权限当成了一层:沙箱根(由 --add-dir 和 additionalDirectories 管)决定 Bash 命令能在哪些目录里执行,允许路径(allowRead、allowEdit、denyRead、denyEdit)决定读写工具能直接碰哪些文件,配一层不约束另一层。更麻烦的是 Bash 继承的是沙箱根权限而不是允许路径规则,所以即使 .env 被 deny,cat .env 照样成功。想写 allowRead 加当前目录来恢复项目访问时,会把工作目录下所有文件重新暴露,包括 .env 和 secrets 目录。
🔑 核心要点
- 沙箱根与允许路径是两层独立权限,配一个不约束另一个
- Bash 继承沙箱根权限,deny 掉 .env 也拦不住 cat .env
- --add-dir 扩大的是沙箱边界,不会自动给直接读写权限
- allowRead 写当前目录会让 .env 与 secrets 重新暴露,除非同块显式 deny
- 生产环境必须显式 deny 密钥路径,并把沙箱根压到最小
💡 金句
“Bash commands inherit sandbox root permissions, not allowed path rules, meaning a `cat .env` command succeeds even when `.env` sits in a denied path.”
译:Bash 命令继承的是沙箱根权限、而不是允许路径规则,所以即使 .env 位于被拒绝的路径下,一条 cat .env 仍然会成功。
← 返回 dev.to 首页