我正在维护一个 github 项目,该项目旨在自动化干净的 macOS 安装、macOS 自定义(完整的系统首选项和更多设置)以及应用程序和系统的更新。
https://github.com/tiiecherle/osx_install_config
脚本之一在系统首选项 - 安全 - 隐私下设置首选项。
每个 macOS 应用程序都有一个 csreq,它似乎是每个应用程序的指纹/校验和。在 macOS Mojave 之前,不需要显式设置值,它正在努力用“?”替换 csreq。例如,允许访问终端:
DATABASE_SYSTEM="/Library/Application Support/com.apple.TCC/TCC.db"
INPUT_SERVICE=kTCCServiceAccessibility
APP_ID=com.apple.Terminal
PERMISSION_GRANTED=1
APP_CSREQ=X'FADE0C000000003000000001000000060000000200000012636F6D2E6170706C652E5465726D696E616C000000000003'
### working, but no csreq
sudo sqlite3 "$DATABASE_SYSTEM" "REPLACE INTO access VALUES('"$INPUT_SERVICE"','"$APP_ID"',0,$PERMISSION_GRANTED,1,NULL,NULL,NULL,?,NULL,0,?);"
### working with csreq
sqlite3 "$DATABASE_USER" "REPLACE INTO access VALUES('"$INPUT_SERVICE"','"$APP_ID"',0,$PERMISSION_GRANTED,1,$APP_CSREQ,NULL,NULL,?,NULL,NULL,?);"
Run Code Online (Sandbox Code Playgroud)
这仍然有效,但 macOS Mojave 引入了更多安全设置,并且为了通过命令行正确设置自动化,需要两个应用程序、自动化和自动化应用程序的 csreqs,例如允许终端自动化系统设置:
DATABASE_USER="/Users/"$USER"/Library/Application Support/com.apple.TCC/TCC.db"
SOURCE_APP_ID=com.apple.Terminal
SOURCE_APP_CSREQ=X'FADE0C000000003000000001000000060000000200000012636F6D2E6170706C652E5465726D696E616C000000000003'
PERMISSION_GRANTED=1
AUTOMATED_APP_ID=com.apple.systemevents
AUTOMATED_APP_CSREQ=X'FADE0C000000003400000001000000060000000200000016636F6D2E6170706C652E73797374656D6576656E7473000000000003'
sqlite3 "$DATABASE_USER" "REPLACE INTO access VALUES('kTCCServiceAppleEvents','"$SOURCE_APP_ID"',0,$PERMISSION_GRANTED,1,$SOURCE_APP_CSREQ,NULL,0,'"$AUTOMATED_APP_ID"',$AUTOMATED_APP_CSREQ,NULL,?);"
Run Code Online (Sandbox Code Playgroud)
如果 csreq 替换为问号“?”,则该条目有效,但根本不会出现在系统首选项的 GUI 中。
系统会在请求权限时单击允许时生成 csreq,然后可以从数据库中读取。为了通过命令行进行正确的输入,我想从命令行上的应用程序读取/生成正确的 csreq,而不是从 tcc.db 读取它,因为它似乎随着应用程序的每个版本而变化。
感谢您提前提供任何帮助
编辑
非常感谢 …