macos无一键开关,但可用log stream监听tccd/sandboxd/kernel事件实时捕获敏感目录访问;fs_usage抓取进程级读写;fswatch感知结构变更;openbsm支持持久化审计。
macos 没有“一键开启敏感目录访问检测”的开关,但可通过终端组合命令,在不安装第三方工具的前提下,实时捕获谁、何时、以何种方式尝试访问指定敏感路径——重点抓取高价值线索,而非全量日志。
用 Unified Logging 实时监听权限决策点
这是最轻量、无需重启、系统原生支持的方式,聚焦 tccd(隐私授权)、sandboxd(沙盒拦截)和 kernel(内核拒绝)三类关键事件:
- 运行命令实时观察:
log stream --predicate 'subsystem == "com.apple.tccd" OR subsystem == "com.apple.sandboxd" OR process == "kernel"' --info --debug - tccd 日志显示:哪个 App(如 com.microsoft.OneDrive)在什么时间请求访问
/Users/xxx/Finance,用户点了“允许”还是“拒绝” - sandboxd 日志显示:进程 backupd 尝试读取
~/Library/Keychains/login.keychain-db被明确 deny file-read-data - kernel 日志配合 --debug 可看到 openat 失败的具体路径与错误码(如 ENOENT 或 EACCES)
- 加
> ~/sensitive-access.log保存记录;用--last 30m查最近半小时历史;搜索关键词如 “Finance”、“Backups”、“Keychains” 快速定位
对特定目录启用进程级读写捕获
当需要确认“实际发生了哪些读写”,而非仅看拦截或授权结果,可用 fs_usage 直接抓取内核 I/O 调用:
- 监控整个目录(含子项)的写入行为:
sudo fs_usage -w | grep -E "(write|open.*W).*\/SensitiveData" - 排除干扰日志,只盯目标路径:
sudo fs_usage -e fs_usage -w | grep "/SensitiveData" - 锁定某个可疑进程(如 Dropbox 或自家脚本):
sudo fs_usage -p $(pgrep -f "my-monitor.sh") - 输出含进程名、操作类型(write/truncate)、文件路径、数据量(bytes)和精确到毫秒的时间戳
用 fswatch 感知目录结构变更
适合快速发现“文件增删改”这类高层动作,响应快、不依赖 root 权限,且天然支持子目录递归监听:
- 先安装:
brew install fswatch - 监听并打印每次变更的完整路径:
fswatch -o ~/SensitiveData | xargs -n1 echo "Detected:" - 防重复触发(如编辑器自动保存多次):
fswatch -l 0.5 ~/SensitiveData(0.5 秒内合并同类事件) - 可接管道做进一步判断,例如:
fswatch -o ~/SensitiveData | while read path; do [ -f "$path" ] && stat -f "%Sm" -t "%Y-%m-%d %H:%M:%S" "$path"; done
补充持久化审计(合规场景适用)
若需满足审计留痕要求,可启用系统内置 OpenBSM,将每次 fr(读)和 fw(写)调用写入二进制日志:
- 启用审计规则:
sudo sed -i '' 's/^flags:.*/flags:lo,aa,fr,fw,fa,fc,fd/' /etc/security/audit - 重启服务:
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.auditd.plist<br>sudo launchctl load /System/Library/LaunchDaemons/com.apple.auditd.plist
- 日志默认存于
/var/audit/,用praudit解析:sudo praudit /var/audit/20260613083000.000 - 筛选敏感路径:
sudo praudit /var/audit/... | awk '/path.*SensitiveData/ {print}'











