扩展阅读

Agent 审批与安全 | ChatGPT 学习

OpenAI·2026/7/21·7 阅读

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_accessworkspace-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 默认关闭。当您启用它时:

设置默认行为
enabledfalse仅当命令网络访问已打开时才启动沙箱网络。
domains未设置使用允许列表行为,因此在添加 allow 规则之前不允许任何外部目标。支持精确主机、范围通配符和全局 * 允许规则;deny 总是胜出。
unix_sockets未设置在添加显式 allow 规则之前,不允许 Unix 套接字目标。
allow_local_bindingfalse阻止本地和私有网络目标,除非您添加精确的本地 IP 文字或 localhost 允许规则,或明确选择加入更广泛的本地/私有访问。
enable_socks5true在策略允许时暴露 SOCKS5 支持。
enable_socks5_udptrue在 SOCKS5 可用时允许通过 SOCKS5 进行 UDP。
allow_upstream_proxytrue让沙箱网络遵守来自环境的上游代理。
dangerously_allow_non_loopback_proxyfalse保持回环上的监听器端点,除非您故意将它们暴露到本地主机之外。
dangerously_allow_all_unix_socketsfalse保持基于 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-request
    • codex --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-requestCodex 可以读取文件、进行编辑并在工作空间中运行命令。Codex 需要审批才能编辑工作空间外或访问网络。
安全只读浏览--sandbox read-only --ask-for-approval on-requestCodex 可以读取文件并回答问题。Codex 需要审批才能进行编辑、运行命令或访问网络。
只读非交互式(CI)--sandbox read-only --ask-for-approval neverCodex 只能读取文件;从不要求审批。
自动编辑但要求审批运行不受信任的命令--sandbox workspace-write --ask-for-approval untrustedCodex 可以读取和编辑文件,但在运行不受信任的命令之前要求审批。
自动审查模式--sandbox workspace-write --ask-for-approval on-request -c approvals_reviewer=auto_reviewapprovals_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 seatbeltcodex sandbox landlock)。

操作系统级沙箱

Codex 根据您的操作系统以不同方式强制实施沙箱:

  • macOS 使用 Seatbelt 策略并使用 sandbox-exec 运行命令,该配置文件 (-p) 对应于您选择的 --sandbox 模式。当受限读取访问启用平台默认值时,Codex 会附加一个精选的 macOS 平台策略(而不是广泛允许 /System)以保持常见工具兼容性。
  • Linux 默认使用 bwrapseccomp
  • Windows适用于 Linux 的 Windows 子系统 2 (WSL2) 中运行时使用 Linux 沙箱实现。WSL1 在 Codex 0.114 中受支持;从 0.115 开始,Linux 沙箱移至 bwrap,因此 WSL1 不再受支持。在 Windows 上本地运行时,Codex 使用 Windows 沙箱 实现。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.