关键是要查找其他用户(others)有写权限(o位为2、3、6、7)的普通文件,聚焦/var/www、/tmp、/var/tmp、/var/log等高风险路径,使用find -perm -o=w配合-xdev -type f 2>/dev/null精准定位,再人工验证加固。

要真正发现线上环境里能被任意用户写入的文件,关键不是找“权限恰好是002”的文件——那种文件现实中几乎不存在,连 ls 都列不出来。你应该找的是“其他用户(others)至少有写权限”的所有普通文件,也就是权限中第三位(o位)为2、3、6或7的文件,比如644、666、777、602等。
聚焦高风险路径,避免全盘扫描拖慢系统
线上环境资源紧张,不建议直接从 / 开始扫。优先检查这些真实易被利用的目录:
-
/var/www及其子目录(Web上传区、配置文件、模板) -
/tmp和/var/tmp(临时文件、动态库注入点) -
/var/log下非 root 拥有的日志文件(如被低权限服务轮转写入) -
/home/*/public_html(共享主机类环境中的用户级 Web 目录) -
/srv/www(部分发行版或定制部署使用的 Web 根)
用对 -perm 参数,才能命中真实风险
必须用带减号前缀的 -perm -o=w 或等价的 -perm -002,它们含义一致:只要 other 位设置了写权限,就匹配。
示例命令(生产可用):
- 查 Web 目录下其他人可写的配置文件:
find /var/www -type f \( -name "*.conf" -o -name "*.ini" -o -name ".env" \) -perm -o=w 2>/dev/null - 查临时目录中可写的 shell 脚本:
find /tmp /var/tmp -type f -name "*.sh" -perm -o=w 2>/dev/null - 查所有可写的 .so 文件(防范 LD_PRELOAD 注入):
find /tmp /var/tmp /var/www -type f -name "*.so*" -perm -o=w 2>/dev/null
加限制项让结果更干净、更安全
线上扫描务必加过滤,减少误报和干扰:
-
-xdev:不跨挂载点,跳过/proc、/sys、/dev等虚拟文件系统 -
2>/dev/null:屏蔽 “Permission denied” 类报错,只留有效路径 -
-type f:严格限定为普通文件,排除目录、链接、设备节点 -
| head -15:首次运行先看前15条,确认模式合理再全量执行
发现后别急着删,先验证再加固
每个结果都要人工确认是否真有风险:
- 用
ls -l看属主、属组和完整权限 - 用
stat查看时间戳变化,判断是否近期被异常修改 - 用
file确认文件类型(比如是不是真 ELF 共享库、是不是空文件或日志) - 若确需保留,优先改权限:
chmod o-w 文件名;次选改属主:chown www-data: 文件名
不复杂但容易忽略

















