首页 / Codex 教程 / 权限与审批模式

Codex 教程

权限与审批模式

本教程共 32 篇 · 第 13 篇 · 更新于 2026-07-26 · 约 10 分钟阅读

CodexCodex 教程权限审批模式沙箱安全config.toml

13. 权限与审批模式

本节目标:搞懂沙箱和审批是两个独立旋钮,学会三档预设怎么选、怎么配,知道 Full access 这条红线划在哪。

先理清:你要拧的是两个独立旋钮

新手最容易绕晕一件事:沙箱和审批不是一个东西的两档,是两个互相独立的旋钮,各管各的。

打个比方,沙箱像你开车挂的档位—挂 P 档车根本不动(只读),挂 D 档能在路上跑(工作区可写),挂越野档连沟里都能下(完全访问)。审批像你给自己设的限速提醒—可以见生人就响(最谨慎),可以超速才响(出圈才问),也可以关掉提醒闷头开(不问)。档位决定车能去哪,限速决定啥时候提醒你,两套互不替代。

旋钮管什么配置键命令行参数
沙箱模式(Sandbox)能动多大sandbox_mode--sandbox-s
审批策略(Approval)问不问你approval_policy--ask-for-approval-a
Note

很多人以为「开了完全访问就不弹窗了」—不是。完全访问(沙箱拧到底)和不弹窗(审批拧到底)是两件事。你完全可以「能动整台机器、但每步都问你」,也可以「只能读、但闷头读不打扰」。

三种沙箱模式:能动多大

沙箱旋钮一共三档,用「能不能改文件 / 能不能联网 / 配哪种活」三栏列清楚:

沙箱模式能改文件吗能联网吗最适合的活
read-only(只读)不能(要改得先批)不能审代码、出方案,「别动我东西」
workspace-write(工作区可写)仅限工作区内默认关,得手动开日常开发的默认档
danger-full-access(完全访问)整台机器隔离容器 / VM

几个最容易想当然写错的细节:

workspace-write 模式下网络默认是关着的。 你以为能写文件了应该也能联网装依赖,但不是。想开网络,在 config.toml 里加:

[sandbox_workspace_write]
network_access = true
Tip

我第一次让 Codex 在 workspace-writenpm install,它卡住报了一堆网络错,还以为是代理问题,折腾半天才想起—是沙箱默认没给它联网权限。记住这条,能省你一晚上。

就算开了 workspace-write,有几个目录依然是只读保护的。 Codex 特意设了安全网:

受保护路径为什么保护
<工作区>/.git防止误改 Git 历史
<工作区>/.agents防止偷偷改智能体配置
<工作区>/.codexCodex 自己的配置目录

这个保护是递归的,底下所有东西都跟着只读。所以你不用担心「开了可写它就能改我的 .git」。

三种审批策略:问不问你

沙箱画好了圈,圈边上「该不该停下来问你」就归审批管:

审批策略Codex 的行为大白话
untrusted只自动跑已知安全的只读操作,其余先问防一切陌生命令,最谨慎
on-request默认在沙箱圈里自己干,出圈才问最常用的平衡档
never不弹审批,闷头干自动化常用;权限仍由沙箱决定
Note

never(不问)不等于「放飞」。你完全可以 read-only + never,意思是「只让它读、而且读的时候一句都别问我」,这是 CI 里只读分析的标准配法。「不问」和「放权」是两码事。

三档预设:Ask for approval / Approve for me / Full access

在桌面 App 和 IDE 里,你看到的不是「沙箱 + 审批」两个旋钮,而是三个打包好的预设档。它们本质就是两个旋钮的组合:

Ask for approval(请求审批)

最安全的平衡档。Codex 可以读和编辑当前工作区文件、跑常规命令,但要联网或越过工作区边界时会停下来问你。

对应底层组合:

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

适合日常开发—它在工作区里放手干,出了圈才喊你。

Tip

接手陌生项目时,我习惯先用 /permissions 切到只读,让它通读出方案,看完心里有底了再切回 Ask for approval 放手。这个习惯避免它一上来就瞎改我还没看懂的代码。

Approve for me(替我审批 / 自动审查)

效率模式。Codex 自己先判断风险—低风险操作(改几个代码文件、跑 lint、跑测试)直接执行,高风险操作(删文件、网络访问、系统目录操作)才停下来问你。

对应底层组合还是 workspace-write,只是审批环节多了个自动审查 agent 替你先过一遍。工作区边界没变,变的只是「谁来审批」。

适合高频开发、大量重复修改、长时间 Agent 工作流—不想一直点「允许」。

Full access(完全访问)

最猛的模式。Codex 基本获得全文件系统访问、网络访问、任意命令执行,基本不再频繁询问。

对应底层组合:

