【Bug已解决】Claude: permission denied / File write blocked by sandbox — Claude 沙箱权限拒绝解决方案1. 问题描述Claude Code 在沙箱模式下被拒绝写入文件或执行命令# 权限拒绝 $ claude 修改 src/index.js Error: Permission denied Sandbox blocked write to src/index.js # 或命令被拒绝 $ claude 运行 npm install Error: Permission denied Sandbox blocked command: npm install # 或目录被拒绝 $ claude 修改 config/settings.json Error: Permission denied Directory config/ is not in allowedDirectories. # 或读取被拒绝 $ claude 分析 .env 文件 Error: Permission denied File .env is blocked by sandbox.这个问题在以下场景中特别常见沙箱配置过于严格目录不在 allowedDirectories命令不在 allowedCommands敏感文件被保护沙箱默认配置Docker 中沙箱问题2. 原因分析原因分类表原因分类具体表现占比目录限制不在 allowed约 35%命令限制不在 allowed约 25%敏感文件 | .env 保护 | 约 20% | | 配置严格 | 默认 | 约 10% | | Docker | 隔离 | 约 5% | | 权限 | EACCES | 约 5% |3. 解决方案方案一更新 allowedDirectories最推荐# 步骤 1检查沙箱配置 cat ~/.claude/settings.json | grep -A10 sandbox # 步骤 2添加目录 cat ~/.claude/settings.json EOF { sandbox: { enabled: true, allowedDirectories: [./src, ./tests, ./docs, ./config] } } EOF # 步骤 3验证 claude --auto-approve 修改 src/index.js # 步骤 4如果仍被拒绝检查路径 claude --debug 21 | grep -i sandbox\|permission方案二使用 --no-sandbox# 步骤 1临时禁用沙箱 claude --no-sandbox 修改 src/index.js # 步骤 2或使用 --dangerously-skip-permissions claude --dangerously-skip-permissions task # 步骤 3CI/CD 中 claude --no-sandbox --auto-approve task --max-turns 10 # 步骤 4验证 claude --no-sandbox 运行 npm install方案三使用 --allowedTools# 步骤 1允许特定工具 claude --allowedTools Read,Write,Edit,Bash task # 步骤 2或 --auto-approve claude --auto-approve task # 步骤 3在配置中设置 cat ~/.claude/settings.json EOF { allowedTools: [Read, Write, Edit, Bash] } EOF # 步骤 4验证 claude --auto-approve 修改 src/index.js方案四检查文件权限# 步骤 1检查文件权限 ls -la src/index.js # 步骤 2修复权限 chmod uw src/index.js sudo chown $(whoami) src/index.js # 步骤 3检查目录权限 ls -la src/ chmod -R urw src/ # 步骤 4验证 claude --auto-approve 修改 src/index.js方案五配置 allowedCommands# 步骤 1允许特定命令 cat ~/.claude/settings.json EOF { sandbox: { enabled: true, allowedDirectories: [./src, ./tests], allowedCommands: [npm, node, python3, git, ls, cat] } } EOF # 步骤 2验证 claude --auto-approve 运行 npm install # 步骤 3如果命令仍被拒绝 claude --debug 21 | grep -i command\|blocked # 步骤 4使用 --no-sandbox 临时绕过 claude --no-sandbox 运行 npm install方案六使用 .claudeignore# 步骤 1创建 .claudeignore cat .claudeignore EOF node_modules/ .env .git/ *.log dist/ EOF # 步骤 2但确保需要修改的文件不在忽略列表 # 如果 src/index.js 被忽略从 .claudeignore 中移除 # 步骤 3验证 claude --auto-approve 修改 src/index.js # 步骤 4检查 claude --debug 21 | grep -i ignore\|block4. 各方案对比总结方案适用场景推荐指数难度方案一allowedDirectories长期⭐⭐⭐⭐⭐低方案二--no-sandbox临时⭐⭐⭐⭐⭐低方案三--allowedTools工具⭐⭐⭐⭐⭐低方案四文件权限EACCES⭐⭐⭐⭐⭐低方案五allowedCommands命令⭐⭐⭐⭐⭐低方案六.claudeignore忽略⭐⭐⭐⭐低5. 常见问题 FAQ5.1 沙箱是什么Claude Code 的安全机制限制可以修改的目录和执行的命令。5.2 如何禁用沙箱claude --no-sandbox task # 或 claude --dangerously-skip-permissions task5.3 allowedDirectories 是什么沙箱配置指定 Claude 可以读取/修改的目录列表。5.4 allowedCommands 是什么沙箱配置指定 Claude 可以执行的命令列表。5.5 如何检查沙箱配置cat ~/.claude/settings.json | grep -A10 sandbox5.6 .env 被保护在 .claudeignore 中移除 .env或在 allowedDirectories 中添加。5.7 --auto-approve 和 --no-sandbox 的区别--auto-approve: 自动审批工具调用--no-sandbox: 完全禁用沙箱5.8 Docker 中沙箱问题使用--no-sandbox或配置allowedDirectories包含容器目录。5.9 如何查看被拒绝的操作claude --debug 21 | grep -i block\|denied\|permission5.10 排查清单速查表□ 1. cat settings.json | grep sandbox 检查 □ 2. allowedDirectories 添加目录 □ 3. allowedCommands 添加命令 □ 4. --no-sandbox 临时禁用 □ 5. --auto-approve 自动审批 □ 6. --allowedTools Read,Write,Bash □ 7. chmod uw 修复文件权限 □ 8. sudo chown 修复所有者 □ 9. .claudeignore 检查忽略列表 □ 10. claude --debug | grep block 查看拒绝6. 总结根本原因权限拒绝最常见原因是目录不在 allowedDirectories35%和命令不在 allowedCommands25%最佳实践在settings.json中配置allowedDirectories和allowedCommands临时绕过使用--no-sandbox或--dangerously-skip-permissions临时禁用沙箱文件权限chmod uw和sudo chown修复文件权限问题最佳实践建议配置allowedDirectories: [./src, ./tests]和allowedCommands: [npm, node, git]使用--auto-approve故障排查流程图flowchart TD A[权限拒绝] -- B{是目录问题?} B --|是| C[添加到 allowedDirectories] B --|否| D{是命令问题?} C -- E[./src ./tests ./docs] E -- F[claude 验证] D --|是| G[添加到 allowedCommands] D --|否| H{是文件权限?} G -- I[npm node git python3] I -- F H --|是| j[chmod uw] H --|否| K[使用 --no-sandbox] j -- L[sudo chown $(whoami)] L -- F K -- M[claude --no-sandbox task] M -- F F -- N{成功?} N --|是| O[✅ 问题解决] N --|否| P[使用 --auto-approve] P -- Q[claude --auto-approve task] Q -- R{成功?} R --|是| O R --|否| S[检查 .claudeignore] S -- T[移除被忽略的文件] T -- F F -- U{成功?} U --|是| O U --|否| V[使用 --dangerously-skip-permissions] V -- W[临时绕过所有权限] W -- O O -- X[长期: sandbox allowedTools] X -- Y[✅ 长期方案]