MacOS High Sierra KEXT 加载 - 有什么方法可以取消用户批准吗?

MacOS High Sierra KEXT Loading - Are there any ways to cancel user approval?

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

用户可以通过点击Security and Privacy中的Approve按钮来批准第三方KEXT。 但是,KEXT一旦通过审核,有什么方法可以取消审核?

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

如果除了全新安装别无他法,则很难测试应用程序。

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

/var/db/SystemPolicyConfiguration/KextPolicy

您感兴趣的 table 是:kext_policykext_load_history_v3。例如。以下是查看数据和 table 模式的方法:

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 

为了回应人们在评论中所说的话,我发现公认的解决方案不起作用。我还必须重置 PRAM。

工作步骤:

  1. 在文件系统的某处创建以下脚本(您将从恢复模式 运行 宁此,因此您将无法在该模式下复制和粘贴)。您需要将 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";'
  1. 重新启动进入 recovery mode(使用 Cmd-R 启动)

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

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