ORANGE BOOK · CODEX

第八章 安全模式与权限管理

8.1 一个真实故事

我有一个朋友老周,第一次用 Codex 时,把权限模式设成"全通过"。然后他对 Codex 说:

帮我清理一下桌面,把不重要的文件删掉。

Codex 很麻利,5 秒钟"清理完毕"。

老周打开桌面一看:30 多个文件,剩下 8 个。其中包括他正在写的 PPT、半年前下载的合同扫描件、一份没保存到云端的设计稿。

那天他一晚上都在用磁盘恢复软件。

这个故事告诉我们:权限管理不是可选项,是必选项

8.2 Codex 的三档权限模式

Codex 提供三档权限模式,从严到松:

模式 行为 适合
Read-only(只读) 只能读文件、查信息,不能写、不能跑命令 安全敏感场景、第一次用
Auto-approve safe(自动判断) 读类操作自动通过;写类、命令类操作仍需确认 日常推荐
Yolo(全通过) 所有操作自动通过,不请求授权 完全信任的场景,慎用

桌面版叫法可能略有不同(比如"只读模式 / 标准模式 / 完全自动模式"),CLI 通用术语是 read-only / suggest(自动判断) / auto-edit(更宽松) / full-auto(全通过)。

怎么切换

CLI:

/approvals

会出来一个选择菜单。

桌面版:左下角的"权限"按钮,下拉选择。

也可以在启动时指定:

codex --approval-mode read-only
codex --approval-mode suggest    # 默认
codex --approval-mode full-auto  # 谨慎

8.3 三档详解

Read-only(只读模式)

