应聚焦系统关键路径(如/bin、/etc、/boot等),用-xdev防跨文件系统,结合-path ... -prune -o精准跳过业务目录,再叠加权限、时间、名称等检测条件实现安全巡检。

在 Linux 中用 find 巡检系统核心文件时,需排除业务目录(如 /opt/myapp、/var/www、/home/appuser 等),避免误扫、性能拖慢或权限干扰。关键不是“排除路径”,而是“精准限定扫描范围 + 有选择地跳过无关路径”。
明确巡检目标区域,缩小 find 范围
不建议从 / 全盘扫描。应聚焦系统关键路径:
-
/bin、/sbin、/usr/bin、/usr/sbin(基础命令) -
/etc(配置文件,重点检查权限与修改时间) -
/boot(内核与引导文件) -
/lib、/lib64(核心库) -
/proc和/sys通常跳过(虚拟文件系统,find不适用)
示例:只扫 /etc 和 /bin 下的可疑文件
find /etc /bin -xdev \( -type f -o -type l \) -perm /6000 -ls
-xdev 防止跨文件系统(如跳进 /mnt 或 /proc);\( ... \) 分组逻辑更清晰。
用 -path + -prune 排除指定业务目录
-prune 是高效跳过子树的标准方法,比 --exclude(非 POSIX)或管道过滤更可靠:
- 必须放在条件前,且配合
-o(或)使用 - 匹配到目录就跳过其全部内容,不进入递归
例如:巡检 / 但排除 /opt/myapp、/var/www、/home/deploy
find / -xdev \ \( -path "/opt/myapp" -o -path "/var/www" -o -path "/home/deploy" \) -prune -o \ \( -type f -o -type l \) -perm /6000 -ls 2>/dev/null
2>/dev/null 屏蔽权限不足报错(如 /root 下文件),保持输出干净。
结合 -wholename 实现通配排除(如所有项目目录)
若业务目录命名有规律(如都带 project- 或在 /srv/ 下),可用 -wholename 配合通配符:
-
-wholename '/srv/project-*'匹配/srv/project-api、/srv/project-ui -
-wholename '/opt/*-prod'排除所有-prod结尾的目录
组合写法(注意括号转义):
find / -xdev \ \( -wholename "/srv/project-*" -o -wholename "/opt/*-prod" \) -prune -o \ -type f -name "*.conf" -mtime -7 -print
该命令找出近 7 天修改过的配置文件,同时跳过匹配的业务目录。
安全巡检常用条件组合建议
排除只是第一步,真正有效需搭配合理检测逻辑:
- 查 SUID/SGID 异常:
-perm -4000 -o -perm -2000 - 查 world-writable 且非目录:
-type f -perm -002 - 查属主异常(如 root 文件被普通用户修改):
-type f -user root ! -group root - 查敏感配置泄露:
-name "config.php" -o -name ".env" -o -name "id_rsa"
把排除逻辑和检测逻辑分层组织,可读性与可维护性更高。例如封装成小脚本,传入要排除的路径列表。











