Codex 沙箱与审批安全机制解析
大约 3 分钟
Codex 沙箱与审批安全机制解析
1. 系统级沙箱架构概览
在代码 Agent 领域,命令执行安全是核心防御防线。Claude Code 使用受限子进程与拦截器;OpenCode 依赖系统环境配置和中间件拦截;而 Codex 则在 Rust Core 层构建了三平台原生系统级隔离沙箱。
┌─────────────────────────────────────────────────────────┐
│ Codex Exec Policy │
│ • Shell AST 解析 (shlex / bash parse) │
│ • 危险命令探测 (is_dangerous_command) │
│ • 规则数据库匹配 (default.rules / user rules) │
└────────────────────────────┬────────────────────────────┘
│
▼ Evaluation Result
┌─────────────────────────────────────────────────────────┐
│ Sandbox Enforcement Layer │
│ │
│ ┌────────────────┐ ┌────────────────┐ ┌─────────────┐ │
│ │ Linux (bwrap) │ │ macOS Landlock │ │ Windows Sec │ │
│ │ Bubblewrap 容器│ │ Sandbox.kext │ │ Restricted │ │
│ └────────────────┘ └────────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────┘位于 [codex-rs/sandboxing](file:///Users/util6/fork-code/codex/codex-rs/sandboxing) 和 [codex-rs/core/src/exec_policy.rs](file:///Users/util6/fork-code/codex/codex-rs/core/src/exec_policy.rs) 的沙箱逻辑提供双重保障:
- 静态/动态策略评估 (
exec_policy.rs):在指令下发前判断是否需要用户人工 Approval。 - 操作系统底层容器隔离 (
sandboxing/):在指令执行时限制文件系统读写权限与网络访问。
2. 命令规范化与危险命令探测 (exec_policy.rs)
在 [codex-rs/core/src/exec_policy.rs](file:///Users/util6/fork-code/codex/codex-rs/core/src/exec_policy.rs) 中,Codex 对即将执行的 Shell 命令行实施了非常严密的预解析:
// codex-rs/core/src/exec_policy.rs
use codex_shell_command::bash::parse_shell_lc_plain_commands;
use codex_shell_command::is_dangerous_command::command_might_be_dangerous;
use codex_shell_command::is_safe_command::is_known_safe_command;规范化校验步骤:
- AST 语法解析:使用
parse_shell_lc_plain_commands将复合 Shell 字符串分解为独立子指令链,杜绝拼接逃逸。 - 禁忌模式检测 (Banned Prefixes):默认禁用
python -c/python3 -c等容易导致挂起或无监控内联执行的模式。 - 白名单与危险度匹配:
- 若指令完全命中
is_known_safe_command(如只读git status、ls),则自动授权。 - 若被
command_might_be_dangerous标记为有风险(如删除目录、系统修改),则触发最高级别预警。
- 若指令完全命中
3. 动态 Approval 审批逻辑
Codex 提供了精细化的 Granular 审批机制:
AskForApproval::Always:任何非只读/风险工具必须经过用户手动弹窗确认。AskForApproval::Never:全自动模式(常用于 CI/CD 或自动化测试环境)。AskForApproval::Granular:混合模式,依据SandboxApproval与RulesApproval策略判断。
当策略判定需要 Approval 时,Rust Core 会暂停当前的 Turn 驱动循环,生成一条 Event::AskForApproval 并广播给客户端。直到客户端反馈 ApprovalResult::Approved,Turn 才会继续调度沙箱执行。
4. 三大平台底层沙箱实现
Codex 针对主流操作系统实现了专有的底层隔离容器:
- Linux (Bubblewrap
bwrap):- 依赖 [
codex-rs/bwrap](file:///Users/util6/fork-code/codex/codex-rs/bwrap),通过 Linux Namespace(Mount, PID, Network)实现挂载点读写分离。仅允许工作区根目录 (workspace_roots) 可写,系统敏感路径映射为只读。
- 依赖 [
- macOS (Landlock & Sandbox Profiles):
- 依赖 [
codex-rs/core/src/landlock.rs](file:///Users/util6/fork-code/codex/codex-rs/core/src/landlock.rs),结合 macOS Sandbox API 生成受限应用沙箱规则。
- 依赖 [
- Windows (Restricted Token & Job Objects):
- 依赖 [
codex-rs/windows-sandbox-rs](file:///Users/util6/fork-code/codex/codex-rs/windows-sandbox-rs),使用 Windows Low Integrity Level 令牌与 Win32 Job Object 限制 CPU/内存资源与磁盘访问。
- 依赖 [
5. 对比与经验总结
| 特性维度 | Codex | OpenCode | Claude Code |
|---|---|---|---|
| 安全实施层 | Rust Core 系统级原生物理沙箱 | Node.js JS 运行时钩子拦截 | JS Process Wrapper 与正则启发 |
| 命令预处理 | Shell AST 标准语法分析 | 正则与语义逻辑捕获 | 字符串匹配与工具选择提示 |
| 隔离级别 | 操作系统 Namespace / Token 硬隔离 | 软隔离 / 进程级依赖 | 依赖宿主环境与配置 |
这种在 Rust Core 建立统一的 Exec Policy 与原生沙箱硬隔离的设计,是 Codex 具备高度安全保障的核心原因。