SIP是macOS内核级强制访问控制机制,启动早期加载,通过com.apple.rootless属性和rootless.conf实时校验,禁用需在恢复模式执行csrutil命令。

系统完整性保护(SIP)不是权限开关,而是 macOS 内核在启动早期就加载的一套强制访问控制机制。它不看你是谁、有没有输入密码,也不受 root 权限影响——哪怕你用 sudo 甚至切换到 root 用户,对 /System、/usr/bin 等路径的写入仍会直接被内核拦截,并返回 “Operation not permitted”。
内核级限制如何生效
SIP 的限制由内核实时执行,依赖两个底层支撑:
-
扩展属性:关键文件和目录被标记
com.apple.rootless属性,每次 open、write、rename 或 mmap 操作前,内核都会检查该属性是否允许当前上下文执行该动作 - 策略配置:/System/Library/Security/rootless.conf 定义了受保护路径列表及例外规则(如 /usr/local 被显式排除),内核在启动时加载并固化为运行时策略
哪些操作会被内核直接拒绝
以下行为在 SIP 启用时,无论权限多高,均被内核层面阻断:
- 向 /bin/ls、/sbin/ifconfig 等系统二进制文件写入或替换
- 向 /System/Library/Extensions 加载未签名的内核扩展(kext)
- 用 lldb 或 dtrace 附加到 Dock、Finder、WindowServer 等系统进程
- 修改 /private/etc/hosts 文件(实际是 /etc 的符号链接,其目标路径受保护)
- 挂载覆盖 /System 或 /usr 的文件系统(如 bind mount)
为什么 /usr/local 不受影响
/usr/local 是 SIP 策略中明确豁免的路径,原因在于它的设计定位:它是用户和第三方工具(如 Homebrew、MacPorts)安装非系统级软件的“安全缓冲区”。SIP 允许该路径下所有子目录读写,但不会延伸保护其中的内容——也就是说,你可以自由安装 Python 或 Node.js,但若某个工具试图用它们去覆写 /usr/bin/python3,内核仍会拦截。
Apple Silicon 上的额外约束
M1/M2/M3 Mac 不仅启用 SIP,还叠加了基于硬件的启动安全性策略:
- 即使在恢复模式中执行
csrutil disable,根卷(/)默认仍为只读,需额外执行csrutil authenticated-root disable - 内核扩展加载还受 Apple Mobile File Integrity(AMFI)校验,未签名 kext 在 SIP 关闭后仍可能被 AMFI 拒绝
- NVRAM 中的 SIP 状态与 Secure Boot 级别联动,无法通过普通终端命令绕过


















