
macOS 本身不提供实时权限修改日志的图形界面视图,但系统底层会记录部分关键权限变更事件,主要通过 Unified Logging(统一日志系统)和 TCC 数据库变更痕迹间接反映。真正可追踪的“关键权限修改”集中在三类:文件系统权限(chmod/chown)、隐私类授权(定位/麦克风/照片等)、以及系统级服务启用状态(如辅助功能、全盘访问)。以下方法兼顾实用性和可操作性,无需越狱或第三方工具。
查看 Unified Logging 中的权限相关操作记录
系统会将涉及 sudo、chmod、chown、tccutil 等敏感命令的执行行为写入日志,前提是用户有管理员权限且未禁用日志保留:
- 在终端中运行:
log show --predicate 'eventMessage contains "chmod" or eventMessage contains "chown" or eventMessage contains "tccutil"' --last 7d,可查最近7天内相关命令调用 - 若想聚焦 root 用户操作,加过滤:
--info | grep "root" - 注意:普通用户执行 chmod 若未用 sudo,通常不会被系统日志捕获;只有提升权限的操作才留痕
检查 TCC 授权数据库的时间戳与内容变化
定位、麦克风、辅助功能等权限由 /Library/Application Support/com.apple.TCC/TCC.db 统一管理。虽然不能直接审计“谁在何时改了哪项”,但可通过时间对比发现异常:
- 用
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.txt - 定期保存该输出,用 diff 工具比对前后差异,即可识别新增/撤销的授权项
- 常见 service 值包括:
kTCCServiceAccessibility(辅助功能)、kTCCServiceMicrophone(麦克风)、kTCCServiceLocation(定位)
监控系统设置中的高风险权限开关状态
有些权限变更虽无日志,但状态可被脚本定期快照,适合做基线比对:
- 检查“全盘访问”是否被新增应用启用:
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等偏好设置项,判断是否有人手动开启过无障碍调试选项
识别非预期的权限提升行为
某些恶意软件或误操作会悄悄添加管理员组成员、修改启动项或注入守护进程,这些也属于广义“权限修改”:
- 列出所有管理员用户:
dscl . -read /Groups/admin GroupMembership - 检查登录项中是否有陌生路径:
ls /Library/LaunchDaemons/ /Library/LaunchAgents/ ~/Library/LaunchAgents/ | xargs -I {} sh -c 'echo {}; plutil -convert xml1 -o - {} 2>/dev/null | grep -q "RunAtLoad.*<true></true>" && echo " → 启动时加载"' - 扫描已签名但可能被滥用的工具:
codesign -dv /usr/bin/sudo验证关键二进制是否被篡改(正常应显示 TeamIdentifier 和 anchor)











