SIP会直接阻止未经苹果签名或未公证的底层驱动加载,因其严格限制/System/Library/Extensions写入、拦截未公证kext签名验证及运行时注入,并在Apple Silicon上彻底弃用kext、强制迁移至DriverKit与System Extension。

macOS 的 SIP(系统完整性保护)会直接阻止未经苹果签名或未通过公证的底层驱动加载,尤其影响 USB-C 扩展坞、专业音频设备、工业串口卡、NVIDIA 显卡等需要内核扩展(kext)或系统级访问的硬件驱动。
为什么驱动安装常被 SIP 拦截
SIP 的核心目标是保护系统关键路径和内核空间。它特别限制以下几类操作:
- /System/Library/Extensions 目录写入:传统 kext 默认安装至此,但 SIP 禁止任何未签名代码写入该路径
- 内核扩展签名验证失败:即使驱动用 Developer ID 签名,若未完成 Apple 公证(Notarization),SIP 仍拒绝加载
-
运行时注入受限:使用
kextutil -l或调试方式动态加载 kext 会被拦截,提示 “Operation not permitted” 或 “invalid signature” - systemextensionsd 框架误用:部分旧安装器仍走 kext 路径,而 macOS Catalina 及之后更倾向使用 .sysx 格式的 System Extension,后者无需关闭 SIP
常见报错与对应现象
遇到以下情况,大概率是 SIP 在起作用:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 终端执行
kextload /path/to/xxx.kext返回 “Kext rejected: not loadable” - 系统设置 → 隐私与安全性 → 出现“已阻止加载未认证的内核扩展”,但点击“允许”无反应
- Console.app 中筛选 kernel 或 kextd 日志,看到 “signature verification failed” 或 “blocked by SIP”
- 驱动安装器运行后设备无响应,且未在“系统报告”→“软件”→“扩展”中列出对应 kext
安全应对策略(非必须关 SIP)
关闭 SIP 是可行方案,但不是唯一解。优先尝试更安全的替代路径:
- 确认是否真需 kext:查阅硬件厂商文档,看是否提供 macOS 11+ 兼容的 System Extension(.sysx) 版本,这类组件在用户空间运行,受沙盒约束但无需禁用 SIP
-
检查公证状态:用命令
xattr -l /path/to/Installer.app查看是否有com.apple.quarantine;再用spctl -a -v /path/to/xxx.kext验证签名与公证是否完整 -
临时关闭 SIP(仅开发/可信环境):必须进恢复模式,运行
csrutil disable→ 重启安装 → 功能验证后立即csrutil enable - 避免长期关闭:SIP 是 macOS 抵御 rootkit 和持久化恶意驱动的第一道防线,日常使用中保持启用是基本安全要求
Apple Silicon(M1/M2/M3)特别注意
Apple Silicon Mac 对驱动管控更严格:
- 不再支持传统 kext,macOS 13 Ventura 起已完全弃用 kext 加载机制
- 所有新驱动必须迁移到 DriverKit 框架,以用户态进程形式运行,配合 System Extension 分发
- 即便使用 DriverKit,安装包仍需通过 Apple 公证,否则 Gatekeeper + SIP 联合拦截
- 恢复模式进入方式为长按电源键至“选项”界面,而非 Intel 时代的 Cmd+R










