正如某些MacOS开发人员所知,苹果实施了安全内核扩展加载。
用户可以通过单击“安全性与隐私”中的“批准”按钮来批准第三方KEXT。但是,一旦批准了KEXT,是否有任何取消批准的方法?
想象一下,测试具有KEXT加载等功能的应用程序的情况。
如果没有其他方法而只能进行干净安装,则很难测试应用程序。
正如某些MacOS开发人员所知,苹果实施了安全内核扩展加载。
用户可以通过单击“安全性与隐私”中的“批准”按钮来批准第三方KEXT。但是,一旦批准了KEXT,是否有任何取消批准的方法?
想象一下,测试具有KEXT加载等功能的应用程序的情况。
如果没有其他方法而只能进行干净安装,则很难测试应用程序。
批准相关信息存储在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安装,然后进入卷的根目录,并运行这些命令(用您的团队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
select * from kext_policy
查询显示的列的列表(这些列不会与查询一起输出)?谢谢! - Daniel Griscom回应评论中的观点,我发现被接受的解决方案并没有起作用。我还需要重置PRAM。
操作步骤:
在文件系统的某个位置创建以下脚本(您将从恢复模式运行此脚本,因此无法在该模式下复制和粘贴)。您需要将TEAMID1234
替换为要撤销同意的kext(s)的团队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_load_history_v3 where team_id="TEAMID1234";'