Appearance
Seatbelt 是 macOS 原生的沙箱机制(sandbox-exec),Codex 使用它通过 plist 规则实现文件系统权限隔离。
为什么需要 Seatbelt
macOS 不支持 Linux 的 Landlock/Bubblewrap,需要使用平台原生的沙箱方案。Seatbelt(sandbox-exec 命令)是 macOS 内置的沙箱机制,通过声明式 plist 规则控制进程的文件系统访问权限。Codex 在 macOS 上使用 Seatbelt,在 Linux 上使用 Landlock,通过 SandboxManager 统一抽象平台差异。
核心原理
- plist 规则:每次命令执行时动态生成 plist 规则文件,声明允许/禁止的路径和操作类型
- sandbox-exec:通过
sandbox-exec -p <rules> <command>在沙箱中执行命令,子进程自动继承限制 - 动态权限:用户审批后通过
additional_permissions临时扩展访问范围 - 平台适配:
SandboxManager::transform()在 macOS 上自动选择 Seatbelt,对调用者透明
在源码中的实现
codex-rs/sandboxing/src/seatbelt/— Seatbelt plist 规则生成和sandbox-exec调用codex-rs/sandboxing/src/manager.rs—SandboxManager平台适配,macOS 上选择SandboxType::MacosSeatbeltcodex-rs/sandboxing/src/lib.rs—get_platform_sandbox()编译时选择平台沙箱