【Bug已解决】codex auto-approve dangerous commands / Unintended file deletion — CodeX CLI 自动审批危险操作解决方案

📅 2026/7/13 11:50:35
【Bug已解决】codex auto-approve dangerous commands / Unintended file deletion — CodeX CLI 自动审批危险操作解决方案
【Bug已解决】codex: auto-approve / dangerous commands / Unintended file deletion — CodeX CLI 自动审批危险操作解决方案1. 问题描述在 CodeX CLI 的自动审批模式下执行了危险操作导致数据丢失或系统损坏# 自动模式下删除了重要文件 $ codex --auto-approve 清理项目 # CodeX 执行了: rm -rf src/ tests/ # 删除了重要目录 # 或执行了危险 git 操作 $ codex --auto-approve 提交修改 # CodeX 执行了: git push --force # 覆盖了远程历史 # 或修改了配置文件 $ codex --auto-approve 优化配置 # CodeX 修改了 .env 和 package.json # 或安装了不安全的依赖 $ codex --auto-approve 安装依赖 npm install malicious-package这个问题在以下场景中特别常见自动审批模式没有限制可执行的操作沙箱配置过于宽松指令模糊导致过度解读没有配置保护文件没有创建 Git 备份在生产环境中使用自动模式2. 原因分析核心原理拆解--auto-approve 模式 → 自动审批所有操作 ↓ CodeX 执行 rm/git push --force 等危险命令 ↓ 没有人工确认拦截 ↓ 不可逆的破坏性操作原因分类表原因分类具体表现占比沙箱过宽无操作限制约 40%无保护文件重要文件未保护约 25%指令模糊清理过度解读约 15%无 Git 备份无法恢复约 10%生产环境不应使用自动模式约 5%命令限制缺失无 blockedCommands约 5%3. 解决方案方案一配置沙箱限制最推荐# 步骤 1配置允许和禁止的命令 cat ~/.codex/config.json EOF { sandbox: { enabled: true, allowedCommands: [ npm test, npm run lint, git status, git diff, node ], blockedCommands: [ rm -rf, git push --force, git reset --hard, sudo, chmod 777 ], allowedDirectories: [./src, ./tests, ./docs] } } EOF # 步骤 2验证 codex --auto-approve 运行测试 # 应该能执行 npm test codex --auto-approve 删除 src 目录 # 应该被阻止方案二不使用自动审批模式# 步骤 1使用交互模式 codex # 不加 --auto-approve # 步骤 2手动审批每个操作 # 当 CodeX 请求执行命令时选择是否批准 # 步骤 3使用 --print 模式更可控 codex --print 修复 src/index.js 中的 bug --max-turns 5 # --print 模式更安全 # 步骤 4危险操作单独手动执行 codex 分析需要清理的文件 # 然后手动执行 rm方案三使用 Git 安全网# 步骤 1自动模式前先提交 git add -A git commit -m backup before auto-approve # 步骤 2如果自动模式造成破坏 git checkout . git reset --hard HEAD # 步骤 3恢复被删除的文件 git checkout HEAD -- src/ tests/ # 步骤 4使用 Git 钩子阻止危险操作 # .git/hooks/pre-commit #!/bin/bash if git diff --cached | grep -q force\|rm -rf; then echo Dangerous operation detected! exit 1 fi chmod x .git/hooks/pre-commit方案四配置保护文件# 步骤 1创建保护列表 cat ~/.codex/protected-files EOF .git/ .env .env.* .gitignore package.json tsconfig.json *.lock *.key *.pem credentials* EOF # 步骤 2CodeX 不会修改保护列表中的文件 # 步骤 3或使用 .codexignore cat .codexignore EOF .git/ .env package.json tsconfig.json EOF方案五使用具体指令# 步骤 1避免模糊指令 # 错误: codex --auto-approve 清理项目 # 正确: codex --auto-approve 删除 src/ 下所有 .test.js 文件 # 步骤 2明确范围 codex --auto-approve 只在 src/auth/ 目录下重构代码 # 步骤 3明确禁止 codex --auto-approve 修复 bug不要修改 package.json 和 .env # 步骤 4分步骤执行 codex --auto-approve 第一步: 分析问题 codex --auto-approve 第二步: 修复 src/index.js codex --auto-approve 第三步: 运行测试验证方案六使用 Docker 隔离# 步骤 1在 Docker 容器中使用自动模式 docker run -it --rm \ --read-only \ -v /tmp/changes:/app/src \ -v $(pwd):/app:ro \ codex-env \ codex --auto-approve 修复代码 # 步骤 2或使用 Git Worktree git worktree add /tmp/codex-work cd /tmp/codex-work codex --auto-approve task # 完成后合并或丢弃4. 各方案对比总结方案适用场景推荐指数难度方案一沙箱限制核心防护⭐⭐⭐⭐⭐低方案二不用自动最安全⭐⭐⭐⭐⭐低方案三Git 安全网可恢复⭐⭐⭐⭐⭐低方案四保护文件文件防护⭐⭐⭐⭐低方案五具体指令精确控制⭐⭐⭐⭐⭐低方案六Docker隔离⭐⭐⭐⭐高5. 常见问题 FAQ5.1 --auto-approve 模式有哪些风险自动审批所有操作包括 rm、git push --force 等不可逆命令。可能导致数据丢失。5.2 如何在自动模式下保持安全配置沙箱blockedCommands阻止 rm -rf 等配置保护文件.env、package.json使用前git commit创建备份使用具体指令而非模糊指令5.3 沙箱的 blockedCommands 如何工作在 config.json 中配置blockedCommands数组CodeX 会拒绝执行匹配的命令。5.4 .codexignore 和沙箱的区别.codexignoreCodeX 不读取/修改这些文件沙箱allowedDirectories限制可操作的目录范围两者配合使用5.5 自动模式误删了文件如何恢复# 如果之前有 git commit git checkout HEAD -- 被删的文件5.6 --print 模式比 --auto-approve 安全吗是的。--print模式执行有限轮次更可控。5.7 Docker --read-only 模式文件系统只读只有指定目录可写。CodeX 的修改限制在指定目录。5.8 企业环境的安全策略禁用 --auto-approve使用 CI/CD 审查 CodeX 的修改配置严格的沙箱策略。5.9 如何查看 CodeX 执行了什么操作codex --debug --auto-approve task 21 | tee /tmp/codex-log.txt # 查看所有操作记录5.10 排查清单速查表□ 1. 配置 sandbox.blockedCommands (rm -rf, git push --force) □ 2. 配置 sandbox.allowedDirectories □ 3. 创建 .codexignore 保护 .env/package.json □ 4. --auto-approve 前先 git commit □ 5. 优先使用交互模式 □ 6. --print 模式比 --auto-approve 安全 □ 7. 使用具体指令而非清理等模糊词 □ 8. Docker --read-only 隔离修改 □ 9. Git Worktree 隔离自动模式 □ 10. codex --debug 记录所有操作6. 总结根本原因自动审批危险操作最常见原因是沙箱过宽40%无操作限制和无保护文件25%最佳实践配置sandbox.blockedCommands阻止 rm -rf、git push --forceallowedDirectories限制目录范围Git 安全网--auto-approve前先git commit创建备份出错时用git checkout恢复指令精确使用具体指令删除 src/ 下所有 .test.js 文件而非模糊指令清理项目最佳实践建议优先使用交互模式审批每个操作仅在 CI/CD 等受控环境中使用--auto-approve并配合 Docker 隔离故障排查流程图flowchart TD A[自动模式危险操作] -- B{已造成破坏?} B --|是| C[git checkout 恢复] B --|否, 预防| D[配置沙箱] C -- E[git checkout HEAD -- 被删文件] E -- F[✅ 恢复完成] D -- G[配置 blockedCommands] G -- H[配置 allowedDirectories] H -- I[创建 .codexignore] I -- j[保护 .env/package.json] j -- K[--auto-approve 前 git commit] K -- L[使用具体指令] L -- M[优先交互模式] M -- N[✅ 安全配置] N -- O[Docker --read-only 隔离] O -- P[✅ 长期方案]