第二十二课:macOS 沙盒:Seatbelt
sandbox-exec框架白名单策略实际限制效果
学习目标
- 了解 macOS Seatbelt 沙盒机制
- 理解白名单策略的工作方式
- 掌握 macOS 上的安全限制
一、Seatbelt 概述
macOS 使用内置的 sandbox-exec 框架实现沙盒,这个框架也被称为 Seatbelt。它是 macOS 的核心安全机制之一,被许多应用使用。
Seatbelt 的工作原理:
- 定义沙盒配置文件(白名单)
- 应用启动时加载配置
- 内核强制执行限制
- 违规操作会被拒绝
二、白名单策略
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 策略:
- 只读路径:系统目录、其他用户目录
- 可写路径:用户工作目录
- 禁止路径:系统关键目录
3.1 READ_ONLY_SEATBELT_POLICY
Codex 内置了只读策略,用于 read-only 模式:
- 允许读取所有文件
- 禁止写入任何文件
- 禁止网络调用
3.2 workspace-write 策略
工作区可写策略:
- 允许读取项目目录
- 允许写入工作目录
- 禁止访问其他目录
四、限制效果
在 workspace-write 模式下:
- 只能读取项目目录内的文件
- 只能写入工作区目录
- 禁止网络调用(除非明确允许)
- 禁止访问其他应用数据
- 禁止修改系统配置
五、调试沙盒问题
如果遇到沙盒限制导致的问题:
- 使用 codex doctor 检查沙盒状态
- 使用 --add-dir 授权额外目录
- 检查沙盒日志
六、本课小结
| 要点 | 说明 |
|---|---|
| Seatbelt | macOS 内置沙盒框架 |
| 白名单 | 默认禁止,显式允许 |
| 文件控制 | 控制读写路径 |
| 网络控制 | 控制网络访问 |
下一步
下一课我们将了解 Linux 沙盒实现。