应使用find / -xdev ( -perm -4000 -o -perm -2000 ) -type f -print 2>/dev/null命令查找全盘SUID/SGID可执行文件,其中-xdev跳过伪文件系统,-perm -4000/-2000分别匹配SUID和SGID位,-type f确保仅普通文件,2>/dev/null屏蔽权限错误。

在 Linux 系统中,查找全盘所有带有 SUID(Set User ID)或 SGID(Set Group ID)权限的可执行文件,主要依靠 find 命令配合权限位判断。关键在于理解八进制权限表示法中的特殊位含义:
理解 SUID/SGID 对应的权限位
SUID 对应权限位是 4000(即 user 位的 x 被替换为 s),SGID 对应 2000(group 位的 x 被替换为 s)。在 find 中可用 -perm 按位匹配:
-
-perm -4000:匹配所有设置了 SUID 的文件(要求该位必须为 1,其他位不限) -
-perm -2000:匹配所有设置了 SGID 的文件 -
-perm -6000:匹配同时设置了 SUID 或 SGID(或两者)的文件(因为 4000 | 2000 = 6000)
推荐的安全扫描命令(含过滤和优化)
直接从根目录 / 扫描全盘,但建议跳过虚拟文件系统(如 /proc、/sys、/dev),避免报错或卡住:
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -print 2>/dev/null
-
-xdev:不跨文件系统,自动跳过/proc、/sys、/dev等伪文件系统 -
\( ... \):括号需转义,用于组合逻辑(SUID 或 SGID) -
-type f:只找普通文件(排除目录、设备等) -
2>/dev/null:抑制“Permission denied”等错误提示
增强可读性与实用性的变体
加上详细信息、按权限排序,便于人工核查:
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -ls 2>/dev/null | sort -k3
-
-ls输出包含权限、所有者、大小、路径等字段 -
sort -k3按第 3 列(权限字符串,如-rwsr-xr-x)排序,把带s的集中显示
若只想看权限和路径,更简洁:
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -printf "%M %p\n" 2>/dev/null | sort
注意事项与常见误判
以下情况需人工甄别,不能仅凭权限位断定风险:
-
/usr/bin/passwd、/usr/bin/sudo、/usr/bin/newgrp是合法且必需的 SUID/SGID 程序 - 某些容器或沙箱环境可能挂载了额外文件系统,
-xdev会跳过;如需包含,改用-mount(较老版本)或显式指定路径 - 部分脚本(如 shell 或 Python)即使设了 SUID 也通常被内核忽略(除非用
binfmt_misc特殊配置),但仍建议检查其解释器是否可信
发现陌生路径下的 SUID/SGID 文件时,用 ls -l 查看权限、所有者,并结合 file 和 strings 初步分析用途。

















