在 mac 上测试用户批准内核扩展加载 (TN2459)
Test User Approval Kernel Extension Loading on mac (TN2459)
TN2459:https://developer.apple.com/library/content/technotes/tn2459/_index.html 介绍在 macOS High Sierra 下加载新的第三方内核扩展需要用户批准。
我想测试的 kext 已在升级到 High Sierra 之前加载,因此在升级后加载相同的 kext 不会触发我想要的用户批准流程进行测试。
内核扩展用户同意已启用:
$ spctl kext-consent status
Kernel Extension User Consent: ENABLED
我删除了kext_policytable中kext对应的条目/private/var/db/SystemPolicyConfiguration/KextPolicy 在恢复模式下重启几次。但是当我加载kext时仍然没有触发用户批准流程。
我想知道策略信息是否缓存在其他地方,我是否需要为我的机器清除 NVRAM 或告诉 syspolicyd 清除其缓存?或者还有其他事情需要我做?
能够使用高 sierra 虚拟机对其进行测试。安装虚拟机的完整步骤是:https://www.howtogeek.com/289594/how-to-install-macos-sierra-in-virtualbox-on-windows-10/
简而言之,您必须以恢复模式启动 (Mac+R
) 并编辑 sqlite table /private/var/db/SystemPolicyConfiguration/KextPolicy
。
这个 table 可以在正常启动时以只读模式访问:
sqlite3 /private/var/db/SystemPolicyConfiguration/KextPolicy
sqlite> SELECT * FROM kext_policy;
sqlite> SELECT * FROM kext_load_history_v3;
您必须删除您的条目(恢复模式)并重新启动,就像这样(将 'G43BCU2T37' 替换为您的 team_id):
sqlite> DELETE FROM kext_policy WHERE team_id = 'G43BCU2T37';
sqlite> DELETE FROM kext_load_history_v3 WHERE team_id = 'G43BCU2T37';
sqlite> .exit
为避免每次重启,您可以更改 "System Integrity Protection" 配置(在恢复模式下):csrutil enable --without fs --no-internal
。现在 kext_policy
可以从正常启动更改。
这里描述了整个过程:https://forums.developer.apple.com/thread/79172#248518。
TN2459:https://developer.apple.com/library/content/technotes/tn2459/_index.html 介绍在 macOS High Sierra 下加载新的第三方内核扩展需要用户批准。
我想测试的 kext 已在升级到 High Sierra 之前加载,因此在升级后加载相同的 kext 不会触发我想要的用户批准流程进行测试。
内核扩展用户同意已启用:
$ spctl kext-consent status
Kernel Extension User Consent: ENABLED
我删除了kext_policytable中kext对应的条目/private/var/db/SystemPolicyConfiguration/KextPolicy 在恢复模式下重启几次。但是当我加载kext时仍然没有触发用户批准流程。
我想知道策略信息是否缓存在其他地方,我是否需要为我的机器清除 NVRAM 或告诉 syspolicyd 清除其缓存?或者还有其他事情需要我做?
能够使用高 sierra 虚拟机对其进行测试。安装虚拟机的完整步骤是:https://www.howtogeek.com/289594/how-to-install-macos-sierra-in-virtualbox-on-windows-10/
简而言之,您必须以恢复模式启动 (Mac+R
) 并编辑 sqlite table /private/var/db/SystemPolicyConfiguration/KextPolicy
。
这个 table 可以在正常启动时以只读模式访问:
sqlite3 /private/var/db/SystemPolicyConfiguration/KextPolicy
sqlite> SELECT * FROM kext_policy;
sqlite> SELECT * FROM kext_load_history_v3;
您必须删除您的条目(恢复模式)并重新启动,就像这样(将 'G43BCU2T37' 替换为您的 team_id):
sqlite> DELETE FROM kext_policy WHERE team_id = 'G43BCU2T37';
sqlite> DELETE FROM kext_load_history_v3 WHERE team_id = 'G43BCU2T37';
sqlite> .exit
为避免每次重启,您可以更改 "System Integrity Protection" 配置(在恢复模式下):csrutil enable --without fs --no-internal
。现在 kext_policy
可以从正常启动更改。
这里描述了整个过程:https://forums.developer.apple.com/thread/79172#248518。