在mac上测试用户批准内核扩展加载(TN2459)

时间:2018-04-25 19:33:14

标签: macos-high-sierra kernel-extension

TN2459:https://developer.apple.com/library/content/technotes/tn2459/_index.html介绍在macOS下,需要高额用户批准才能加载新的第三方内核扩展。

我要测试的kext已经升级到High Sierra之前加载,因此升级后加载相同的kext不会触发我想要测试的用户批准流程。< / p>

启用了内核扩展用户同意:

$ spctl kext-consent status
Kernel Extension User Consent: ENABLED 

我在恢复模式下删除了与 / private / var / db / SystemPolicyConfiguration / KextPolicy kext_policy 表中的kext对应的条目,并重启了几次。但是当我加载kext时,仍然没有触发用户批准流程。

我想知道政策信息是否在其他地方缓存,如果我需要为我的机器清除NVRAM或告诉syspolicyd清除其缓存?或者还有其他事情我需要做什么?

2 个答案:

答案 0 :(得分:1)

简而言之,您必须以恢复模式(Mac+R)启动并编辑sqlite表/private/var/db/SystemPolicyConfiguration/KextPolicy

在正常引导下,该表可通过只读模式访问:

sqlite3 /private/var/db/SystemPolicyConfiguration/KextPolicy
sqlite> SELECT * FROM kext_policy;
sqlite> SELECT * FROM kext_load_history_v3;

您必须删除条目(恢复模式)并重新启动,就像这样(用team_id替换'G43BCU2T37'):

sqlite> DELETE FROM kext_policy WHERE team_id = 'G43BCU2T37';
sqlite> DELETE FROM kext_load_history_v3 WHERE team_id = 'G43BCU2T37';
sqlite> .exit

为避免每次都重新引导,可以更改“系统完整性保护”配置(在恢复模式下):csrutil enable --without fs --no-internal。现在kext_policy可以从正常引导更改。

此处描述了整个过程:https://forums.developer.apple.com/thread/79172#248518

答案 1 :(得分:0)

能够使用高sierra vm进行测试。安装vm的完整步骤是:https://www.howtogeek.com/289594/how-to-install-macos-sierra-in-virtualbox-on-windows-10/