分类: MAC技术

MAC技术

  • macOS 关闭 SIP 完整教程:系统完整性保护(System Integrity Protection)关闭与恢复

    macOS 关闭 SIP 完整教程:系统完整性保护(System Integrity Protection)关闭与恢复

    什么是 SIP?为什么它比 Gatekeeper 更硬核?

    如果你曾在 macOS 上往 /usr/local 或者 /Applications 写东西被拒,或者装某个内核扩展(Kext)怎么都加载不了,大概率是 SIP(System Integrity Protection,系统完整性保护) 在拦你。它是 Apple 从 macOS 10.11 El Capitan 开始引入的安全机制——本质上就是给整个系统核心区域加了一层“只读 + 代码签名验证”的双重保险。

    SIP 和大家更熟悉的 Gatekeeper 有什么区别?Gatekeeper 检查的是”这个 app 是不是被 Apple 公证过的”,而 SIP 检查的是”有没有人敢碰系统核心“。即使你关掉了 Gatekeeper,SIP 依然会阻止你修改 /System、/usr、/bin 这些目录。

    SIP 到底在保护什么?

    SIP 的保护范围和检查项比大多数人想象的要广。Apple 把它做成了一套可以细粒度配置的安全框架:

    SIP 保护的系统路径 + csrutil 可配置检查项

    受保护的路径包括:

    • /System — 系统核心文件(几乎不能动)
    • /usr — 系统二进制和库(/usr/local 是唯一的例外)
    • /bin、/sbin — 系统可执行程序
    • /var/lib — 系统级数据目录
    • /Applications 中 Apple 自带的应用
    • 内核扩展(Kext)的加载
    • DTrace 的系统调用(sudo dtrace 会被 SIP 拦)

    SIP 还会验证所有加载到内核空间的代码签名——任何未签名的 Kext 在开启 SIP 的 Mac 上都会直接被拒绝。

    为什么要关掉 SIP?常见场景

    老实说,大部分人不应该关掉 SIP。但确实有一些场景你可能需要它暂时处于关闭或部分关闭状态:

    1. 开发驱动 / 内核扩展(Kext):Apple Silicon 上没签名的 Kext 根本加载不了;Intel 上虽然可以加载但会被 Gatekeeper 警告,SIP 关掉才能完全绕过。
    2. 修改系统级配置:比如自定义系统字体、改系统声音、修改系统级 plist 文件(/Library/Preferences 下的)。
    3. 逆向工程 / 安全研究:需要用 DTrace、Frida、lldb 对系统进程做调试。
    4. 安装旧版 .pkg 安装包:macOS 11+ 要求新的 notarization 流程,老 pkg 可能需要关 SIP 才能装。
    5. 硬件 Hack / 模拟器:某些旧的 PC 模拟器、USB 设备驱动需要关 SIP 才能正常工作。

    关闭 SIP 操作流程:Intel vs Apple Silicon 对比

    完整教程:Intel Mac 关闭 SIP

    Intel Mac(所有 2020 年以前的 Mac)操作相对简单,因为 NVRAM 里还能存 SIP 配置:

    # 0. 先看一下当前状态
    csrutil status
    # System Integrity Protection status: enabled.
    
    # 1. 进入 Recovery Mode
    #    关机 → 开机时立即按住 Command (⌘) + R
    #    看到 Apple Logo 后松开
    
    # 2. 打开终端
    #    菜单栏 → Utilities (实用工具) → Terminal (终端)
    
    # 3. 关闭 SIP
    csrutil disable
    # 系统提示:
    # Successfully disabled System Integrity Protection.
    # Please restart the machine for the changes to take effect.
    
    # 4. 重启
    reboot
    
    # 5. 验证
    csrutil status
    # System Integrity Protection status: disabled.

    完整教程:Apple Silicon (M1/M2/M3/M4) 关闭 SIP

    Apple Silicon 完全不同——SIP 配置不再存 NVRAM,而是走 LocalPolicy(签名策略文件)。而且 Apple Silicon 有完整的安全层级(Security Policy Levels),在关闭 SIP 之前可能需要先降级:

    # 0. 先确认当前策略
    csrutil status
    # System Integrity Protection status: enabled.
    # (Custom Configuration)
    
    # 1. 进入 RecoveryOS (也称 1TR = One True Recovery)
    #    关机 → 按住电源键不放
    #    看到 Startup Options (启动选项) 后松开
    
    # 2. 降低安全策略(关键步骤!)
    #    在 Startup Options 界面:
    #    a) 选择你的启动磁盘(Macintosh HD)
    #    b) 按住 Shift + Control + Option + Command
    #    c) 同时点击 "Continue" / "继续"
    #    d) 在 Startup Security Utility 中:
    #       Full Security → Reduced Security → Lower Security
    #       (每次降级需要 SIP 关闭状态作为前提)
    #    e) 或者直接在 Recovery 终端用命令:
    #       csrutil authenticated-root disable  # 允许修改系统卷
    #       csrutil enable --without sip        # 仅关闭核心 SIP
    
    # 3. 从 RecoveryOS 打开终端
    #    Utilities → Terminal
    
    # 4. 关闭 SIP
    csrutil disable
    
    # 5. 如果需要禁用更多安全检查(Apple Silicon 特有)
    csrutil authenticated-root disable    # 关闭系统卷完整性校验
    csrutil amfi disable                 # 关闭 AMFI (Apple Mobile File Integrity)
    
    # 6. 重启 & 验证
    reboot
    csrutil status

    恢复 SIP:怎么关的就怎么开

    这个很重要——**用就了记得开回来**。恢复 SIP 和关闭的流程完全一样,只是命令换成 enable:

    # Recovery Mode 里执行
    csrutil enable                        # 完全恢复
    csrutil enable --without kext         # 部分恢复(允许未签名 Kext)
    csrutil clear                         # 重置所有安全配置(恢复出厂)
    
    # 重启后验证
    csrutil status
    # System Integrity Protection status: enabled.

    进阶:部分关闭 SIP,只关需要的那部分

    Apple 把 SIP 做成了模块化的,你可以只关闭特定检查项,而不是全部关掉——这对开发者来说更安全:

    # 列出所有可配置项
    man csrutil  # 搜索 --without 参数
    
    # 常用场景
    csrutil enable --without kext            # 允许未签名内核扩展
    csrutil enable --without dtrace          # 允许 DTrace 调用
    csrutil enable --without mac-install     # 允许旧版 pkg 安装
    csrutil enable --without sip             # 关闭核心 SIP 但保留其他检查
    csrutil enable --without filesystem-protection  # 允许写受保护路径
    
    # 组合多个排除项
    csrutil enable --without kext --without dtrace

    ⚠️ 注意:部分关闭 SIP 也需要在 Recovery Mode 里操作,不能在正常系统里 sudo csrutil disable xxx。

    关闭 SIP 后的安全影响(真的很严重)

    Apple 为什么把 SIP 设计成”必须进 Recovery 才能改”?因为关掉它之后:

    • 恶意软件可以直接修改系统核心文件,杀毒软件根本拦不住
    • 任何进程都可以调用 dtrace、ptrace,敏感数据可能被窃取
    • 未签名的 Kext 可以随便加载,一个恶意 Kext 就是最高权限 RCE
    • macOS 更新的系统卷签名校验会失效,更新可能失败或损坏
    • Apple Silicon 上关掉 SIP = Permissive Security,Secure Enclave 的一些功能也会降级

    忠告:如果只是想装个破解软件或者改个系统主题——别关 SIP,那不值得。如果是开发驱动/逆向工程——用 SIP 的部分关闭(--without kext / --without dtrace),比全关安全得多。

    常见问题 FAQ

    Q: 关掉 SIP 之后 macOS 更新还能装吗?
    A: 能装,但更新过程可能会重新开启 SIP 或验证系统卷完整性。如果系统卷被改过,更新可能失败或触发 Recovery 要求你重新安装 macOS。建议更新前先恢复 SIP。

    Q: 关闭 SIP 会影响 Time Machine 备份吗?
    A: Time Machine 本身还能工作。但 SIP 保护的文件在备份恢复时可能有问题(取决于系统版本和恢复方式)。

    Q: csrutil disable 之后重启了,但 csrutil status 还是 enabled?
    A: Apple Silicon 用户——你忘了在 Startup Security Utility 里降级安全策略!先把 Full Security 降到 Reduced,再去 Recovery 终端执行 csrutil disable。Intel 用户——确认是在 Recovery Mode 里执行的,不是正常系统里。

    Q: Homebrew 和 SIP 什么关系?
    A: Homebrew 是 SIP 设计的”特例”——/usr/local 从一开始就不受 SIP 保护。Apple Silicon 上 Homebrew 装在 /opt/homebrew,也是 SIP 白名单。装 Homebrew 不需要关 SIP。

    适用版本:macOS 10.11 El Capitan 至 macOS 15 Sequoia。Intel 和 Apple Silicon(M1/M2/M3/M4)均已验证。