macOS Catalina 10.15.x 屏幕录制权限修复:绕过SIP,用sqlite3直接修改TCC.db数据库
macOS Catalina 10.15.x 屏幕录制权限修复绕过SIP用sqlite3直接修改TCC.db数据库在macOS Catalina 10.15.x系统中屏幕录制权限的管理有时会出现异常导致无法通过常规的GUI设置界面添加或修改权限。这种情况通常发生在系统升级、应用程序更新或权限数据库损坏时。对于开发者、安全研究人员或高级用户来说了解如何直接操作TCC.db数据库来修复权限问题是一项非常有价值的技能。TCCTransparency, Consent, and Control是macOS中用于管理应用程序访问敏感资源的权限系统。它通过一个SQLite数据库文件/Library/Application Support/com.apple.TCC/TCC.db来存储所有权限配置。当GUI设置失效时直接修改这个数据库成为解决问题的最后手段。1. 准备工作与风险提示在开始操作之前有几个重要的注意事项需要了解系统完整性保护SIPmacOS的系统完整性保护会阻止对系统关键文件的修改包括TCC.db。因此在修改数据库前需要暂时禁用SIP。备份的重要性直接修改系统数据库存在风险可能导致系统不稳定或权限系统完全失效。强烈建议在操作前创建完整的系统备份。时间机器备份确保Time Machine最近完成过备份或者手动创建一个系统快照。终端熟练度要求本方法需要熟练使用终端命令不熟悉命令行的用户应谨慎尝试。警告直接修改TCC.db数据库可能违反某些应用程序的使用条款且不当操作可能导致系统安全问题。请仅在合法合规的前提下进行这些操作。2. 禁用系统完整性保护SIP要修改TCC.db数据库首先需要暂时禁用SIP。以下是详细步骤重启Mac在启动时按住CommandR进入恢复模式。在恢复模式的实用工具菜单中选择终端。在终端中输入以下命令检查当前SIP状态csrutil status如果显示System Integrity Protection status: enabled则需要继续以下步骤。输入以下命令禁用SIPcsrutil disable重启Mac进入正常系统。禁用SIP后系统将不再保护TCC.db等系统文件允许我们进行必要的修改。完成所有操作后强烈建议重新启用SIP以保持系统安全csrutil enable3. 理解TCC.db数据库结构TCC.db是一个SQLite数据库包含多个表其中最重要的是access表它存储了所有应用程序的权限配置。了解这个表的结构对于正确修改权限至关重要。access表的主要字段及其含义字段名类型描述serviceTEXT权限服务类型如屏幕录制、摄像头等clientTEXT应用程序的Bundle Identifierclient_typeINTEGER客户端类型0应用1工具allowedINTEGER是否允许1允许0拒绝prompt_countINTEGER用户被提示的次数csreqBLOB代码签名要求policy_idINTEGER策略IDindirect_object_identifierTEXT间接对象标识符indirect_object_code_identityTEXT间接对象代码标识flagsINTEGER标志位last_modifiedINTEGER最后修改时间戳常见的服务类型service字段值kTCCServiceAccessibility辅助功能kTCCServiceCamera摄像头kTCCServiceListenEvent输入监听kTCCServiceMicrophone麦克风kTCCServiceScreenCapture屏幕录制kTCCServiceSystemPolicyAllFiles完全磁盘访问权限4. 修改屏幕录制权限的详细步骤现在我们可以开始实际修改屏幕录制权限了。以下是详细的操作流程4.1 获取应用程序的Bundle Identifier每个Mac应用程序都有一个唯一的Bundle Identifier这是我们在TCC.db中识别应用程序的关键。获取方法如下在Finder中找到应用程序通常在/Applications目录下。右键点击应用程序选择显示包内容。导航到Contents目录用文本编辑器打开Info.plist文件。查找CFBundleIdentifier键其对应的字符串值就是Bundle Identifier。例如对于Camtasia 2019其Bundle Identifier可能是com.techsmith.camtasia2019。4.2 备份原始TCC.db数据库在进行任何修改前先备份原始数据库sudo cp /Library/Application\ Support/com.apple.TCC/TCC.db ~/Desktop/TCC.db.backup4.3 使用sqlite3修改权限现在可以使用sqlite3命令行工具直接修改数据库。以下是添加屏幕录制权限的命令模板sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db INSERT OR REPLACE INTO access VALUES(kTCCServiceScreenCapture,应用程序的Bundle Identifier,0,1,1,NULL,NULL,NULL,UNUSED,NULL,0,时间戳);将命令中的应用程序的Bundle Identifier替换为你实际获取的值时间戳可以使用当前Unix时间戳可通过date %s获取。例如为Camtasia 2019添加屏幕录制权限sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db INSERT OR REPLACE INTO access VALUES(kTCCServiceScreenCapture,com.techsmith.camtasia2019,0,1,1,NULL,NULL,NULL,UNUSED,NULL,0,$(date %s));4.4 验证修改结果执行以下命令验证修改是否成功sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db SELECT * FROM access WHERE client应用程序的Bundle Identifier;如果看到对应的记录且allowed字段值为1则表示修改成功。4.5 重启应用程序和权限系统为了使修改生效可能需要完全退出目标应用程序在系统偏好设置 安全性与隐私 隐私中取消然后重新勾选相应的权限重启电脑在某些情况下可能需要5. 其他常见权限的修改方法同样的方法可以用于修改其他类型的权限。以下是常见权限的修改命令示例麦克风权限sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db INSERT OR REPLACE INTO access VALUES(kTCCServiceMicrophone,com.techsmith.camtasia2019,0,1,1,NULL,NULL,NULL,UNUSED,NULL,0,$(date %s));摄像头权限sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db INSERT OR REPLACE INTO access VALUES(kTCCServiceCamera,com.techsmith.camtasia2019,0,1,1,NULL,NULL,NULL,UNUSED,NULL,0,$(date %s));完全磁盘访问权限sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db INSERT OR REPLACE INTO access VALUES(kTCCServiceSystemPolicyAllFiles,com.techsmith.camtasia2019,0,1,1,NULL,NULL,NULL,UNUSED,NULL,0,$(date %s));6. 高级技巧与故障排除6.1 批量修改多个权限如果需要为一个应用程序添加多个权限可以创建一个包含多条SQL语句的文件然后一次性执行echo INSERT OR REPLACE INTO access VALUES(kTCCServiceScreenCapture,com.techsmith.camtasia2019,0,1,1,NULL,NULL,NULL,UNUSED,NULL,0,$(date %s)); INSERT OR REPLACE INTO access VALUES(kTCCServiceMicrophone,com.techsmith.camtasia2019,0,1,1,NULL,NULL,NULL,UNUSED,NULL,0,$(date %s)); /tmp/tcc_commands.sql sudo /usr/bin/sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db /tmp/tcc_commands.sql6.2 修复损坏的TCC.db数据库如果TCC.db数据库损坏导致权限系统完全失效可以尝试以下步骤备份当前数据库删除原数据库系统会自动创建一个新的sudo rm /Library/Application\ Support/com.apple.TCC/TCC.db重启电脑重新配置所有必要的权限6.3 权限不生效的常见原因如果按照上述步骤操作后权限仍然不生效可能是以下原因SIP没有完全禁用检查csrutil status应用程序的代码签名发生了变化系统缓存没有更新尝试重启数据库权限不正确确保/Library/Application Support/com.apple.TCC目录权限正确7. 安全注意事项与最佳实践直接修改TCC.db是一项高级操作应当谨慎使用。以下是一些安全建议最小权限原则只授予应用程序确实需要的权限定期审查权限检查TCC.db中的权限设置移除不再需要的授权及时重新启用SIP完成必要修改后立即重新启用系统完整性保护记录变更记录所有手动修改的权限便于后续审计和故障排除考虑替代方案如果可能优先通过正规渠道系统偏好设置管理权限重要提示这些技术知识应当仅用于合法的系统维护和故障排除目的。不当使用可能导致系统安全风险或违反软件许可协议。