核心是优先采用无需关闭sip的system extension(.sysx)或driverkit方案;若必须用传统kext,则需临时禁用sip:进恢复模式执行csrutil disable→重启安装→验证后立即csrutil enable。

macOS 的 SIP(系统完整性保护)会直接拦截第三方底层驱动的安装和加载,尤其针对需要写入 /System/Library/Extensions、挂钩内核或访问硬件控制器的驱动。这不是权限不足的问题,而是内核级硬性拦截——即使你用 sudo 或拥有管理员密码,也会收到 Operation not permitted 或 Kext rejected: not loadable 这类错误。
哪些驱动最容易被 SIP 拦住
不是所有驱动都会触发 SIP 阻断,关键看它是否触碰受保护区域或机制:
- 需安装 kext 到
/System/Library/Extensions的传统驱动(如老款 USB 网卡、串口转接器、DisplayLink 显卡扩展坞) - 依赖直接操作 XHC/USB 控制器寄存器的抓包或调试工具(如定制版 Wireshark USB 监控模块)
- 企业级网络客户端(如 iNode Client),因要注入网络栈深层逻辑而需内核扩展支持
- 未通过 Apple 公证(Notarization)且签名不完整的老版本驱动安装包
SIP 拦截时的典型表现
系统不会弹出明确提示,而是静默失败或给出模糊报错:
- 运行
kextload /path/to/xxx.kext报错:Operation not permitted或invalid signature - “系统设置 > 隐私与安全性”里出现“已阻止加载未认证的内核扩展”,但点击“允许”无反应
- 控制台(Console.app)中搜索
kernel或驱动名,看到Kext rejected: not signed by Apple或code signing blocked -
kextstat | grep -i 关键词完全无输出,说明根本没加载成功
真正有效的应对方式
绕过 SIP 不是目的,安全可控地完成驱动部署才是重点:
- 优先查官网是否提供 System Extension(.sysx)或 DriverKit 版本——这类新架构无需关闭 SIP,macOS Catalina 起官方推荐,Ventura 及以后基本是唯一合规路径
- 确认驱动已完成公证(Notarization)并使用有效的 Apple Developer ID 签名;未公证的 kext 在 macOS 10.15+ 默认拒载
- 若必须用传统 kext(如某些工业设备、旧硬件),则按标准流程临时关闭 SIP:进恢复模式 → 终端执行
csrutil disable→ 重启安装 → 功能验证后立即csrutil enable - Apple Silicon Mac(M1/M2/M3)上,传统 kext 已被完全禁用,
boot-args="kext-dev-mode=1"不再有效,必须转向 DriverKit 或厂商更新方案
别踩的坑
有些方法看似能“解决”,实则无效、危险或已被系统淘汰:
-
sudo chmod或chown对/System下目录无效——SIP 在内核层拦截,绕过一切文件权限检查 - 仅在“隐私与安全性”里点“仍要打开”不能解决 kext 加载问题,该机制只对普通 App 生效
-
--without fs等细粒度关闭选项在 macOS 13+ 支持极差,且仍无法加载未签名 kext,不建议使用 - 长期保持 SIP 关闭状态,会导致系统更新失败、部分功能异常(如 FaceTime、iCloud 钥匙串),也违反 Apple 支持政策











