Sooua
登录
返回文章列表
Codex··4 分钟阅读

沙盒安全模型深度解析:分层防御的工程实现

Codex 的安全模型采用"沙盒约束 + 审批策略"双轨制:

官方原文索引: 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
分享

评论

登录 后参与讨论。

加载中…

相关文章