一、Codex 的 approval policy(批准策略)和 execpolicy(执行策略)
- agent可能会执行不可预测的命令(比如删除文件、访问敏感目录、运行恶意脚本),可以通过policy弹出提醒 , 这和
Bubblewrap(bwrap)二者是独立的安全层。
具体行为
-
默认/推荐模式 (如
--sandbox workspace-write --ask-for-approval on-request):Codex 在执行破坏性命令 (如
rm、rm -rf、delete等)时,会主动弹出确认提示,让你审查命令后再决定允许或拒绝。即使命令在 Bubblewrap 沙箱内运行,也不会自动执行。 -
你可以通过自定义规则进一步加强(推荐):
在
~/.codex/rules/中用 Starlark 定义策略,例如强制rm/-rf必须 prompt:prefix_rule( pattern = ["rm", "-rf"], decision = "prompt", justification = "Destructive operation needs confirmation" )这样 Codex 会更严格对待删除命令。
二、启动最好加参数:codex --sandbox workspace-write --ask-for-approval on-request
- 在 Linux bash shell(或终端)中启动 Codex 时,直接在 codex 命令后面加上这些参数即可:
bash
codex --sandbox workspace-write --ask-for-approval on-request
这会以推荐的安全模式启动 Codex 会话:--sandbox workspace-write:允许 Codex 在当前工作目录(workspace)和 /tmp 等受限路径下读写文件,但无法随意修改系统其他地方。
--ask-for-approval on-request:低风险操作可自动执行,破坏性命令(如 rm -rf 等)会弹出确认提示让你审查。
直接输入上面那行命令,按回车后就会进入 Codex 的交互界面(TUI),并应用这些设置。
其他常用方式:
简写形式(-s 和 -a):
bash
codex -s workspace-write -a on-request
想更安全(只读模式):
bash
codex --sandbox read-only --ask-for-approval on-request
永久设置(推荐)每次都打参数比较麻烦,你可以把设置写到配置文件里:编辑 ~/.codex/config.toml
(如果没有就创建):
toml
sandbox_mode = "workspace-write"
approval_policy = "on-request"
之后直接 codex 启动就会使用这些设置。CLI 参数的优先级更高(会覆盖配置文件)。验证当前设置:启动后输入 /status 或 /approvals,就能看到生效的 sandbox 和 approval 模式。
- 参数意思
codex --sandbox workspace-write --ask-for-approval on-request的意思是:
以受限沙盒模式运行 Codex,每次需要写入文件时都先询问你是否批准。
具体拆解:
--sandbox workspace-write(-s workspace-write)
启用沙盒限制,只允许 Codex 在当前工作区内写入文件,禁止它执行网络请求、安装软件包、或修改工作区以外的系统文件。
--ask-for-approval on-request(-a on-request)
每当 Codex 想执行一个操作(比如修改文件、运行命令)时,暂停并显示具体的操作内容,等你手动确认后才继续执行。
实际效果:
Codex 会告诉你"我打算执行 xxx 操作",你看完后选择 批准 或 拒绝,它才会动手。整个过程你有完全的控制权,不会悄悄改动任何东西。
适合用在:不太熟悉某个代码库、或者任务比较重要、不想让 AI 自动乱跑的场景。
三、检查 approval policy和execpolicy的设置
要验证默认/推荐模式(--sandbox workspace-write --ask-for-approval on-request)下 Codex 是否会对破坏性命令(如 rm、rm -rf 等)主动弹出确认提示,以及如何查看当前设置,有以下几种实用方法:
1. 最直接的方式:在 Codex 会话中查看状态
启动 Codex 后(推荐用推荐模式启动):
- 输入
/status------ 显示当前会话的配置,包括 sandbox 模式、approval policy 等关键信息。 - 输入
/approvals------ 专门查看/切换 approval 相关设置,通常会列出当前模式并允许选择(Auto / Read-only / Full 等选项)。
这些是官方推荐的命令,能实时看到当前生效的 sandbox 和 approval 配置。
2. 查看配置文件(config.toml)
Codex 的设置主要保存在 ~/.codex/config.toml(用户主目录下)。
查看命令:
bash
cat ~/.codex/config.toml
或直接用 Codex 自身:
bash
codex config show
重点关注以下键值(推荐模式对应):
sandbox_mode = "workspace-write"approval_policy = "on-request"(或等效的 approval 设置)
如果没有这些设置,默认行为通常接近推荐的 Auto 模式。
3. 实际测试验证提示行为
最可靠的验证方法是故意触发破坏性命令:
-
用推荐模式启动 Codex:
bashcodex --sandbox workspace-write --ask-for-approval on-request -
在会话中让它执行类似命令,例如:
- "删除 test.txt 文件" 或 "运行 rm -rf some_temp_dir"
- 或者直接让它生成并执行 shell 命令。
预期行为(on-request 模式下):
- Codex 应该主动弹出确认提示,显示命令内容,让你审查后选择允许(Approve)或拒绝。
- 低风险命令可能自动执行,但破坏性操作(如 rm、删除、覆盖关键文件等)通常会触发提示。
如果没有弹出提示,可能是:
- 当前模式是
never(检查 config 或用/approvals切换)。 - 使用了
--dangerously-bypass-approvals-and-sandbox(--yolo 模式)。 - 配置被覆盖或有 bug(某些版本提示可能只显示命令前半部分)。
4. 其他检查命令
codex --help或具体 flag 帮助,确认启动参数。- 检查自定义 rules(
~/.codex/rules/目录下的 Starlark 文件),这些可以进一步强制某些命令必须 prompt。
推荐启动方式(每次都明确指定,更保险):
bash
codex --sandbox workspace-write --ask-for-approval on-request
四、其他
- 不会提醒的情况 :
- 使用
--ask-for-approval never(或-a never)或--dangerously-bypass-approvals-and-sandbox(--yolo)模式时,危险命令可能直接运行(仅受 Bubblewrap 沙箱限制)。 - Full-auto 模式下,部分低风险命令自动执行,但破坏性操作仍可能触发额外审查(取决于配置)。
- 某些历史 bug 或特定版本中,提示可能不完善(只显示命令前半部分)。
- 使用
Bubblewrap 的作用在这里
Bubblewrap 不会阻止 rm 命令本身,但会极大降低风险:
- Codex 通常只能在 workspace(项目目录)和
/tmp等受限路径下操作。 - 即使
rm -rf执行了,也很难删到系统关键文件(如~以外的内容),因为沙箱限制了文件系统视图。 - 但仍不推荐完全关闭 approval ------ 沙箱不是万能的(可能仍有误删项目文件风险)。
实用建议
- 查看当前模式:运行
/status或/approvals(在 Codex 会话中)。 - 推荐启动方式:
codex --sandbox workspace-write --ask-for-approval on-request - 想更安全:结合 execpolicy 规则 + 保持 approval 开启。
- 极端安全:用
read-only沙箱 + 手动审查所有 shell 命令。
总结 :在正常 Bubblewrap + 默认 approval 配置下,Codex 会提醒 你确认 rm 命令,不会偷偷自动删除。这是 Codex 多层安全设计(sandbox + approvals + rules)的一部分。