用途:为 macOS 应用生成最小权限、基于允许列表的 Seatbelt 沙盒配置,用于沙盒化、隔离或限制 macOS 应用。
适用场景:需限制文件/网络访问的 macOS 进程;考虑供应链攻击时做纵深防御隔离。不适用:Linux 容器(改用 seccomp-bpf、AppArmor 或命名空间)、Windows 应用、确实需要广泛系统访问的应用、不值得承担沙盒开销的临时脚本。
方法:先按文件读、文件写、网络、进程、Mach IPC、POSIX IPC、sysctl、IOKit、信号、伪终端、系统调用、用户偏好、通知、AppleEvents、摄像头/麦克风、动态代码、NVRAM 等类别确认应用需求与具体范围;对子命令操作差异较大的应用(如打包器的 build 与 serve)分别建立配置,并可用辅助脚本按子命令调用对应 profile。配置以 (deny default) 起步,先允许 process-exec*、process-fork、sysctl-read 与 file-read-metadata,再用 file-read-data 列白名单路径,写入仅限工作目录、临时目录与 /dev/null、/dev/tty 等,网络可选完全阻断、仅本机或全放开。
用法:文件保存为 .sb,使用 sandbox-exec 执行,例如 sandbox-exec -f profile.sb -D WORKING_DIR=/path -D HOME=$HOME /path/to/application;测试时可先用 /bin/echo 验证,再运行目标程序,并用读取 ~/.ssh/id_rsa 等方式验证限制是否生效,失败则迭代修改。
限制:Apple 已弃用 sandbox-exec,但到 macOS 14+ 仍可用;许多应用需要 /tmp 与 /var/folders 访问;常见失败包括沙盒违规导致的退出码 134、语法错误退出码 65、缺少 file-read-metadata 时的 ENOENT、缺少 IPC 权限导致的挂起等。