Codex CLI 沙箱实战:安全地让 AI 执行 Shell 命令
本系列基于 Codex CLI 源码分析,本文聚焦沙箱的实战使用与安全配置。
全网唯一从 Rust 源码层面拆解 Codex CLI 的系列
一、为什么要学沙箱?
AI 代理需要执行 cargo build、npm install、git push 等命令。如果不加限制,一个错误的 prompt 可能导致灾难性后果。Codex CLI 的沙箱系统提供多层防护。
二、codex sandbox 命令
bash
# 在沙箱中执行单条命令
codex sandbox -- ls -la
# 在沙箱中执行脚本
codex sandbox -- bash -c "cargo build && cargo test"
# 指定沙箱类型
codex sandbox --type landlock -- ls -la
# 查看沙箱状态
codex sandbox --status
三、权限配置实战
场景一:个人项目(推荐配置)
toml
# ~/.codex/config.toml
[sandbox]
linux = "landlock"
macos = "seatbelt"
windows = "restricted"
[permissions]
permission_profile = "workspace"
allow = [
"./target", # Rust 构建输出
"./node_modules", # Node 依赖
"/tmp",
"~/.cargo", # Rust 工具链
"~/.npm", # Node 缓存
]
deny = [
"./.env",
"./secrets",
"~/.ssh",
"~/.aws",
]
场景二:CI/CD 环境
toml
[approvals]
approval_policy = "never" # CI 中不需要交互
[sandbox]
linux = "bubblewrap" # 更严格的隔离
[permissions]
permission_profile = "workspace"
allow = [
"./src",
"./tests",
"./target",
"/tmp",
"~/.cargo/registry",
]
deny = [
"./.git/config",
"/etc",
"/home",
]
[network]
[[network.domain_permissions]]
host = "crates.io"
action = "allow"
[[network.domain_permissions]]
host = "github.com"
action = "allow"
场景三:学习/实验环境
toml
[approvals]
approval_policy = "always" # 每次操作都确认
[sandbox]
linux = "landlock"
[permissions]
permission_profile = "workspace"
# 不添加任何额外 allow,最严格
四、审批流程
当 AI 尝试执行被限制的操作时:
AI 尝试: rm -rf /important/data
│
▼
┌──────────────────────┐
│ Sandbox 拦截 │
│ → 路径不在 allowlist │
└──────┬───────────────┘
│
▼
┌──────────────────────┐
│ Guardian 风险评估 │
│ → 危险等级: HIGH │
└──────┬───────────────┘
│
▼
┌──────────────────────┐
│ ExecApprovalRequest │
│ → 弹窗: "AI 尝试 │
│ 删除重要数据, │
│ 是否允许?" │
└──────┬───────────────┘
│
├── Allow ──→ 执行(沙箱内)
│
└── Deny ──→ 拒绝,记录违规
五、总结
- 沙箱是 AI 编程代理的安全底线
- 根据场景选择合适的安全等级
- 审批策略提供了人机协作的安全闭环
- 永远不要在生产环境禁用沙箱
讨论:你遇到过 AI 误删文件的情况吗?欢迎分享你的经历。