Skip to content

Seatbelt 是 macOS 原生的沙箱机制(sandbox-exec),Codex 使用它通过 plist 规则实现文件系统权限隔离。

为什么需要 Seatbelt

macOS 不支持 Linux 的 Landlock/Bubblewrap,需要使用平台原生的沙箱方案。Seatbelt(sandbox-exec 命令)是 macOS 内置的沙箱机制,通过声明式 plist 规则控制进程的文件系统访问权限。Codex 在 macOS 上使用 Seatbelt,在 Linux 上使用 Landlock,通过 SandboxManager 统一抽象平台差异。

核心原理

  1. plist 规则:每次命令执行时动态生成 plist 规则文件,声明允许/禁止的路径和操作类型
  2. sandbox-exec:通过 sandbox-exec -p <rules> <command> 在沙箱中执行命令,子进程自动继承限制
  3. 动态权限:用户审批后通过 additional_permissions 临时扩展访问范围
  4. 平台适配SandboxManager::transform() 在 macOS 上自动选择 Seatbelt,对调用者透明

在源码中的实现

  • codex-rs/sandboxing/src/seatbelt/ — Seatbelt plist 规则生成和 sandbox-exec 调用
  • codex-rs/sandboxing/src/manager.rsSandboxManager 平台适配,macOS 上选择 SandboxType::MacosSeatbelt
  • codex-rs/sandboxing/src/lib.rsget_platform_sandbox() 编译时选择平台沙箱

相关概念