SIP是内核级强制访问控制机制,启动早期即介入,通过com.apple.rootless属性和rootless.conf文件实施保护,硬编码划定/System等不可变路径,绕过root权限,协同KIP实现纵深防御。

SIP 不是靠用户权限或密码控制的“开关”,而是从内核启动早期就介入的强制访问控制机制。它不看你是普通用户还是 root,只要操作触及受保护对象,内核就会直接拦截并返回 Operation not permitted。
内核级策略加载与实时校验
SIP 策略在内核初始化阶段即载入,通过两个核心载体持续生效:
- 扩展属性 com.apple.rootless:标记单个文件或目录为受保护对象,内核每次 open、write、chmod 等系统调用时都会检查该属性
- /System/Library/Security/rootless.conf:定义路径白名单(如 /usr/local)和全局保护规则,支持动态更新但需重启生效
保护边界由内核硬编码逻辑划定
哪些路径被锁、哪些被放行,并非靠配置文件“列举”,而是由内核中固化逻辑决定:
- /System、/bin、/sbin、/usr(不含 /usr/local)等路径被内核视为“不可变基座”,任何写入尝试均被拒绝
- /etc、/tmp、/var 是符号链接,实际指向 /private/etc 等路径——这些目标路径同样被内核识别并纳入保护范围
- 预装 Apple 应用(如 Finder、Safari)的二进制与资源被签名绑定,运行时校验失败则无法加载
绕过 root 权限的底层设计
传统 Unix 中 root 拥有全部权限,而 SIP 彻底重构了这一模型:
- 即使执行
sudo rm -rf /System/Library/Extensions,内核也会在 VFS 层拦截,不进入文件系统驱动 - 进程注入(如 lldb attach)、DTrace 跟踪、dylib 劫持等运行时操作,均由内核 hook 统一过滤
- 内核扩展(kext)加载必须通过 IOKit 验证签名,未签名或签名失效的模块在加载阶段即被拒
与硬件级保护协同工作
SIP 是软件层强制访问控制,与 Apple 芯片上的硬件特性互补:
- 搭载 Apple 芯片的 Mac 同时启用 内核完整性保护(KIP),防止内存中内核代码被篡改
- SIP 负责静态文件系统保护,KIP 负责动态运行时保护,两者叠加形成纵深防御
- 恢复模式下的 csrutil 命令会同时修改 NVRAM 参数与固件策略寄存器,确保重启后策略仍生效


















