sip不支持用户自定义策略,其保护规则由苹果硬编码于内核,仅可通过csrutil开关或审计模式调整,rootless.conf不可编辑,细粒度例外仅限苹果签名组件。

SIP 的文件属性锁定不是靠传统权限(如 chmod 或 chown)实现的,它依赖内核在加载时强制校验扩展属性与配置策略,普通用户甚至 root 都无法绕过。
com.apple.rootless 扩展属性是关键标记
系统在启动早期就为受保护路径下的文件、目录打上 com.apple.rootless 扩展属性。这个属性本身不可被用户删除或修改——即使你用 xattr -d com.apple.rootless /usr/bin/ls,系统也会在下次访问时自动恢复。它不提供“可读/可写”开关,而是一个内核级信号:只要存在,就触发 SIP 的拦截逻辑。
rootless.conf 定义保护范围和例外规则
/System/Library/Security/rootless.conf 是 SIP 的策略配置文件,由苹果随系统更新签名并固化。它明确列出哪些路径必须受保护(如 /System、/usr/bin),也声明哪些子路径可豁免(例如 /usr/local 始终不在其中)。该文件被内核直接加载,任何外部修改都会导致校验失败,SIP 自动拒绝后续所有相关操作。
每次访问都实时校验,不只是“开机锁定”
- 不是一次性设置后就静态生效,而是每次 open()、write()、exec()、dlopen() 等系统调用发生时,内核都会检查目标路径是否带 com.apple.rootless 属性,再比对 rootless.conf 规则
- 进程注入(如 lldb attach)、内核模块加载(kext)同样被拦截,因为 SIP 还校验代码签名与 entitlements,未获 Apple 显式授权的二进制无法进入受保护进程空间
- 符号链接目标也被追踪:/etc 实际指向 /private/etc,而后者在 rootless.conf 中被列为保护路径,所以改 /etc 下的文件等同于改 /private/etc
为什么 sudo 或 root 也无效
因为 SIP 是强制访问控制(MAC)机制,运行在内核 ring 0 层,早于用户态权限模型初始化。root 权限属于 POSIX 用户权限体系,而 SIP 策略由内核直接执行,两者不重叠也不兼容——就像给门加了生物锁,钥匙再大也打不开。











