代码之家  ›  专栏  ›  技术社区  ›  yijiem

在mac上加载测试用户批准内核扩展(TN2459)

  •  1
  • yijiem  · 技术社区  · 6 年前

    TN2459: https://developer.apple.com/library/content/technotes/tn2459/_index.html 介绍了在macOS High Sierra下,加载新的第三方内核扩展需要用户批准。

    我要测试的kext已加载 之前 升级到High Sierra,因此升级后加载相同的kext不会触发我想要测试的用户审批流。

    已启用内核扩展用户同意:

    $ spctl kext-consent status
    Kernel Extension User Consent: ENABLED 
    

    我删除了中与kext对应的条目 kext\U政策 中的表格 /专用/var/db/SystemPolicyConfiguration/KextPolicy 在恢复模式下,重新启动数次。但当我加载kext时,仍然不会触发用户审批流。

    我想知道策略信息是否缓存在其他地方,是否需要清除计算机的NVRAM或告诉syspolicyd清除其缓存?或者我还需要做其他事情?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Liviu thudbang    6 年前

    简而言之,您必须在恢复模式下启动( Mac+R )并编辑sqlite表 /private/var/db/SystemPolicyConfiguration/KextPolicy

    此表在正常启动时以只读模式可访问:

    sqlite3 /private/var/db/SystemPolicyConfiguration/KextPolicy
    sqlite> SELECT * FROM kext_policy;
    sqlite> SELECT * FROM kext_load_history_v3;
    

    您必须删除条目(恢复模式)并重新启动,如下所示( 用团队id替换“G43BCU2T37” ):

    sqlite> DELETE FROM kext_policy WHERE team_id = 'G43BCU2T37';
    sqlite> DELETE FROM kext_load_history_v3 WHERE team_id = 'G43BCU2T37';
    sqlite> .exit
    

    为了避免每次重新启动,您可以更改“系统完整性保护”配置(在恢复模式下): csrutil enable --without fs --no-internal 现在 kext_policy 可从正常引导更改。

    整个过程如下所述: https://forums.developer.apple.com/thread/79172#248518

        2
  •  0
  •   yijiem    6 年前

    能够使用high sierra vm对其进行测试。安装vm的完整步骤是: https://www.howtogeek.com/289594/how-to-install-macos-sierra-in-virtualbox-on-windows-10/