直接用 find / -type f -perm -4000 或 -perm -2000 查 suid/sgid 文件,需加 -type f 排除目录和符号链接,-xdev 跳过挂载点,2>/dev/null 屏蔽权限错误,并用 file 验证是否为可执行 elf 文件。

怎么用 find -perm 查 SUID/SGID 文件
直接查 -perm -4000 或 -perm -2000 是最常用也最有效的起点,但必须加 -type f 排除目录和符号链接,否则会混入大量无效结果。
-
-perm -4000表示“权限中包含 SUID 位”,不是“权限恰好等于 4000”——比如4755、4111都会被匹配 -
-perm -2000同理匹配 SGID,但注意:对文件设 SGID 实际意义有限,真正危险的是属组为root或wheel且可写 - 务必加
2>/dev/null,否则遍历/proc、/sys时大量 “Permission denied” 会冲掉真实结果 - 推荐加上
-xdev跳过挂载点(如/mnt、/media),避免卡死或误扫外部设备
为什么只看权限不够?必须用 file 确认是否真能执行
很多 SUID 文件其实是 shell 脚本或空文件,根本无法提权;而攻击者常伪造 ELF 头骗过简单判断。所以不能只信 find 输出的路径。
- 用
file /path/to/file看输出是否含ELF.*executable,排除脚本、文本、损坏文件 - 更稳妥的一行命令:
find / -type f -perm -4000 -exec sh -c 'file "$1" | grep -q "ELF.*executable" && echo "$1"' _ {} \; 2>/dev/null - 特别警惕
bash、python、vim、find这类工具带 SUID——它们几乎都能直接 spawn shell
哪些路径和属主组合基本等于“可疑”
系统自带 SUID 文件集中在 /usr/bin、/bin,且属主一定是 root。一旦偏离这个模式,就该人工介入。
- 高危路径:
/tmp、/var/tmp、/dev/shm—— 正常系统绝不会在这里放 SUID 二进制 - 非标路径:
/usr/local/bin、/opt、/home/*/bin、/home/*/local/bin—— 第三方或用户自建,SUID 基本无合法理由 - 异常属主:
! -user root是硬性过滤条件;属组是staff、users、www-data或普通用户名,比属主更值得怀疑 - 别忽略修改时间:
find / -type f -mmin -10 -perm /4000 2>/dev/null可抓到刚被植入的 SUID 文件
顺手排查其他权限异常类型
SUID/SGID 是提权主力,但全局可写、不合规配置文件、近期权限变更同样暴露风险面。
- 全局可写文件:
find / -type f -perm -o+w 2>/dev/null,重点看/etc/cron.*、/var/spool/cron下非root属主的文件 - 关键配置文件权限超标:
find /etc -type f -uid 0 ! -perm 644 -ls 2>/dev/null,比如root拥有的/etc/shadow不该是666 - 混合条件更实用:
find /usr -type f -perm -4000 ! -user root -exec ls -l {} \; 2>/dev/null,一步显示权限+属主+路径,省得再ls -l
find 的输出只是线索,每个结果都得用 ls -l 和 file 再过一遍——权限位本身不危险,危险的是它出现在不该出现的地方、属于不该属于的人、内容与描述不符。











