权限与沙箱详解
桌面应用与 CLI 通用:弄懂 Codex 的两层安全控制:沙箱决定它技术上能做什么,审批策略决定它什么时候必须先问你。附常用组合与配置写法。
Codex 在本地执行命令时有两层控制,配合起来使用:
- 沙箱(sandbox):技术上能做什么,比如能写哪些目录、能不能联网。由操作系统强制执行:macOS 用 Seatbelt,Linux / WSL2 用 bubblewrap,原生 Windows 用 Windows 沙箱。
- 审批策略(approval policy):什么时候必须停下来问你,比如要写工作区以外的文件、要联网时。
沙箱不只管 Codex 自己改文件,它运行的 git、包管理器、测试命令等子进程也受同样的限制。
切换权限模式
在输入框下方的权限控件里选择,不用重启。可选项取决于你的配置和组织策略,常见的有:
| 模式 | 能做什么 | 什么时候问你 | 适合 |
|---|---|---|---|
| Ask for approval | 在工作区内读写文件、运行命令 | 要越过工作区边界时(比如写外部文件、联网) | 大多数工作,官方推荐从这个开始 |
| Approve for me | 边界同上 | 越界请求先交给自动审查代理判断,不再每次都问你 | 不想频繁点批准,又不想放开边界 |
| Full access | 不受沙箱限制,可联网 | 从不 | 只在隔离的虚拟机或容器里用 |
选择 Full access 时,桌面应用会弹出风险提示,并建议改用 Approve for me。
Approve for me 只是换了"谁来批准",不会扩大沙箱边界。自动审查会额外调用模型,也会消耗一些额度。如果这个选项不见了或是灰色,见常见问题排查。
谨慎使用完全访问
完全访问(CLI 里的 --dangerously-bypass-approvals-and-sandbox,别名 --yolo)会同时关掉沙箱和审批,Codex 可能误删项目以外的文件。官方明确说明:只应在外部已经隔离好的环境里使用。
写进配置文件
桌面应用、CLI 和 IDE 扩展都会读取 ~/.codex/config.toml。想让每次都用同样的默认值,可以写进去:
approval_policy = "on-request"
sandbox_mode = "workspace-write"
# 可选:允许 workspace-write 模式下的命令联网
[sandbox_workspace_write]
network_access = true工作区里的受保护路径
即使在 workspace-write 模式下,下面这些路径仍然是只读的(包括子目录):
.git.codex.agents.aws
所以 Codex 不能自己改 Git 内部数据或项目里的 Codex 配置。
关于联网
- 本地运行时,沙箱默认不允许命令联网。需要装依赖、调接口时,Codex 会请求审批;也可以按上面的配置打开
network_access。 - 网页搜索是另一回事:Codex 默认可以用网页搜索,但读取的是 OpenAI 维护的缓存索引(
web_search = "cached"),不会实时抓取网页,这样能降低提示词注入的风险。需要最新信息时,启动时加--search切换到实时搜索。
打开联网或实时搜索都会增加提示词注入的风险:恶意网页里可能藏着让 Codex 执行危险操作的指令。只在需要时打开。
查看当前设置
在桌面应用或 CLI 的输入框里输入:
/status会显示当前对话的上下文占用和额度情况;CLI 里还会显示当前模型、审批策略和可写目录,方便确认 Codex 在你预期的边界里工作。
macOS 弹窗要求访问音乐、下载等文件夹?
macOS 上的"音乐"、"下载"、"桌面"等目录需要单独授权。如果 Codex 要读取你的家目录,系统会弹窗请你确认。只批准任务确实需要的目录。
Linux 用户注意
Linux 和 WSL2 需要先装 bubblewrap,否则 Codex 启动时会发出警告:
# Ubuntu / Debian
sudo apt install bubblewrap
# Fedora
sudo dnf install bubblewrap