sandbox_mode    = "danger-full-access"
approval_policy = "never"
Warning

这个模式接近「给 AI sudo 权限」。已经有人删错目录、清空磁盘、误操作丢了几 TB 数据。它只适合 Docker、虚拟机、临时环境、CI/CD 这类删了也不心疼的隔离环境。主力工作电脑、有重要数据的机器—绝对不开。

怎么设:临时改和永久写死

临时改:命令行参数(只管这一次)

启动时把两个参数一带:

codex --sandbox workspace-write --ask-for-approval on-request

简写更短:

codex -s read-only -a on-request "只帮我审一下这段代码,别动手"

进了会话还能当场切,不用退出:

/permissions

弹出选择器,挑你要的档,即时生效。

永久改:写进 config.toml

每次都敲参数太烦,把常用组合写进 ~/.codex/config.toml

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

想要「最谨慎」的兜底配法,用这组:

approval_policy = "untrusted"
sandbox_mode    = "read-only"

等于每次启动都从最严开始,需要放权时再手动切。生产项目、共享机器适合这么兜底。

Note

自 v0.142 起,官方推出 permission profiles(权限配置档,Beta)替代旧预设。你的 /permissions 菜单可能显示为 Ask for approval / Approve for me / Full access 这类审批策略档。要切只读时改走启动参数 codex --sandbox read-only,或在 config.tomlsandbox_mode = "read-only"

Codex 启动时默认给你哪一档

Codex 启动时其实已经替你智能选了一档默认值—而且它选哪档,跟你这文件夹有没有 Git 有关:

你启动的文件夹默认推荐
有 Git 管着Auto 档(workspace-write + on-request
没有 Gitread-only(只读)

这设计戳中要害:有 Git 兜底,改砸了能 git diff 看、能回滚,所以敢放它在工作区写;没 Git 的目录改了就改了、没法回退,所以默认只读保平安。

Full access 的红线

--yolo(完全放开)是那道红线。它既拆掉沙箱、又关掉审批,等于让 Codex 在你整台机器上为所欲为、还一句都不问。命令行一把梭的写法:

codex --dangerously-bypass-approvals-and-sandbox
# 简短别名:
codex --yolo

该不该开,照这张表对号:

场景敢不敢开
隔离容器 / VM / dev container敢,删的也是一次性环境
CI 里跑一次性任务(容器内)敢,但环境本身得是隔离的
自己日常开发的本机不开,宁可慢点也留着审批
装着生产代码、有重要数据的机器绝对不开,这是炸弹
Warning

就算在 devcontainer 里开完全访问,也不是绝对安全—一个恶意项目能把容器内能拿到的东西(包括你的 Codex 登录凭据)全偷走。所以哪怕在容器里,也只对可信的代码仓库这么干。

正确姿势是用 Docker / dev container 把外层隔离做好,再在容器里跑 --yolo—让容器当那道安全边界,而不是裸着在本机上拆缰绳。

动手:5 分钟把三档松紧切一遍

  1. 建个空目录,进去启动
mkdir -p ~/perm-demo && cd ~/perm-demo
codex

注意:这个目录没初始化 Git。按默认逻辑,Codex 很可能一进来就给你 read-only 起步。

  1. 确认当前档位
/status

能看到当前的沙箱模式、审批策略,以及工作区包含哪些目录。

  1. 在只读档下,让它干一件「要写文件」的事
帮我新建一个文件 hello.txt,里面写一行 hello codex

它不会默默建好,而是停下来请求批准—因为「写文件」突破了 read-only 的边界。

  1. 切到工作区可写,对比放行的顺滑
/permissions

切到 Auto / Workspace Write 那一档,再让它建一次 hello.txt。这回它直接建好、不再问你。

  1. 感受网络默认是关的
帮我用 curl 访问一下 https://example.com

它要么停下来请求联网批准、要么直接报访问失败—印证「能写文件 ≠ 能联网」。

小结

你要做的事用什么关键点
调「能动多大」沙箱 --sandboxread-only / workspace-write / danger-full-access
调「问不问你」审批 --ask-for-approvaluntrusted / on-request / never,和沙箱独立
临时改这一次命令行参数 / /permissions进会话能当场切档
永久写死默认config.tomlsandbox_mode + approval_policy
完全放开--yolo只在隔离容器里碰,本机生产机免谈

权限缰绳攥在手里了。很多人现在的习惯是:平时 Ask for approval 或 Approve for me,需要时临时切 Full access,做完再切回来。这是目前最合理的工作流—弹窗烦不是理由,烦,也比后背发凉强。

下一章咱们深入沙箱的底层实现—Linux 上怎么用 bwrap 隔离、Windows 上怎么做原生沙箱,以及危险命令检测是怎么拦住 rm -rf / 这种要命操作的。