Agent 审批与安全 | ChatGPT 学习
来源: https://developers.openai.com/codex/agent-approvals-security 抓取时间: 2026-07-21 16:26:47
Codex 帮助保护您的代码和数据并降低滥用风险。 本页面介绍如何安全地操作 Codex,包括沙箱、审批和网络访问。如果您正在寻找 Codex Security(用于扫描连接的 GitHub 仓库的产品),请参阅 Codex Security。 默认情况下,Agent 在网络访问关闭的情况下运行。在本地,Codex 使用操作系统强制的沙箱来限制它可以接触的内容(通常限于当前工作空间),外加一个审批策略来控制它何时必须在执行前询问您。 有关沙箱在 ChatGPT 桌面应用程序、Codex CLI 和 IDE 扩展中的工作原理的高级说明,请参阅 沙箱。有关更广泛的企业安全概述,请参阅 Codex 安全白皮书。
沙箱和审批
Codex 安全控制来自两个协同工作的层:
- 沙箱模式:Codex 在执行模型生成的命令时在技术上可以做什么(例如,它可以在哪里写入以及是否可以访问网络)。
- 审批策略:Codex 在执行操作之前必须询问您的时间(例如,离开沙箱、使用网络或运行受信任集之外的命令)。
Codex 根据您运行它的位置使用不同的沙箱模式:
- Codex 云:在隔离的 OpenAI 管理容器中运行,防止访问您的主机系统或不相关的数据。使用两阶段运行时模型:设置阶段在 Agent 阶段之前运行,可以访问网络以安装指定的依赖项,然后 Agent 阶段默认脱机运行,除非您为该环境启用互联网访问。为云环境配置的机密仅在设置期间可用,并在 Agent 阶段开始前被删除。
- Codex CLI / IDE 扩展:操作系统级机制强制实施沙箱策略。默认设置包括无网络访问和仅限于活动工作空间的写入权限。您可以根据您的风险承受能力配置沙箱、审批策略和网络设置。
在 Auto 预设中(例如,--sandbox workspace-write --ask-for-approval on-request),Codex 可以自动读取文件、进行编辑并在工作目录中运行命令。
Codex 会要求审批编辑工作空间外的文件或运行需要网络访问的命令。如果您想聊天或规划而不进行更改,请使用 /permissions 命令切换到 read-only 模式。
Codex 还可以为宣传有副作用的应用程序(连接器)工具调用请求审批,即使该操作不是 Shell 命令或文件更改。当工具宣传破坏性注释时,破坏性应用程序/MCP 工具调用始终需要审批,即使它也宣传其他提示(例如,只读提示)。
网络访问 高风险
对于 Codex 云,请参阅 Agent 互联网访问 以启用完整互联网访问或域允许列表。
对于 ChatGPT 桌面应用程序、Codex CLI 或 IDE 扩展,默认的 workspace-write 沙箱模式保持网络访问关闭,除非您在配置中启用它:
[sandbox_workspace_write]
network_access = true
网络隔离
网络访问通过适用于命令生成的脚本、程序和子进程的目标规则进行控制。当命令网络访问已启用时,打开 network_proxy 功能以将该流量限制到您配置的网络策略。
[features.network_proxy]
enabled = true
domains = { "api.openai.com" = "allow", "example.com" = "deny" }
对于一次性 CLI 会话,当您只需要切换时使用布尔速记,当您也设置策略选项时使用表格形式:
codex \
-c 'features.network_proxy=true' \
-c 'sandbox_workspace_write.network_access=true'
codex \
-c 'features.network_proxy.enabled=true' \
-c 'features.network_proxy.domains={ "api.openai.com" = "allow", "example.com" = "deny" }' \
-c 'sandbox_workspace_write.network_access=true'
该功能改变了已启用网络访问的强制方式;它本身不授予网络访问权限。将 sandbox_workspace_write.network_access 与 workspace-write 配置一起使用来决定命令是否具有网络访问权限:
- 网络关闭 +
network_proxy打开:网络保持关闭,该功能不执行任何操作。 - 网络打开 +
network_proxy关闭:网络保持打开,无限制直接出站访问。 - 网络打开 +
network_proxy打开:网络保持打开,出站流量受配置的网络策略限制。
管理员管理的 experimental_network 要求与用户功能切换是分开的。它们可以在没有 features.network_proxy 的情况下配置和启动沙箱网络,但当活动沙箱保持网络关闭时,它们不会打开网络访问。请参阅 托管配置 了解管理员端的 requirements.toml 形式。
网络策略
域规则是允许列表优先:
- 精确主机只匹配它们自己。
*.example.com匹配子域名,如api.example.com,但不匹配example.com。**.example.com同时匹配顶点和子域名。- 全局
*允许规则匹配任何未被拒绝的公共主机。将*视为广泛网络访问,尽可能优先使用范围规则。 deny总是胜过allow,全局*仅对允许规则有效。
本地和私有目标
默认情况下,allow_local_binding = false 阻止回环、链路本地和私有目标:
- 特定例外:当命令需要一个本地目标时,添加精确的本地 IP 文字或
localhost允许规则。 - 更广泛的访问:仅当您有意想要更广泛的本地/私有访问时,设置
allow_local_binding = true。 - 通配符:通配符规则不算作显式本地例外。
- 已解析地址:解析为本地/私有 IP 的主机名即使匹配允许列表也会保持阻止。
DNS 重新绑定保护
在允许主机名之前,Codex 会尽最大努力执行 DNS 和 IP 分类检查:
- 失败或超时的查找会被阻止。
- 解析为非公共地址的主机名会被阻止。
- 该检查降低了 DNS 重新绑定风险,但不能消除它。完全防止重新绑定需要通过传输层固定已解析的 IP。
如果敌对 DNS 在范围内,请也在较低层强制实施出站控制。
危险设置
两个设置故意扩大了信任边界:
dangerously_allow_non_loopback_proxy = true可以将代理监听器暴露到回环之外。dangerously_allow_all_unix_sockets = true绕过 Unix 套接字允许列表。
仅在严格控制的环境中使用它们。当启用 Unix 套接字代理时,即使请求了非回环绑定,监听器也会保持仅回环,因此沙箱网络不会成为本地守护进程的远程桥梁。
network_proxy 默认关闭。当您启用它时:
| 设置 | 默认 | 行为 |
|---|---|---|
enabled | false | 仅当命令网络访问已打开时才启动沙箱网络。 |
domains | 未设置 | 使用允许列表行为,因此在添加 allow 规则之前不允许任何外部目标。支持精确主机、范围通配符和全局 * 允许规则;deny 总是胜出。 |
unix_sockets | 未设置 | 在添加显式 allow 规则之前,不允许 Unix 套接字目标。 |
allow_local_binding | false | 阻止本地和私有网络目标,除非您添加精确的本地 IP 文字或 localhost 允许规则,或明确选择加入更广泛的本地/私有访问。 |
enable_socks5 | true | 在策略允许时暴露 SOCKS5 支持。 |
enable_socks5_udp | true | 在 SOCKS5 可用时允许通过 SOCKS5 进行 UDP。 |
allow_upstream_proxy | true | 让沙箱网络遵守来自环境的上游代理。 |
dangerously_allow_non_loopback_proxy | false | 保持回环上的监听器端点,除非您故意将它们暴露到本地主机之外。 |
dangerously_allow_all_unix_sockets | false | 保持基于 Unix 套接字访问允许列表,除非您故意绕过该保护。 |
您还可以在不授予生成命令完全网络访问权限的情况下控制 网络搜索工具。Codex 默认使用网络搜索缓存来访问结果。缓存是 OpenAI 维护的网络结果索引,因此缓存模式返回预索引结果而不是获取实时页面。这减少了来自任意实时内容的提示注入风险,但您仍应将网络结果视为不受信任。如果您使用 --yolo 或其他完全访问沙箱设置,网络搜索默认为实时结果。使用 --search 或设置 web_search = \"live\" 以允许实时浏览,或将其设置为 \"disabled\" 以关闭工具: |
web_search = "cached" # default
# web_search = "disabled"
# web_search = "live" # same as --search
当外部网络访问应由搜索索引控制时,设置 web_search = \"indexed\"。在 Codex 中启用网络访问或网络搜索时请谨慎。提示注入可能导致 Agent 获取并遵循不受信任的指令。
默认值和建议
- 启动时,Codex 检测文件夹是否受版本控制并推荐:
- 受版本控制的文件夹:
Auto(工作空间写入 + 按需审批) - 不受版本控制的文件夹:
read-only
- 受版本控制的文件夹:
- 根据您的设置,Codex 也可能以
read-only启动,直到您明确信任工作目录(例如,通过入职提示或/permissions)。 - 工作空间包括当前目录和临时目录如
/tmp。使用/status命令查看工作空间中有哪些目录。 - 要接受默认值,请运行
codex。 - 您可以显式设置这些:
codex --sandbox workspace-write --ask-for-approval on-requestcodex --sandbox read-only --ask-for-approval on-request
可写根中的受保护路径
在默认的 workspace-write 沙箱策略中,可写根仍包括受保护的路径:
<writable_root>/.git被保护为只读,无论它作为目录还是文件出现。- 如果
<writable_root>/.git是指针文件(gitdir: ...),解析的 Git 目录路径也被保护为只读。 <writable_root>/.agents作为目录存在时被保护为只读。<writable_root>/.codex作为目录存在时被保护为只读。- 保护是递归的,因此这些路径下的所有内容都是只读的。
无审批提示运行
您可以使用 --ask-for-approval never 或 -a never(简写)禁用审批提示。
此选项适用于所有 --sandbox 模式,因此您仍然可以控制 Codex 的自主级别。Codex 在您设置的约束范围内尽最大努力。
如果您需要 Codex 读取文件、进行编辑并在没有审批提示的情况下运行具有网络访问权限的命令,请使用 --sandbox danger-full-access(或 --dangerously-bypass-approvals-and-sandbox 标志)。在这样做之前请谨慎。
作为中间立场,approval_policy = { granular = { ... } } 允许您保持特定审批提示类别是交互式的,同时自动拒绝其他类别。粒度策略涵盖沙箱审批、execpolicy 规则提示、MCP 提示、request_permissions 提示和技能脚本审批。
自动审批审查
默认情况下,审批请求会路由给您:
approvals_reviewer = "user"
当审批是交互式时,例如 approval_policy = \"on-request\" 或粒度审批策略,自动审批审查适用。设置 approvals_reviewer = \"auto_review\" 以在 Codex 运行请求之前通过审查 Agent 路由符合条件的审批请求:
approval_policy = "on-request"
approvals_reviewer = "auto_review"
有关完整审查员生命周期、触发条件、配置优先级和失败行为,请参阅 自动审查。
审查员仅评估已经需要审批的操作,例如沙箱升级、阻止的网络请求、request_permissions 提示或有副作用的应用程序和 MCP 工具调用。保持在沙箱内的操作无需额外审查步骤即可继续。
审查员策略检查数据泄露、凭证探测、持续安全削弱和破坏性操作。当策略允许时,低风险和中风险操作可以继续。该策略拒绝关键风险操作。高风险操作需要足够的用户授权且没有匹配的拒绝规则。提示构建、审查会话和解析失败会关闭失败。超时会单独显示,但操作仍不会运行。
默认审查员策略 在开源 Codex 存储库中。企业可以在托管要求中用 guardian_policy_config 替换其租户特定部分。也支持本地 [auto_review].policy 文本,但托管要求优先。有关设置详细信息,请参阅 托管配置。
在 ChatGPT 桌面应用程序中,这些审查显示为自动审查项目,状态为"审查中"、"已批准"、"已拒绝"、"已中止"或"已超时"。它们还可以包括已审查请求的风险级别和用户授权评估。
自动审查使用额外的模型调用,因此它可能会增加 Codex 使用量。管理员可以使用 allowed_approvals_reviewers 约束它。
常见沙箱和审批组合
| 意图 | 标志 / 配置 | 效果 |
|---|---|---|
| 自动(预设) | 无需标志 或 --sandbox workspace-write --ask-for-approval on-request | Codex 可以读取文件、进行编辑并在工作空间中运行命令。Codex 需要审批才能编辑工作空间外或访问网络。 |
| 安全只读浏览 | --sandbox read-only --ask-for-approval on-request | Codex 可以读取文件并回答问题。Codex 需要审批才能进行编辑、运行命令或访问网络。 |
| 只读非交互式(CI) | --sandbox read-only --ask-for-approval never | Codex 只能读取文件;从不要求审批。 |
| 自动编辑但要求审批运行不受信任的命令 | --sandbox workspace-write --ask-for-approval untrusted | Codex 可以读取和编辑文件,但在运行不受信任的命令之前要求审批。 |
| 自动审查模式 | --sandbox workspace-write --ask-for-approval on-request -c approvals_reviewer=auto_review 或 approvals_reviewer = \"auto_review\" | 与标准按需模式相同的沙箱边界,但符合条件的审批请求由自动审查审查而不是向用户展示。 |
| 危险完全访问 | --dangerously-bypass-approvals-and-sandbox(别名:--yolo) | 高风险 无沙箱;无审批 (不推荐) |
对于非交互式运行,使用 codex exec --sandbox workspace-write;Codex 将旧的 codex exec --full-auto 调用保留为已弃用的兼容路径并打印警告。 | ||
使用 --ask-for-approval untrusted,Codex 仅自动运行已知安全的读取操作。可以改变状态或触发外部执行路径的命令(例如,破坏性 Git 操作或 Git 输出/配置覆盖标志)需要审批。 |
config.toml 中的配置
有关更广泛的配置工作流,请参阅 配置基础、高级配置 和 配置参考。
# Always ask for approval mode
approval_policy = "untrusted"
sandbox_mode = "read-only"
allow_login_shell = false # optional hardening: disallow login shells for shell-based tools
# Optional: Allow network in workspace-write mode
[sandbox_workspace_write]
network_access = true
# Optional: granular approval policy
# approval_policy = { granular = {
# sandbox_approval = true,
# rules = true,
# mcp_elicitations = true,
# request_permissions = false,
# skill_approval = false
# } }
您还可以将预设保存为 配置文件,然后使用 codex --profile profile-name 选择它们:
# ~/.codex/full_auto.config.toml
approval_policy = "on-request"
sandbox_mode = "workspace-write"
# ~/.codex/readonly_quiet.config.toml
approval_policy = "never"
sandbox_mode = "read-only"
本地测试沙箱
要查看在 Codex 沙箱下运行命令时会发生什么,请使用这些 Codex CLI 命令:
# macOS
codex sandbox macos [--permissions-profile <name>] [--log-denials] [COMMAND]...
# Linux
codex sandbox linux [--permissions-profile <name>] [COMMAND]...
# Windows
codex sandbox windows [--permissions-profile <name>] [COMMAND]...
sandbox 命令也可以用作 codex debug,平台助手有别名(例如 codex sandbox seatbelt 和 codex sandbox landlock)。
操作系统级沙箱
Codex 根据您的操作系统以不同方式强制实施沙箱:
- macOS 使用 Seatbelt 策略并使用
sandbox-exec运行命令,该配置文件 (-p) 对应于您选择的--sandbox模式。当受限读取访问启用平台默认值时,Codex 会附加一个精选的 macOS 平台策略(而不是广泛允许/System)以保持常见工具兼容性。 - Linux 默认使用
bwrap加seccomp。 - Windows 在 适用于 Linux 的 Windows 子系统 2 (WSL2) 中运行时使用 Linux 沙箱实现。WSL1 在 Codex
0.114中受支持;从0.115开始,Linux 沙箱移至bwrap,因此 WSL1 不再受支持。在 Windows 上本地运行时,Codex 使用 Windows 沙箱 实现。