
macOS 中的系统扩展
运行 macOS 10.15 或更高版本的 Mac 允许开发者通过安装和管理在用户空间而非内核层面运行的系统扩展来扩展 macOS 的功能。让系统扩展在用户空间运行提高了 macOS 的稳定性和安全性。尽管 Kext 本身可完全访问整个操作系统,但运行在用户空间的扩展只拥有执行其特定功能所需的许可。
系统扩展支持使用设备管理服务的强力管理,包括允许来自特定开发者或特定类型(如网络扩展)的所有扩展无需用户交互即可载入的能力。设备管理服务可选择不允许用户将其系统扩展批准载入。
对于运行 macOS 12.0.1 或更高版本的 Mac,“系统扩展”有效负载中的词典(称为 RemovableSystemExtensions
)允许设备管理服务管理员指定哪些 App 可以移除其自己的系统扩展。移除该类系统扩展无需本地管理员认证。此功能对于可能提供 App 自动卸载器的供应商特别有用。
对于运行 macOS 11.3 至 macOS 11.6.4 的 Mac,更改系统扩展描述文件会直接影响扩展的状态。例如,如果扩展正在等待批准且推送了允许扩展的配置描述文件,则允许载入扩展。相反,如果批准被撤销,则系统扩展会被卸载,且会被标记以在 Mac 下次重新启动时移除。如果系统扩展尝试自行卸载,会出现一个互动认证对话框要求管理员凭证来授权卸载。
内核扩展
对于运行 macOS 11 或更高版本的 Mac,如果启用了第三方内核扩展 (Kext),就不能按需将其载入内核中。第三方内核扩展需要用户批准、重新启动 macOS 以将更改载入内核,还需要在搭载 Apple 芯片的 Mac 上将安全启动配置为“降低安全性”。
开发者可以使用各种框架(如 DriverKit 和 NetworkExtension)来写入 USB 和人机界面驱动程序、端点安全工具(如数据丢失预防或其他端点代理)以及 VPN 和网络工具,这一切都不需要编写 Kext。只有当第三方安全代理使用了这些 API 或者拥有过渡到这些 API 并不再使用内核扩展的清晰路线图,才应当使用这些第三方安全代理。
【重要事项】macOS 中不再推荐使用 Kext。Kext 会威胁到操作系统的完整性和可靠性。用户应当首选不需要扩展内核而是使用系统扩展的解决方案。
在运行 macOS 11 或更高版本且基于 Intel 或搭载 Apple 芯片的 Mac 上添加 Kext
如果需要使用内核扩展,请根据注册方式检查批准方法。
注册方式 | 批准方法 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
未注册 用户注册 | 安装了新 Kext 并尝试载入之前,用户需要从以下位置中的警告对话框发起重新启动:
此重新启动操作会在内核启动之前重建 AuxKC。 | ||||||||||
设备注册 自动设备注册 | 每次安装了新 Kext 并尝试载入它之前,都需要通过以下任一方式进行重新启动:
【注】设备管理服务首先需要安装指定 Kext 的 Kext 允许列表描述文件。运行 macOS 11.3 或更高版本的 Mac 可选择允许该服务通知用户在方便时完成重新启动。 |
在搭载 Apple 芯片的 Mac 上添加 Kext 的额外步骤
如果要在搭载 Apple 芯片的 Mac 上添加内核扩展,则需要执行额外步骤。
注册方式 | 批准方法 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
未注册 | 用户管理 Kext 需要重新启动进入 recoveryOS 以降级安全性设置。用户需要按住电源按钮以重新启动进入 recoveryOS 并以管理员身份认证。只有通过按住电源按钮进入 recoveryOS 才能使安全隔区接受策略更改。然后用户需要选择“降低安全性”复选框和“允许用户管理来自被认可开发者的内核扩展”选项,并重新启动 Mac。 | ||||||||||
用户注册 | 用户需要重新启动进入 recoveryOS 以降级安全性设置。用户需要按住电源按钮以重新启动进入 recoveryOS 并以本地管理员身份认证。只有通过按住电源按钮进入 recoveryOS 才能使安全隔区接受策略更改。然后用户需要选择“降低安全性”,勾选“允许用户管理来自被认可开发者的内核扩展”,并重新启动 Mac。 | ||||||||||
设备注册 | 设备管理服务需要通知用户重新启动进入 recoveryOS 以降级安全性设置。用户需要按住电源按钮以重新启动进入 recoveryOS 并以管理员身份认证。只有通过按住电源按钮才能使安全隔区接受策略更改。然后用户需要选择“降低安全性”,选择“允许远程管理内核扩展和软件自动更新”,并重新启动 Mac。 若要了解你的设备是否支持此功能,请参阅开发者的设备管理服务文稿。 | ||||||||||
自动设备注册 (Mac 序列号需要显示在 Apple 校园教务管理或 Apple 商务管理中,且 Mac 需要在关联至 Apple 校园教务管理或 Apple 商务管理的设备管理服务中注册。) | 设备管理服务可自动管理此功能。 若要了解你的设备是否支持此功能,请参阅开发者的设备管理服务文稿。 |
内核扩展和系统完整性保护
如果系统完整性保护 (SIP) 已启用,在将每个 Kext 包括在 AuxKC 中前还会验证其签名。
如果 SIP 停用,则不会强制执行 Kext 签名。
此方法可让不是 Apple Developer Program 成员的开发者或用户在“宽松安全性”流程中测试 Kext,然后再为其签名。