AgentHarness 课程
Hermes 专题/课程概述

第二十二课:macOS 沙盒:Seatbelt

sandbox-exec框架白名单策略实际限制效果

学习目标

  • 了解 macOS Seatbelt 沙盒机制
  • 理解白名单策略的工作方式
  • 掌握 macOS 上的安全限制

一、Seatbelt 概述

macOS 使用内置的 sandbox-exec 框架实现沙盒,这个框架也被称为 Seatbelt。它是 macOS 的核心安全机制之一,被许多应用使用。

Seatbelt 的工作原理:

  1. 定义沙盒配置文件(白名单)
  2. 应用启动时加载配置
  3. 内核强制执行限制
  4. 违规操作会被拒绝

二、白名单策略

Seatbelt 使用白名单方式,这意味着:

  • 默认禁止所有操作
  • 显式允许特定路径的读写
  • 显式允许特定系统调用

2.1 文件系统控制

(allow file-read-data (subpath "/Users/user/project"))
(allow file-write-data (subpath "/Users/user/project"))
(deny file-write-data (subpath "/Users/user/project/.git"))

2.2 网络控制

(deny network-outbound)
(allow network-outbound (remote ip "10.0.0.0/8"))

2.3 进程控制

(allow process-exec (subpath "/usr/bin"))
(deny process-exec (subpath "/sbin"))

三、Codex 中的 Seatbelt

Codex 使用 Seatbelt 实现 workspace-write 策略:

  1. 只读路径:系统目录、其他用户目录
  2. 可写路径:用户工作目录
  3. 禁止路径:系统关键目录

3.1 READ_ONLY_SEATBELT_POLICY

Codex 内置了只读策略,用于 read-only 模式:

  • 允许读取所有文件
  • 禁止写入任何文件
  • 禁止网络调用

3.2 workspace-write 策略

工作区可写策略:

  • 允许读取项目目录
  • 允许写入工作目录
  • 禁止访问其他目录

四、限制效果

在 workspace-write 模式下:

  • 只能读取项目目录内的文件
  • 只能写入工作区目录
  • 禁止网络调用(除非明确允许)
  • 禁止访问其他应用数据
  • 禁止修改系统配置

五、调试沙盒问题

如果遇到沙盒限制导致的问题:

  1. 使用 codex doctor 检查沙盒状态
  2. 使用 --add-dir 授权额外目录
  3. 检查沙盒日志

六、本课小结

要点说明
SeatbeltmacOS 内置沙盒框架
白名单默认禁止,显式允许
文件控制控制读写路径
网络控制控制网络访问

下一步

下一课我们将了解 Linux 沙盒实现。