macOS虽无内置权限审计界面,但可通过Unified Logging查chmod/chown/tccutil命令、比对TCC.db时间戳与授权列表差异、监控全盘访问/辅助功能等高风险权限状态,并排查APFS快照导致的权限回滚。
macos 对应用权限变更不提供开箱即用的审计界面,但系统底层保留了足够线索,可组合日志、数据库和状态快照实现有效追踪。关键在于聚焦三类高风险变更:隐私类授权(如麦克风、定位)、系统级控制权(如辅助功能、全盘访问)以及文件权限调整。
查 Unified Logging 中的敏感命令调用
系统会记录涉及权限变更的终端操作,前提是日志未被手动清理或限制保留周期:
- 运行 log show --predicate 'eventMessage contains "chmod" or eventMessage contains "chown" or eventMessage contains "tccutil"' --last 7d,查看近一周内相关命令执行痕迹
- 若怀疑是 root 用户所为,追加 --info | grep "root" 过滤结果
- 注意:普通用户直接运行 chmod 不触发日志;只有通过 sudo 提权的操作才留痕
比对 TCC 数据库的时间戳与内容差异
TCC.db 是 macOS 管理隐私授权的核心数据库,虽不记录操作者,但修改时间与内容变化可作为审计依据:
- 用 stat /Library/Application\ Support/com.apple.TCC/TCC.db 查看最后修改时间,判断是否异常更新
- 导出当前授权列表:sudo sqlite3 "/Library/Application Support/com.apple.TCC/TCC.db" "SELECT service, client, allowed FROM access ORDER BY service, client;" > tcc_export_$(date +%Y%m%d).txt
- 定期保存该文件,用 diff 工具对比前后版本,识别新增或撤销的授权项(例如 kTCCServiceMicrophone 或 kTCCServiceSystemPolicyAllFiles)
监控高风险权限开关的实时状态
有些权限变更不会写入日志,但可通过脚本定期抓取状态做基线比对:
- 检查全盘访问启用的应用:sqlite3 "/Library/Application Support/com.apple.TCC/TCC.db" 'SELECT client FROM access WHERE service = "kTCCServiceSystemPolicyAllFiles" AND allowed = 1;'
- 列出已获辅助功能权限的应用:sqlite3 "/Library/Application Support/com.apple.TCC/TCC.db" 'SELECT client FROM access WHERE service = "kTCCServiceAccessibility" AND allowed = 1;'
- 结合 defaults read com.apple.universalaccess closeViewScrollWheelToggle 等偏好设置项,辅助判断无障碍调试类权限是否被手动开启
留意快照与备份工具引发的权限关联行为
某些第三方备份或系统维护工具在创建 APFS 快照时可能间接影响权限状态(如恢复旧快照导致授权回滚):
- 用 sudo tmutil listlocalsnapshots / 查看本地快照列表,注意命名是否含可疑前缀(非 com.apple.TimeMachine. 开头)
- 追溯快照创建源头:log show --predicate 'eventMessage contains "apfs_snapshot_create"' --last 3d
- 确认是否有未知进程调用 tmutil 或 diskutil 触发快照,这类操作常伴随权限重置或配置还原


















