正确查找全局可写上传目录应使用 find /var/www -type d -perm -o=w 2>/dev/null,即其他用户有写权限的目录,而非严格匹配权限002;常见高危路径包括/var/www、/srv/www、/home/*/public_html等。

直接用 find -type d -perm 002 查不到真正的全局可写上传目录,因为 -perm 002 要求权限严格等于八进制 002(即其他用户仅能写、所有者和组完全无权限),这种目录连 ls 都看不见,现实中几乎不存在,更不是业务系统中常见的高危上传点。
你要找的是:任何用户都能往里写文件的目录(比如 Web 上传目录、FTP 入口、临时上传区),典型权限是 777、733、666、755(若属主可控但其他用户有写权)等——关键在“其他用户(others)至少有写权限”,而非“仅有写权限”。
✅ 正确查找具备全局写权限的上传目录
用 -perm -o=w 或等价的 -perm -002,配合 -type d 限定只查目录:
find /var/www -type d -perm -o=w 2>/dev/null
或等效写法:
find /var/www -type d -perm -002 2>/dev/null
说明:
-
-type d:确保只匹配目录,排除文件、链接等干扰项; -
-perm -o=w:表示“other 用户位中,w 权限必须被设置”(即其他用户可写),不管 r/x 是否存在; -
2>/dev/null:过滤无权限访问的报错(如/proc下路径),让结果干净可用。
常见高风险路径建议扫描范围:
-
/var/www/(标准 Web 根) -
/srv/www/(某些发行版) -
/home/*/public_html/(用户级 Web 目录) -
/tmp/uploads/、/var/tmp/upload/(自定义上传区) - 应用部署目录如
/opt/myapp/uploads/
? 快速定位业务上传目录的实用技巧
很多上传目录名含特征关键词,可结合 -iname 提升命中率:
find /var/www -type d \( -perm -o=w -o -perm -g=w \) \( -iname "*upload*" -o -iname "*tmp*" -o -iname "*cache*" \) 2>/dev/null
这个命令同时检查:
- 其他用户或组有写权限(兼顾组上传场景)
- 目录名含 upload / tmp / cache 等典型词(大小写不敏感)
⚠️ 注意:-cache 类目录常被误设为 777,但实际不应允许全局写入,需重点核查。
? 加固操作:批量修复上传目录权限
找到后,按最小权限原则收紧。例如:
-
若该目录仅需 Web 服务用户(如
www-data或apache)写入,其他用户应无写权:find /var/www -type d -perm -o=w -exec chmod o-w {} \; -
若需保留组写权限(如开发组协作上传),可设为
775并确保组正确:find /var/www -type d -perm -o=w -exec chmod 775 {} \; find /var/www -type d -perm -o=w -exec chgrp www-data {} \; -
对明确用于上传的子目录(如
uploads/),可单独加固并禁用执行:find /var/www -type d -iname "uploads" -exec chmod 755 {} \; find /var/www/uploads -type f -exec chmod 644 {} \;
❌ 常见误区提醒
-
find /path -perm 002→ 错!这是精确匹配,99.9% 找不到真实上传目录; -
find /path -type d -exec chmod 755 {} \;→ 危险!没加权限过滤,会盲目降权,可能破坏应用逻辑; - 忽略
2>/dev/null→ 大量权限拒绝报错刷屏,掩盖真正结果; - 只查
/var/www→ 漏掉/opt、/srv、容器挂载卷等非标路径,建议结合业务配置确认实际上传根路径。
不复杂但容易忽略。











