macOS无一键开启系统日志审计的原生开关,需按需组合log stream实时监听tccd/sandboxd/kernel事件、log show导出结构化历史日志、OpenBSM持久捕获fr/fw系统调用,以及控制台App关键词筛选导出,实现轻量、可追溯、隐私友好的敏感文件访问审计。macOS 没有“开启系统日志审计功能”的一键开关,也没有图形化设置项能直接启用完整文件访问审计。它的日志与审计能力是分层、按需组合的——你需要明确想查什么(比如谁读了通讯录、哪个App试图访问桌面、是否有越权写入),再用对应命令聚焦捕获。
用 log stream 实时监听权限与沙盒拦截事件
这是最轻量、无需配置、立即生效的方式,适合快速排查敏感行为:执行以下命令,即可看到实时弹出的权限请求和拒绝记录:
log stream \ --predicate 'subsystem == "com.apple.tccd" OR subsystem == "com.apple.sandboxd" OR process == "kernel"' \ --info --debug
它会显示:
-
tccd 日志:Chrome 请求访问
/Users/xxx/Documents,用户点了“允许”还是“拒绝” -
sandboxd 日志:某个后台进程尝试读取
login.keychain-db被明确 deny -
kernel 日志(配合 --debug):底层
openat系统调用失败的具体路径和错误码
加 > ~/audit.log 可保存;用 --last 1h 替换 stream 可查最近一小时历史。
用 log show 导出结构化日志做深度回溯
当你要分析过去几天的行为(比如排查某次异常访问),log show 更精准、可筛选:
例如,导出近30天所有“全盘访问”授权相关日志:
log show \ --predicate 'subsystem == "com.apple.tccd" AND (eventMessage contains "full disk access" OR eventMessage contains "allow" OR eventMessage contains "deny")' \ --last 30d \ --style syslog > ~/Desktop/fda-audit-$(date +%Y%m%d).txt
其他常用场景:
- 查沙盒拒绝:含
deny+file-read-data的 sandboxd 记录 - 查内核文件错误:含
openat或VFS的 kernel error 级别日志 - 查特定App行为链:如 Slack 访问通讯录或桌面的完整上下文
务必加上 --info --debug,它能提供 PID、bundle ID、调用堆栈等关键溯源字段。
对关键目录启用 OpenBSM 持久化读写捕获
如果需要记录**实际发生的读写操作**(不只是拦截或授权),就得启用 OpenBSM 审计子系统:它默认已安装,但需手动配置规则来捕获 fr(文件读)、fw(文件写)等系统调用:
- 编辑
/etc/security/audit_control,在flags:行后添加fr,fw(如flags:lo,aa,fr,fw) - 重启审计服务:
sudo audit -s - 日志自动写入
/var/audit/下的二进制文件,可用praudit解析
注意:OpenBSM 会产生较多日志,建议只对真正敏感的路径(如 ~/Documents、~/Library/Keychains)启用,并配合 auditreduce 过滤。
用控制台 App 快速定位和导出线索
不需要命令行也能初步审计:打开「控制台」→ 左侧选本机 → 右上角搜索框输入关键词,例如:
-
s:com.apple.tccd:只看隐私权限服务日志 -
deny file-read-data:搜所有被沙盒拒绝的读操作 -
panic或crash:辅助判断是否因异常访问引发崩溃
双击日志可展开详情;筛选后点「文件 → 导出所选日志」,就能保存为文本供进一步分析。











