Codex CLI 安全性与隐私完整指南(2026)— 代码会上传吗?沙箱够用吗?
"Codex CLI 会把我的代码发给 OpenAI 吗?" 这是开发者最常问的安全问题。简短答案是:会,因为 Codex CLI 依赖 OpenAI API 进行推理。但这不意味着你的代码没有保护——本指南详细解析每一个安全维度,并给出针对不同隐私需求的解决方案。
| 安全维度 | 默认行为 | 可以怎么加固 |
|---|---|---|
| 代码数据 | 发送到 OpenAI API | 用 .codexignore 排除敏感文件 / Ollama 本地化 |
| 文件系统访问 | 只读(suggest 模式下修改需确认) | AGENTS.md 限制访问目录 |
| 命令执行 | auto-edit 模式需确认 | 避免 full-auto;AGENTS.md 禁用危险命令 |
| API Key | ~/.codex/auth.json(当前用户) | 环境变量 + 系统密钥管理 |
| 训练数据 | API 调用内容用于模型改进(默认) | 企业版零数据保留 |
1. 代码数据如何流动
理解 Codex CLI 的数据流动方式,是做好安全防护的第一步。以下是默认的数据传输路径:
默认流程
你的代码(本地) → Codex CLI → OpenAI API → 模型推理 → 结果返回
哪些内容会被发送
- 你的提示词(任务描述)
- Codex 读取的相关代码文件内容
- AGENTS.md 的内容
- 对话历史(当前会话内)
哪些内容不会被发送
- 你明确用
.codexignore排除的文件 - 不在当前任务上下文中的其他文件
- 已完成任务的代码(新任务开始时上下文清空)
OpenAI 的数据使用政策(截至 2026)
- API 调用的数据默认用于模型改进
- 企业版(OpenAI API Enterprise)提供零数据保留(ZDR)选项
- 通过 API 提交的数据不用于从头训练 GPT 基础模型(仅微调)
- 数据保留期默认 30 天(ZDR 则为 0)
2. 沙箱机制详解
Codex CLI 提供三种审批模式,安全级别各不相同。选择正确的模式是保护系统安全的关键。
| 审批模式 | 文件修改 | 命令执行 | 安全级别 | 适合场景 |
|---|---|---|---|---|
suggest(默认) | 需确认 diff | 不执行命令 | ⭐⭐⭐⭐⭐ 最安全 | 日常开发 |
auto-edit | 自动修改文件 | 不执行命令 | ⭐⭐⭐⭐ 较安全 | 重构任务 |
full-auto | 自动修改文件 | 自动执行命令 | ⭐⭐ 需谨慎 | CI/CD 受控环境 |
在 AGENTS.md 中限制命令执行
通过 AGENTS.md 文件,可以在项目层面约束 Codex 的行为,即使在 full-auto 模式下也生效:
## 禁止的命令(full-auto 模式下也不执行)
disallow_commands:
- "rm -rf"
- "git push --force"
- "chmod 777"
- "curl | bash"
- "wget | sh"
- "sudo"
- "dd"
- "mkfs"
## 只允许以下命令
allow_commands:
- "npm test"
- "npm run build"
- "npm run lint"
- "pytest"
- "go test ./..."
3. API Key 安全管理
API Key 是访问 OpenAI 服务的凭证,泄露 Key 会导致费用损失和数据风险。以下是从低到高的五个安全级别:
级别 1(最不安全):硬编码在代码里
# ❌ 绝对不要这样做
OPENAI_API_KEY="sk-..." codex "task" # 历史记录可见
级别 2(基本):环境变量
# ~/.zshrc 或 ~/.bashrc
export OPENAI_API_KEY="sk-..."
# ✅ 比硬编码好,但 .env 文件不要 commit 到 git
级别 3(推荐):系统密钥管理
# macOS Keychain
security add-generic-password -a "$USER" -s "openai-api-key" -w "sk-..."
# 使用时
export OPENAI_API_KEY=$(security find-generic-password -a "$USER" -s "openai-api-key" -w)
# Linux Secret Service (GNOME Keyring)
secret-tool store --label="OpenAI API Key" service openai username codex
export OPENAI_API_KEY=$(secret-tool lookup service openai username codex)
级别 4(团队):环境变量管理工具
# 使用 direnv(.envrc 自动加载)
echo 'export OPENAI_API_KEY=$(op read "op://Personal/OpenAI/api_key")' >> .envrc
direnv allow
# 使用 1Password CLI
export OPENAI_API_KEY=$(op read "op://Personal/OpenAI/api_key")
# 使用 AWS Secrets Manager
export OPENAI_API_KEY=$(aws secretsmanager get-secret-value \
--secret-id openai-api-key --query SecretString --output text)
级别 5(最安全):短期 Key + 权限最小化
# 为 CI/CD 创建专用 API Key(在 OpenAI 平台限制用量和模型)
# GitHub Actions
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} # 不暴露在日志中
# 定期轮转 Key(建议每 90 天更换)
保护 auth.json(codex login 方式)
# 查看文件权限(应该是 600)
ls -la ~/.codex/auth.json
# -rw------- 1 user group ... ~/.codex/auth.json
# 如果权限不对,修复
chmod 600 ~/.codex/auth.json
4. .codexignore 保护敏感文件
类似 .gitignore,.codexignore 文件告诉 Codex 哪些文件和目录不应被读取或包含在上下文中。这是保护敏感数据不被上传到 OpenAI 的最直接方式。
# .codexignore — 安全配置模板
# === 认证与密钥 ===
.env
.env.*
*.pem
*.key
*.cert
*.pfx
secrets/
credentials/
.aws/credentials
.ssh/
# === 数据库文件 ===
*.sqlite
*.db
*.dump
*.sql
# === 业务敏感数据 ===
data/customers/
data/financial/
exports/
reports/
contracts/
# === 配置文件(含生产信息)===
config/production.*
config/staging.*
infrastructure/terraform/
k8s/secrets/
# === 日志(可能含 PII)===
logs/
*.log
.codexignore 提交到 git,确保整个团队使用相同的排除规则,避免有人在不知情的情况下将敏感文件包含在 Codex 上下文中。
5. 企业安全配置
对于企业用户,仅靠默认配置是不够的。以下五项措施可以将 Codex CLI 安全级别提升到企业标准:
1. 使用 OpenAI Enterprise API(零数据保留)
# ~/.codex/config.toml
# 企业配置:通过公司的 API 代理或企业端点
[providers.openai-enterprise]
name = "OpenAI Enterprise"
baseURL = "https://your-company-openai-proxy.internal/v1"
envKey = "OPENAI_ENTERPRISE_KEY"
2. CI/CD 中的最小权限原则
# GitHub Actions — 最小权限 API Key
- name: Codex task
env:
OPENAI_API_KEY: ${{ secrets.CODEX_CI_KEY }} # 专用 CI Key,限制用量
run: |
codex exec --approval-mode auto-edit \
--disable-server \ # 不启动本地服务器
"run tests and fix failures"
3. 网络隔离(防止 Codex 访问内网服务)
# 使用 Docker 网络隔离运行 Codex
docker run --rm \
--network=none \ # 禁用网络(需要时用 host 模式但限制出站)
-e OPENAI_API_KEY="$OPENAI_API_KEY" \
-v "$(pwd)":/workspace \
node:20 \
bash -c "npm install -g @openai/codex && codex exec 'run tests'"
4. 操作审计日志
# Codex 操作日志位置
~/.codex/logs/
# 在 CI/CD 中保存日志
codex exec "task" 2&1 | tee codex-audit.log
# 将日志上传到 S3/GCS 供审计
5. 代码扫描(预防敏感信息泄露)
# 提交前扫描,防止把密钥等内容送给 Codex
# 使用 gitleaks
gitleaks protect --staged
# 使用 trufflehog
trufflehog git file://. --since-commit HEAD --only-verified
6. 完全本地化方案(Ollama)
当数据隐私要求极高(如医疗、法律、国防等行业),使用 Ollama 本地模型是唯一能确保代码完全不离开本机的方案。
# 安装 Ollama
brew install ollama # macOS
# 下载本地代码模型
ollama pull qwen2.5-coder:32b # 最佳代码质量
ollama pull deepseek-coder-v2:16b # 平衡性能
# 配置 Codex 使用本地模型
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_API_KEY=ollama
# 现在运行 Codex——代码完全不离开本机
codex "重构这个模块"
本地化 vs 云端对比
| 维度 | Ollama 本地 | OpenAI API |
|---|---|---|
| 代码数据 | 完全本地 | 发送到 OpenAI |
| 符合 GDPR/HIPAA | ✅ 无外传 | ⚠️ 需评估 |
| 代码质量 | 较低 | 最优 |
| 成本 | 零 | 按 token 计费 |
| 离线可用 | ✅ | ❌ |
详细配置参考 Ollama 本地模型指南。
7. 安全使用最佳实践清单
日常开发
- 使用 suggest 模式(默认),每次确认 diff
- 用 .codexignore 排除敏感目录(.env、secrets/、data/ 等)
- 不向 Codex 发送包含真实密码、API Key 或客户数据的代码
- 定期查看
~/.codex/logs/了解操作记录
团队 / 企业
- 为团队成员建立专用 API Key,通过密钥管理工具分发
- 定期轮转 API Key(建议每季度)
- 在 AGENTS.md 中限制 Codex 的访问范围和允许命令
- CI/CD 中使用 Docker 隔离 + 最小权限 Key
- 考虑使用 OpenAI Enterprise(零数据保留)
高度敏感项目
- 使用 Ollama 本地模型,代码不离开本机
- 代码审查时不使用 Codex(审查过程涉及完整代码)
- 运行前通过 gitleaks/trufflehog 扫描排除密钥
8. 常见问题 FAQ
Codex CLI 会把我的代码上传到 OpenAI 服务器吗?
会。Codex CLI 将你的提示词和相关代码上下文发送给 OpenAI API 进行处理。如果你有数据隐私要求,可以:(1) 使用 .codexignore 排除敏感文件;(2) 使用 Ollama 本地模型(代码完全不离开本机);(3) 使用 OpenAI API 的零数据保留(Zero Data Retention)选项。
Codex CLI 的沙箱机制能防止恶意代码执行吗?
suggest 和 auto-edit 模式下,Codex 会在你确认前显示所有文件修改,不会自动执行系统命令。full-auto 模式下才会自动执行命令,此时沙箱限制和 AGENTS.md 的 disallow_commands 配置是主要保护机制。不建议在生产环境直接使用 full-auto 模式。
Codex CLI 的 API Key 存储在哪里,安全吗?
通过 codex login(OAuth)认证的 token 存储在 ~/.codex/auth.json(仅当前用户可读)。通过 OPENAI_API_KEY 环境变量传入的方式更安全,可以利用系统的密钥管理工具(macOS Keychain、Linux Secret Service)。不要将 API Key 写入代码或 .env 文件并提交到 git。
企业能安全使用 Codex CLI 吗?
可以,需要配置以下措施:(1) 使用 OpenAI Enterprise API(数据不用于训练,零数据保留);(2) 通过 AGENTS.md 限制 Codex 只能访问特定目录;(3) 用 .codexignore 排除核心商业逻辑文件;(4) CI/CD 中使用短期 API Key;(5) 审查所有 full-auto 模式的操作记录。