它能做什么:

  • 读取文件(catread_file
  • 列出目录(lstree
  • 搜索文件内容(greprg
  • 在线查询(如果允许网络访问)

它不能做什么:

  • 写、改、删任何文件
  • 跑会修改系统的命令
  • 操作浏览器进行点击
  • 安装新软件

适合场景:

  • 第一次用 Codex,先建立信任
  • 让 Codex 分析一个项目(你只想要它的看法,不要它动手)
  • 处理敏感目录(比如 ~/Documents/
  • 让 Codex 当代码审查员

典型任务:

读一下这个项目的 README.md 和 package.json,
告诉我它的技术栈、目的、依赖关系。不要做任何改动。

Auto-approve safe(自动判断 / suggest 模式)

它能做什么:

  • 自动通过所有"读"操作(无打扰)
  • 写文件、删除、跑命令时弹出确认

它不能做什么:

  • 不能跳过你的确认就改文件
  • 不能跳过你的确认就跑命令

适合场景:

  • 90% 的日常使用
  • 你想专注思考,不想被读文件这种小事打断
  • 你有项目级 git 备份,可以承受小失误

新手强烈推荐这个模式作为默认。

Full-auto(全通过 / yolo 模式)

它能做什么:

  • 任何事,都不问

适合场景:

  • 你已经很信任 Codex 完成某类任务
  • 你在沙箱环境(VM、Docker、单独的工作目录)
  • 自动化定时任务(人不在场)
  • 你做好了"如果出错也不影响"的准备

绝对不要在这些场景用:

  • 直接对你的桌面、文档目录用
  • 没有 git 备份的项目
  • 涉及生产环境、数据库的任务
  • 老婆 / 老板的电脑

8.4 沙箱机制

除了三档权限,Codex 还有"沙箱机制"——把它的操作限制在一个安全范围内。

什么是沙箱

沙箱(Sandbox)就是给 Codex 划一个"操场",它只能在操场里玩,玩不到操场外。技术上 Codex 通过几种方式实现沙箱:

方式 1:工作目录限制

启动 Codex 时指定一个工作目录,它默认只能访问这个目录及子目录:

cd ~/codex-workspace/my-project
codex

它就不会去碰 ~/Documents/~/Desktop/ 之类。

方式 2:网络隔离

CLI 默认允许 Codex 访问网络。你可以用 --no-network 禁用网络:

codex --no-network

适合处理敏感数据时,确保数据不会被外发。

方式 3:云端 VM

Codex Web 版完全在云端 VM 跑,跟你本地隔离。最安全,但也意味着它看不到你的本地文件。

方式 4:Docker 容器

进阶玩法:把 Codex 装在 Docker 里跑,给它有限的权限。第十八章会涉及这个。

8.5 怎么决定用哪档权限

下面这张决策表,帮你 5 秒做选择:

任务有副作用吗?
├── 没有(只是读、看、分析)
│   └── 用 Read-only
│
├── 有,但都是可恢复的
│   └── 用 Auto-approve safe
│
└── 有,且可能不可恢复
    ├── 在沙箱里跑(VM / 测试目录)
    │   └── 可以用 Full-auto
    │
    └── 不在沙箱里
        └── 必须用 Auto-approve safe,逐个确认

实例对照

任务 推荐模式 理由
让 Codex 读一份 PRD 给评审意见 Read-only 只读,不会改东西
帮我整理 ~/codex-workspace/ 里的项目文件 Auto-approve safe 写操作要确认
给项目加一个新功能 Auto-approve safe 写代码要确认
跑一段我熟悉的清理脚本,每天定时跑 Full-auto 已知操作,自动
操作 ~/Documents/ 里的合同 Read-only 或 拷贝出来再处理 敏感且不可恢复
在 Docker 容器里做实验 Full-auto 容器是沙箱

8.6 权限请求长什么样

新手要熟悉"权限请求"长什么样,这样才能快速判断"该不该批准"。

桌面版权限请求

中央区域弹出一个卡片:

┌─────────────────────────────────────────┐
│ Codex 想要执行:                          │
│                                         │
│ 命令:rm cats.txt                       │
│ 工作目录:~/codex-workspace/playground  │
│                                         │
│ 风险评估:删除文件,不可恢复              │
│                                         │
│       [拒绝]    [批准一次]    [总是批准]  │
└─────────────────────────────────────────┘

三个按钮的含义:

  • 拒绝:这次不让做
  • 批准一次:只批准这一次,下次再问
  • 总是批准:把这条命令加入"白名单",以后不再问

CLI 版权限请求

Codex wants to run: rm cats.txt
Working directory: ~/codex-workspace/playground
Risk: Deletes file, not recoverable

Approve?
  (y) yes, just this time
  (a) yes, always for this session
  (n) no

看到权限请求时该想什么

问题 1:这条命令我看得懂吗?

如果是 rmmvecho > 文件 这种简单命令,你大概能判断风险。

如果是看不懂的命令(比如 find . -type f -exec sed -i ...),先停下,问 Codex:"解释一下这条命令在做什么"。

问题 2:这条命令的影响范围多大?

  • 只改一个文件?基本安全
  • 改一整个目录?谨慎
  • /、改 ~/、改 /etc/?立即拒绝

问题 3:这条命令可以恢复吗?

  • 写新文件:可以恢复(删掉就行)
  • 改文件:如果有 git 可以恢复
  • 删文件:废纸篓还能找回
  • rm -rf:基本没救

8.7 给"信任"一个边界

随着用 Codex 久了,你会越来越信任它。这是好事,但要给信任一个边界。

边界 1:可逆 vs 不可逆

可逆操作(写新文件、改文件如果有 git、移动文件)→ 可以放手 不可逆操作(rm -rf、删数据库、推到生产)→ 永远确认

边界 2:本地 vs 远程

本地操作 → 错了顶多自己受 远程操作(推 GitHub、调线上 API、发邮件)→ 错了影响别人,永远确认

边界 3:金钱 vs 非金钱

非金钱操作 → 错了浪费时间 金钱操作(调付费 API、买东西、转账)→ 错了破财,永远确认

边界 4:可见 vs 不可见

可见操作(在屏幕上的) → 错了你能立即发现 不可见操作(在后台跑、在远程 VM 跑)→ 错了过几天才发现,更要小心

8.8 一些特殊场景的权限实战

场景 1:让 Codex 处理敏感文件

# 把敏感文件先拷到 sandbox
cp ~/Documents/合同.pdf ~/codex-workspace/sandbox/

# 在 sandbox 启动 Codex,禁用网络
cd ~/codex-workspace/sandbox
codex --no-network --approval-mode suggest

处理完后再把结果拷回去。这样合同原件不会被误改,且不会上传任何信息。

场景 2:跑可能耗时的自动化任务

codex exec --approval-mode full-auto "整理本目录文件"

exec 模式 + full-auto 让它一口气跑完,适合"已知任务"。

场景 3:在 Docker 里完全沙箱化

docker run -it --rm \
  -v ~/codex-workspace/test:/workspace \
  -w /workspace \
  node:22 \
  bash -c "npm install -g @openai/codex && codex"

容器跑完即销毁,再激进的操作也不会影响你的本地。

场景 4:给 Codex 安装新软件

很多任务 Codex 会要装新工具(比如装 pdfplumber 处理 PDF)。

安装类操作的判断标准:

  • pip installnpm installbrew install → 通常安全,可以批准
  • curl xxx | bash → 危险,必须读懂脚本再批准
  • sudo 开头的 → 危险,确认后再批

8.9 权限误操作之后

如果你不小心批了一个操作,事后发现错了,怎么办?

立即操作

1. 中断当前任务

桌面版:点"停止"按钮 CLI:Ctrl+C

2. 评估影响

  • 文件被删了?查废纸篓 / 用 tmutil(macOS Time Machine)
  • 文件被改了?如果有 git,git checkout -- 文件 恢复
  • 数据被改了?看有没有数据库备份

3. 防止扩散

如果 Codex 跑了某个会"传染"的操作(比如 git push 错了),立即:

git revert <commit>
git push --force-with-lease  # 谨慎

或者在 GitHub 网页上"revert"那个 PR。

事后预防

1. 提高警惕等级

吃过一次亏,把权限模式调严:

/approvals -> read-only

至少两周,重新建立信任。

2. 启用 git

任何项目都加 git。每天工作开始前 commit 一次:

git add . && git commit -m "WIP $(date)"

这样万一 Codex 改坏了,一行 git checkout 就回来了。

3. 给关键文件备份

不能动的文件(合同、家庭照片、税务记录)放在 Codex 不能访问的地方,或者另外存一份。

8.10 隐私边界

权限管的是"动作",隐私管的是"信息流向"。Codex 在你授权下读到的所有内容,都会上传到 OpenAI 的服务器进行处理。

你应该明白:

  • 文件内容、命令输出、对话内容,都会被传给 OpenAI
  • OpenAI 在 ChatGPT Plus / Business / Enterprise 协议下,承诺不用你的数据训练模型(但仍会临时存储用于服务)
  • 但你不应该上传:身份证号、银行卡号、密码、未公开的客户数据、医疗记录、未发布的财报

实操建议:

  • 处理敏感文件前,先脱敏(用 xxx 代替真实姓名、用假数据代替真数据)
  • 在 ChatGPT 设置里关闭"用我的数据改进模型"开关
  • 真敏感的事,用本地小模型(Ollama 等),不要用 Codex

第二十一章会专门讲安全和隐私。

8.11 本章小结

  • 三档权限:Read-only / Auto-approve safe / Full-auto
  • 新手默认 Auto-approve safe,特殊场景调档
  • 沙箱机制:工作目录、网络、VM、Docker 四种隔离
  • 看到权限请求先看懂、看清影响、看可逆性
  • 给信任划边界:可逆/远程/金钱/可见 四个维度
  • 出错立即中断、评估、恢复
  • 隐私:关训练开关、脱敏、敏感事用本地

下一章讲怎么"长期"用 Codex——一个项目跨多天、多次会话怎么连贯起来。第九章 · 项目与会话管理