macos安全审计需分层验证:先用sip属性过滤(如ls -lod)确认路径是否受保护,再筛查未被sip覆盖的全局可写目录(如/usr/local),检查关键路径所有权(root:wheel),排查gatekeeper隔离(xattr -d)和终端磁盘权限,并通过log/osquery捕获实时权限异常。

macOS 安全审计发现权限配置异常,核心是结合系统原生机制(如 SIP、文件属性、统一日志)与主动扫描手段,避开误报、直击风险点。不依赖单一工具,而是分层验证路径归属、访问控制、运行时行为是否一致。
检查全局可写系统目录(重点防提权)
全局可写(world-writable)的系统目录是常见攻击入口,尤其在 /System/Volumes/Data/System 下。但注意:不是所有可写目录都危险,SIP 保护的路径即使权限宽松也实际不可篡改。
- 运行命令快速筛查:
find /System/Volumes/Data/System -type d -perm -2 -o -perm -20 2>/dev/null | grep -v "AssetsV2/locks\|downloadDir"
该命令找出所有组或全局可写的目录,并排除已知安全路径(如 AssetsV2/locks) - 更可靠的方式是用 SIP 属性过滤:
ls -lOd /System/Volumes/Data/System/Library/AssetsV2/locks
若输出含 restricted 或 compressed 标志,说明该路径受 SIP 保护,无需修复 - 真正需关注的是未被 SIP 覆盖却全局可写的目录,例如自定义安装到 /usr/local 下的脚本目录——应确保其组为 wheel、权限为 drwxr-xr-x
验证关键系统路径所有权(防功能失效)
旧版 macOS(Lion–Yosemite)曾严重依赖权限数据库,而现代系统虽弱化了“修复磁盘权限”功能,但 /usr、/bin、/sbin 等路径的所有权错误仍会导致命令无法执行、偏好设置拒绝修改等现象。
- 检查标准归属:
ls -ld /usr /bin /sbin /etc
正常输出中所有者应为 root,组应为 wheel - 若发现如 staff 或普通用户名,立即修正:
sudo chown -R root:wheel /usr /bin /sbin - 特别注意 /etc:它常被管理脚本修改,若权限变为 drwxr-xr-x 以外的值(如开放写入),可能被恶意注入 hosts 或 launchd 配置
排查 Gatekeeper 隔离与扩展权限缺失(防终端脚本静默失败)
很多“Permission denied”或“Operation not permitted”报错并非传统权限问题,而是 macOS 安全策略拦截,终端本身没获得对应权限,或脚本被标记为不可信。
- 查隔离属性:
ls -l@ your_script.sh
若含 com.apple.quarantine,运行sudo xattr -d com.apple.quarantine your_script.sh - 确认终端有完全磁盘访问权:
进入「系统设置 → 隐私与安全性 → 完全磁盘访问权限」,解锁后将 Terminal.app 拖入并重启终端 - 第三方驱动或后台进程(如 cloudd、mdworker)若突然失能,先查控制台搜索 sandboxd deny 或 lsd deny,再核对其在隐私设置中的各项开关是否启用
用 osquery 或 log 命令捕获实时权限异常事件
被动检查不如主动监控。利用系统日志和轻量审计工具,把权限拒绝变成可观测事件。
- 查最近权限拒绝记录:
log show --predicate 'eventMessage contains "denied" OR eventMessage contains "EACCES" OR eventMessage contains "EPERM"' --last 1h - 用 osquery 监控敏感路径变更(需提前配置):
SELECT path, mtime, uid, gid FROM file_events WHERE path LIKE '/etc/%' AND action = 'ATTRIB'
可及时发现非 root 用户修改系统配置的行为 - 对高风险操作做快照比对:
ps aux | awk '{print $2,$11}' | sort > /tmp/process_cmd_$(date +%s)
定期执行并 diff,识别出异常路径启动的进程(如从 /tmp 或 /var/folders 执行的未知二进制)











