应使用sudo find / -type f -perm -4000 2>/dev/null查找所有suid可执行文件,需加sudo避免权限不足漏查,-type f确保仅普通文件,-perm -4000匹配含suid位的文件,2>/dev/null屏蔽错误输出。

直接运行 sudo find / -type f -perm -4000 2>/dev/null 就能列出系统中所有带 SUID 的普通可执行文件。
这个命令简洁有效,但背后有几个关键点必须注意,否则容易漏结果或误判。
为什么必须加 sudo?
普通用户没有权限遍历 /root、/proc 下部分路径、以及许多系统目录。不加 sudo,find 会大量报“Permission denied”,甚至跳过关键区域。提权审计场景下,权限是前提。
核心参数含义要清楚
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
-type f:只匹配普通文件,排除目录、符号链接、设备节点——避免把/usr/bin这类目录当“SUID 文件”误报 -
-perm -4000:匹配权限中包含 SUID 位的文件(即属主执行位是s或S),不是“权限恰好等于 4000”。这是最常用也最合理的写法 -
2>/dev/null:把错误信息(如无权限访问、文件消失)全部屏蔽,让输出干净可读。不加它,真实结果可能被几百行报错淹没
更实用的变体推荐
想一眼看出谁在跑、权限什么样、路径在哪,用这个:
sudo find / -type f -perm -4000 -ls 2>/dev/null | awk '{print $3, $5, $11}'
输出三列:所有者、权限字符串(含 rws)、完整路径。例如:
root -rwsr-xr-x /usr/bin/sudo nobody -rwsr-xr-x /tmp/malware.sh
后者明显可疑——非 root 属主 + 非标准路径,立刻值得深挖。
哪些 SUID 文件其实不用慌?
系统自带的多数是安全的,比如:
-
/usr/bin/passwd -
/usr/bin/sudo -
/usr/bin/ping -
/usr/bin/newgrp
它们功能明确、来源可信、行为受控。重点不是删掉它们,而是识别不在这些路径里、不属于 root、名字陌生的 SUID 文件。
不复杂但容易忽略:SUID 本身不是漏洞,是机制;危险来自程序逻辑缺陷或异常部署。找到只是第一步,后续还得看 ls -l、file、strings 和包管理溯源。










