MacOS High Sierra KEXT Loading - 有没有办法取消用户批准?

时间:2017-12-14 09:41:10

标签: macos macos-high-sierra kernel-extension

正如某些MacOS开发人员所知,Apple实施了 Secure Kernel Extension Loading

用户可以点击Approve中的Security and Privacy按钮批准第三方KEXT。 但是,一旦KEXT获得批准,是否有任何取消批准的方法?

想象一下,使用KEXT加载等测试应用程序的情况

如果除了干净安装之外别无选择,那么测试应用程序非常困难。

2 个答案:

答案 0 :(得分:8)

有关批准的信息存储在sqlite3数据库中:

/var/db/SystemPolicyConfiguration/KextPolicy

您感兴趣的表是:kext_policykext_load_history_v3。例如。这是您如何查看数据和表模式的方法:

sqlite3 /var/db/SystemPolicyConfiguration/KextPolicy

sqlite> select * from kext_policy;
54GTJ2AU36|com.joshuawise.kexts.HoRNDIS|1|Joshua Wise|1

sqlite> .schema kext_policy
CREATE TABLE kext_policy ( team_id TEXT, bundle_id TEXT, allowed BOOLEAN, developer_name TEXT, flags INTEGER, PRIMARY KEY (team_id, bundle_id) );

取消批准比较麻烦,因为系统完整性保护不允许您修改数据库。因此,您需要重新引导到恢复分区或其他MacOS安装中,然后使用cd进入卷的根目录,并运行以下命令(用team_id替换,或使用其他条件):

usr/bin/sqlite3 var/db/SystemPolicyConfiguration/KextPolicy
delete from kext_load_history_v3 where team_id='54GTJ2AU36';
delete from kext_policy where team_id='54GTJ2AU36';
.quit 

答案 1 :(得分:1)

要回应人们在评论中所说的话,我发现公认的解决方案无效。我还必须重置PRAM。

工作步骤:

  1. 在文件系统上的某个位置创建以下脚本(您将在恢复模式下运行此脚本,因此将无法在该模式下复制和粘贴)。您需要将TEAMID1234替换为您要撤回同意的kext的团队ID。请注意,在恢复模式下,需要/Volumes/Macintosh\ HD的完整路径。

    我调用了脚本/Users/me/revoke_kext_consent.sh,然后运行了 chmod +x /Users/me/revoke_kext_consent.sh

#!/bin/sh -e
/Volumes/Macintosh\ HD/usr/bin/sqlite3 /Volumes/Macintosh\ HD/var/db/SystemPolicyConfiguration/KextPolicy 'delete from kext_policy where team_id="TEAMID1234";'
/Volumes/Macintosh\ HD/usr/bin/sqlite3 /Volumes/Macintosh\ HD/var/db/SystemPolicyConfiguration/KextPolicy 'delete from kext_policy_history_v3 where team_id="TEAMID1234";'
  1. 重新引导到recovery mode(使用Cmd-R引导)

  2. 打开终端,然后运行上面的脚本(/Volumes/Macintosh\ HD/Users/me/revoke_kext_consent.sh)。

  3. 重新启动并reset the PRAM(使用Cmd-Opt-P-R引导)