主题
Codex CLI 安全指南
Codex 的构建重点是保护代码和数据免受泄露,并防止滥用。
默认情况下,代理在禁用网络访问的情况下运行,文件编辑仅限于当前工作区,无论是在本地还是云端。
沙箱机制
根据运行 Codex 的位置,有不同的沙箱方法:
- macOS: 使用 Seatbelt 沙箱
- Linux: 使用 Landlock + seccomp 沙箱
- Windows: 使用实验性 Windows 沙箱或推荐使用 WSL
默认审批模式
我们为 Codex 在你计算机上的工作方式选择了强大的默认设置。在默认审批模式下,Codex 可以自动读取文件、进行编辑,并在工作目录中运行命令。
但是,Codex 需要你的批准才能在工作目录外工作或运行需要网络访问的命令。当你只想聊天,或者想在开始之前先计划,可以使用 /approvals 命令切换到只读模式。
网络访问控制
如果你使用 Codex CLI / IDE 扩展,默认的 workspace-write 沙箱选项会默认禁用网络,除非在配置中启用:
toml
[sandbox_workspace_write]
network_access = true你也可以通过传递 --search 标志或在 config.toml 中切换功能来启用网络搜索工具,而不允许代理无限制的网络访问:
toml
[features]
web_search_request = true警告
由于提示注入的风险,我们建议在 Codex 中启用网络访问或网络搜索时要谨慎。
常见沙箱 + 审批组合
| 意图 | 标志 | 效果 |
|---|---|---|
| Auto(预设) | 无需标志,默认 | Codex 可以读取文件、编辑和在工作区运行命令。Codex 在沙箱外运行命令时请求批准 |
| 只读 | --sandbox read-only --ask-for-approval never | Codex 只能读取文件;从不请求批准 |
| 自动编辑但运行不受信任命令时请求批准 | --sandbox workspace-write --ask-for-approval untrusted | 可以读取和编辑文件,但在运行不受信任的命令前请求批准 |
| 危险的完全访问 | --dangerously-bypass-approvals-and-sandbox(别名:--yolo) | 无沙箱;无审批(不推荐) |
在 config.toml 中配置
toml
# 始终请求批准模式
approval_policy = "untrusted"
sandbox_mode = "read-only"
# 可选:在 workspace-write 模式下允许网络
[sandbox_workspace_write]
network_access = true无审批运行
可以使用 --ask-for-approval never 或简写 -a never 禁用所有审批提示。
此选项适用于所有 --sandbox 模式,因此你仍然可以完全控制 Codex 的自主级别。它会在你提供的任何约束下尽最大努力。
如果你需要 Codex 读取文件、编辑和运行带网络访问的命令而无需批准,可以使用完全访问。在这样做之前请谨慎。
测试沙箱
要测试在 Codex 提供的沙箱下运行命令时会发生什么,我们在 Codex CLI 中提供以下子命令:
bash
# macOS
codex sandbox macos [COMMAND]...
# Linux
codex sandbox linux [COMMAND]...平台特定沙箱
Codex 用于实现沙箱策略的机制取决于你的操作系统:
- macOS: Seatbelt(App Sandbox)
- Linux: Landlock + seccomp
对于 Windows 用户,我们建议在 Windows Subsystem for Linux (WSL) 或 Docker 容器中本地运行 Codex 以提供安全隔离。
如果你在 Windows 上使用 Codex IDE 扩展,直接支持 WSL——在 VS Code 设置中设置以下内容,以便在 WSL 可用时将代理保持在 WSL 内:
json
{
"chatgpt.runCodexInWindowsSubsystemForLinux": true
}这确保 IDE 扩展继承 Linux 沙箱语义用于命令、审批和文件系统访问,即使主机操作系统是 Windows。
注意,在 Docker 等容器化环境中运行 Linux 时,如果主机/容器配置不支持必要的 Landlock/seccomp API,沙箱可能无法工作。
在这种情况下,我们建议配置你的 Docker 容器以提供你需要的沙箱保证,然后在容器内使用 --sandbox danger-full-access(或更简单地,--dangerously-bypass-approvals-and-sandbox 标志)运行 codex。
版本控制最佳实践
Codex 与你的版本控制系统配合最佳,我们建议:
- 在每个任务前后创建 git 检查点
- 使用 git diff 查看更改
- 使用 git revert 或 git checkout 回滚不需要的更改
OpenTelemetry 监控
Codex 支持通过 OpenTelemetry (OTEL) 进行可选监控,帮助团队审计使用情况、调查问题和满足合规要求,而不会削弱本地安全默认设置。遥测默认关闭,必须在配置中显式启用。
启用 OTEL(可选)
在 Codex 配置(通常是 ~/.codex/config.toml)中添加 [otel] 块,选择导出器以及是否可以记录提示文本。
toml
[otel]
environment = "staging" # dev | staging | prod
exporter = "none" # none | otlp-http | otlp-grpc
log_user_prompt = false # 除非策略允许,否则编辑提示文本OTLP/HTTP 导出器示例
toml
[otel]
exporter = { otlp-http = {
endpoint = "https://otel.example.com/v1/logs",
protocol = "binary",
headers = { "x-otlp-api-key" = "${OTLP_TOKEN}" }
}}OTLP/gRPC 导出器示例
toml
[otel]
exporter = { otlp-grpc = {
endpoint = "https://otel.example.com:4317",
headers = { "x-otlp-meta" = "abc123" }
}}事件会批量处理并在关闭时刷新。只有 Codex 的 OTEL 模块产生的遥测会被导出。
事件类别
代表性事件类型包括:
- API 请求和响应
- SSE/事件流
- 提示和工具调用
- 审批和结果
安全和隐私指南
- 仅在需要时启用
log_user_prompt - 使用环境变量存储敏感的 API 密钥
- 确保遥测端点安全
OTEL 是可选的,旨在补充而非替代上述沙箱和审批保护。
企业管理配置
企业管理员可以使用托管配置层设置安全默认值和组织策略。托管配置合并在用户的本地 config.toml 之上,并优先于任何 CLI --config 覆盖,在 Codex 启动时设置起始值。用户仍然可以在会话期间更改这些设置;托管默认值在下次 Codex 启动时重新应用。
优先级和分层
有效配置按以下顺序组装(上层覆盖下层):
- macOS 托管首选项(MDM)
~/.codex/managed_config.toml- CLI
--config key=value覆盖 - 用户的
~/.codex/config.toml - CLI 内置默认值
位置
- 托管配置文件:
~/.codex/managed_config.toml - macOS MDM:
com.openai.codex域下的config_toml_base64
如果文件缺失,托管层不会被应用。
示例 managed_config.toml
toml
# 设置保守的默认值
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[sandbox_workspace_write]
network_access = false # 除非显式允许,否则保持网络禁用
[otel]
environment = "prod"
exporter = "otlp-http" # 指向你的收集器
log_user_prompt = false # 保持提示编辑推荐的防护措施
- 强制执行
approval_policy = "on-request"或更严格 - 默认禁用网络访问
- 启用遥测用于审计
- 使用 MDM 分发配置到受管设备