xprotect 不支持定期安全巡检,仅在用户首次打开带隔离属性的下载文件(如 .app、.pkg、.pdf 脚本、.sh 等)时进行一次性静默扫描;它不轮询文件系统,也不监控运行进程,需借助 launchd、microsoft defender 或手动命令实现定期检查。
xprotect 不会对本地磁盘文件做定期安全巡检。
它只在特定时机、针对特定文件进行一次性静默扫描,且完全不支持“定时巡查”或“全盘轮询”。这是设计使然,不是功能缺失。
它真正会扫描什么?
- 用户首次双击打开一个刚下载的可执行文件(如
.app、.pkg、.dmg内的二进制) - 首次打开含脚本/宏的文档(如
.pdf里的 JavaScript、.docm中的 VBA) - 首次运行通过浏览器下载并保存的
.sh、.zsh等脚本(前提是未被绕过隔离属性)
一旦文件被成功打开过一次,后续再运行就不会再触发 XProtect 检查——它不维护运行时进程监控,也不轮询文件系统。
它不会扫描这些:
- 已存在多年的本地应用(如
/Applications/TextEdit.app) - 用户自己编写的脚本(如
~/scripts/deploy.sh),除非是刚从网页下载且带com.apple.quarantine属性 -
~/Library/LaunchAgents/下的 plist 文件本身(只在对应程序首次启动时检查其加载的二进制) - 系统日志、配置文件、数据库等非可执行内容
那怎么实现“定期巡检”?
得靠你自己补位:
- 用
launchd定时执行自定义校验脚本(例如比对关键系统目录的权限与哈希值) - 部署 Microsoft Defender for Endpoint 并配置每日快速扫描(支持计划任务)
- 手动触发
spctl --assess或codesign -v对可疑应用做签名验证 - 定期检查
/Library/LaunchDaemons和~/Library/LaunchAgents目录下的 plist 文件名与内容
XProtect 是守门人,不是巡逻兵。它的价值在于“第一道拦截”,而不是“持续盯梢”。依赖它做定期巡检,等于让门卫去巡逻整栋楼——他没这个职责,也没这个能力。











