Skip to content

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 neverCodex 只能读取文件;从不请求批准
自动编辑但运行不受信任命令时请求批准--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 启动时重新应用。

优先级和分层

有效配置按以下顺序组装(上层覆盖下层):

  1. macOS 托管首选项(MDM)
  2. ~/.codex/managed_config.toml
  3. CLI --config key=value 覆盖
  4. 用户的 ~/.codex/config.toml
  5. 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 分发配置到受管设备

aicodex 文档网站