正如某些MacOS开发人员所知,Apple实施了 Secure Kernel Extension Loading 。
用户可以点击Approve
中的Security and Privacy
按钮批准第三方KEXT。
但是,一旦KEXT获得批准,是否有任何取消批准的方法?
想象一下,使用KEXT加载等测试应用程序的情况
如果除了干净安装之外别无选择,那么测试应用程序非常困难。
答案 0 :(得分:8)
有关批准的信息存储在sqlite3
数据库中:
/var/db/SystemPolicyConfiguration/KextPolicy
您感兴趣的表是:kext_policy
和kext_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。
工作步骤:
在文件系统上的某个位置创建以下脚本(您将在恢复模式下运行此脚本,因此将无法在该模式下复制和粘贴)。您需要将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";'
重新引导到recovery mode(使用Cmd-R引导)
打开终端,然后运行上面的脚本(/Volumes/Macintosh\ HD/Users/me/revoke_kext_consent.sh
)。
重新启动并reset the PRAM(使用Cmd-Opt-P-R引导)