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_policy
和 kext_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。
工作步骤:
在文件系统的某处创建以下脚本(您将从恢复模式 运行 宁此,因此您将无法在该模式下复制和粘贴)。您需要将 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";'
重新启动进入 recovery mode(使用 Cmd-R 启动)
打开终端,然后运行上面的脚本(/Volumes/Macintosh\ HD/Users/me/revoke_kext_consent.sh
)。
重新启动并reset the PRAM(使用 Cmd-Opt-P-R 启动)
正如某些 MacOS 开发人员所知,Apple 实施了 Secure Kernel Extension Loading .
用户可以通过点击Security and Privacy
中的Approve
按钮来批准第三方KEXT。
但是,KEXT一旦通过审核,有什么方法可以取消审核?
想象一下,使用KEXT加载等测试应用程序的情况
如果除了全新安装别无他法,则很难测试应用程序。
有关批准的信息存储在 sqlite3
数据库中:
/var/db/SystemPolicyConfiguration/KextPolicy
您感兴趣的 table 是:kext_policy
和 kext_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。
工作步骤:
在文件系统的某处创建以下脚本(您将从恢复模式 运行 宁此,因此您将无法在该模式下复制和粘贴)。您需要将
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";'
重新启动进入 recovery mode(使用 Cmd-R 启动)
打开终端,然后运行上面的脚本(
/Volumes/Macintosh\ HD/Users/me/revoke_kext_consent.sh
)。重新启动并reset the PRAM(使用 Cmd-Opt-P-R 启动)