官方原文索引: Agent approvals & security / Sandbox / Running Codex safely
1. 核心架构与原理解析
Codex 的安全模型采用**"沙盒约束 + 审批策略"双轨制**:
沙盒(Sandbox)—— 技术边界层:
| 模式 | 文件读取 | 文件写入 | 网络访问 |
|---|---|---|---|
read-only | 全局可读 | 完全禁止 | 禁止 |
workspace-write | 全局可读 | 工作区 + /tmp | 默认禁止 |
danger-full-access | 无限制 | 无限制 | 无限制 |
OS 级实现差异:
审批策略(Approval Policy):
on-request:越界操作暂停确认(推荐)never:全自动化(CI 用)auto-review:子 Agent 评估风险等级后自动决策
🛠️ 专家视角 / 架构思考: Windows 沙盒使用 Restricted Token 而非内核级隔离,安全强度弱于 macOS/Linux。企业环境中建议优先使用 WSL2 + Linux Landlock,或在受限虚拟机内运行 Codex。
2. 工程落地与代码示例
企业级安全策略(requirements.toml)
# 管理员强制,用户不可覆盖
allowed_sandbox_modes = ["read-only", "workspace-write"]
allowed_approval_policies = ["on-request", "untrusted"]
[experimental_network]
enabled = true
allow_local_binding = true
allowed_domains = ["*.openai.com", "registry.npmjs.org", "github.com"]
denied_domains = ["pastebin.com", "*.ngrok.io", "discord.com"]
# 命令级规则(Starlark)
prefix_rule(
pattern = ["kubectl", "delete"],
decision = "require_approval",
justification = "删除操作必须人工确认"
)
prefix_rule(
pattern = ["rm", "-rf"],
decision = "require_approval",
justification = "递归删除必须人工确认"
)
prefix_rule(
pattern = ["curl", "-d"],
decision = "require_approval",
justification = "POST 数据外发必须人工确认"
)安全启动模式矩阵
# 审计模式:零写入风险
codex --sandbox read-only "分析安全漏洞"
# 日常开发:自动编辑 + 沙盒保护
codex --full-auto
# CI/CD:完全自动但限定工作区
codex exec --approval-mode never --sandbox workspace-write "run tests"
# 管道分析:接收 stdin 输入进行诊断
cat error.log | codex exec --sandbox read-only "分析错误根因"生成代码的安全边界
在 AGENTS.md 中注入安全约束:
## Security Rules
- 所有用户输入必须使用参数化查询或 ORM 等价方式
- 禁止 eval() / new Function() / exec() 动态代码执行
- 新增依赖必须通过 npm audit 检查
- 禁止生成包含密钥、密码的硬编码字符串
- 所有 API 响应必须过滤敏感字段3. 场景深入:企业安全合规实践
场景:开发机与生产机隔离
场景:敏感项目保护
# .codex/config.toml(敏感项目)
sandbox_mode = "read-only"
approval_policy = "untrusted"
# 额外限制
[security]
blocked_commands = ["curl", "wget", "ssh", "scp"]
blocked_patterns = ["password", "secret", "token", "key"]场景:供应链攻击防护
# 限制网络访问防止恶意包下载
[experimental_network]
enabled = true
allowed_domains = [
"registry.npmjs.org",
"pypi.org",
"rubygems.org",
"crates.io"
]
denied_domains = ["*"] # 默认拒绝所有其他域名4. 💡 核心避坑与最佳实践 (Takeaways)
- 沙盒与审批是"与"关系:
workspace-write+on-request比单一 full-access 更安全且高效 .git和.codex受默认保护:即使 workspace-write 也是只读保护- 网络策略"默认拒绝":未显式允许的域名一律拦截
- Starlark 规则优于通配符:具体前缀匹配比模糊正则更安全
- 定期审计 Agent 行为:通过遥测数据分析高频命令,发现异常模式
- Windows 用户优先 WSL2:Windows 沙盒是用户态实现,建议配合 Linux Landlock