进阶教程 · 安全

配好 Codex 沙箱与批准策略

用执行边界和批准时机控制文件写入、命令运行与网络访问。

Codex 的安全设置有两个独立维度。沙箱决定命令能接触哪些文件和网络,批准策略决定什么时候暂停并请求许可。把两者分开理解,才能知道一次弹窗是在扩大执行范围,还是在确认一条被归为不可信的命令。

本文内容核对到 2026 年 8 月。permission profiles 仍处于 Beta,配置键、默认值和批准入口可能变化,修改前应核对当前官方文档。

先选择沙箱范围

当前 Codex 提供 permission profiles 和旧版 sandbox_mode 两条配置路径。permission profiles 内置 :read-only:workspace:danger-full-access。旧版机制对应 read-onlyworkspace-writedanger-full-access。日常开发通常从工作区写入开始,排查陌生仓库时可以先用只读范围。

两套机制不能组合。配置里出现 default_permissions[permissions] 时,不要再写 sandbox_mode[sandbox_workspace_write]。任何已加载配置、命令行 --sandbox 或所选 profile 出现 sandbox_mode,Codex 就会使用旧版机制。

版本控制目录启动时,Codex 通常推荐 Auto,它对应工作区写入和按需批准。非版本控制目录通常从只读开始。可以用 /status 查看当前工作区包含哪些目录,不要只凭启动位置猜权限范围。

工作区通常包括当前目录和临时目录。旧版 workspace-write 仍会保护某些路径,不能把“根目录可写”理解成里面每个文件都能任意修改。配置参考提供 writable_roots 增加明确目录,也提供排除 /tmp$TMPDIR 的选项。额外根目录越少,误写到其他项目的机会越低。

配好 Codex 沙箱与批准策略的入口、目标与准备条件操作示意图
图 1 · 进入任务前先确认目标、范围和准备条件

再决定什么时候询问

approval_policy 当前支持 untrustedon-requestnever 和 granular 配置。on-request 允许 Codex 在遇到沙箱边界或需要额外许可时提出请求。untrusted 会对不在安全集合内的命令更早询问。never 不会弹出批准请求,适合边界已经由只读沙箱固定的非交互检查,不能拿它替代沙箱。

采用 permission profiles 时,一份保守的开发配置可以这样写。

approval_policy = "on-request"
default_permissions = ":workspace"

已有环境继续使用旧版机制时,可以采用下面这一组。不要再添加 default_permissions[permissions]

approval_policy = "on-request"
sandbox_mode = "workspace-write"

[sandbox_workspace_write]
network_access = false

旧版 workspace-write 下的网络默认关闭。任务确实要下载依赖或访问远端时,可以按单次请求批准,也可以明确把 network_access 改为 true。长期开放以前先确认仓库脚本会访问哪些域名。permission profiles 的网络规则应写在所选 profile 中,不要把两套网络设置混用。

按任务选择组合会更稳。使用 permission profiles 时,只读代码审查可以用 :read-onlyon-request,需要修改当前仓库时换成 :workspaceon-request。无人值守的只读检查可以使用 :read-onlynever,它遇到越界动作会失败并留下错误,不会等待无人处理的弹窗。继续使用旧版机制的环境,才选对应的 read-onlyworkspace-write

非交互任务若需要在工作区写构建产物,可以使用 codex exec --sandbox workspace-write。脚本应把失败当失败,不能因为没有用户在场就自动切到全权限。网络、外部写入和凭据访问仍要在运行前固定范围。

配好 Codex 沙箱与批准策略的三步关键操作与请求骨架示意图
图 2 · 把关键操作拆成三步,并给每一步留下可观察结果

看清每一次权限请求

批准前读完整命令、目标路径和理由。写入工作区外、访问网络、运行图形应用和执行高风险 Git 操作,都应当与当前任务直接相关。目标路径含变量、通配符或宽泛目录时,先缩小范围。删除、覆盖、生产发布和外部消息属于另一层授权,沙箱允许执行也不代表用户已经授权业务动作。

approvals_reviewer = "auto_review" 可以把符合条件的批准请求交给审查代理。官方文档明确说明,这个设置不会扩大沙箱,也不会改变已经允许的操作。高风险动作仍要依靠清楚的任务范围和最小权限。

granular 策略还能分别控制 sandbox escalation、rules、MCP elicitation、权限请求和 Skill 脚本批准是否可以弹出。它适合管理员已经知道哪些提示必须由人处理的环境。普通个人项目先用 on-request,等实际提示类型稳定以后再细分,配置会更容易读懂。

CLI 可以临时使用 codex --sandbox read-only --ask-for-approval on-request 启动一次安全检查。官方还提供 codex sandbox macoslinuxwindows 子命令,用来观察某条命令在沙箱中的表现。--dangerously-bypass-approvals-and-sandbox 会同时跳过沙箱和批准,官方把它标为不推荐的高风险模式。

配好 Codex 沙箱与批准策略的结果验收与交付证据清单示意图
图 3 · 用结果、检查与交付证据确认任务真的完成

官方参考