📜  在 Linux 中查找具有 SUID 和 SGID 权限的文件(1)

📅  最后修改于: 2023-12-03 15:23:12.886000             🧑  作者: Mango

在 Linux 中查找具有 SUID 和 SGID 权限的文件

在 Linux 中,SUID 和 SGID 是两种特殊的文件权限。SUID(Set User ID)权限允许程序在执行时以文件所有者的身份运行,而不是以执行者的身份运行;SGID(Set Group ID)权限允许程序在执行时以文件所属组的身份运行,而不是以执行者所在组的身份运行。

为了保护系统安全,我们需要定期扫描系统,查找哪些具有 SUID 和 SGID 权限的文件。下面介绍几种方法,供程序员们参考。

方法一:使用find命令
find / -perm /6000 -type f 2>/dev/null

该命令会在根目录(/)下查找所有具有 SUID 或 SGID 权限的文件,并返回它们的绝对路径。其中,/6000 表示查找文件权限中包含数字 6000 的文件,即具有 SUID 或 SGID 权限的文件。-type f 表示只查找普通文件,2>/dev/null 表示将错误信息输出到 /dev/null 中,以避免不必要的警告信息。

方法二:使用find命令结合grep命令
find / -type f -ls | grep -E '(^|[^/])[sS]([uU][iI][dD]|[gG][iI][dD])'

该命令将先使用 find 命令查找所有普通文件的信息,并将其输出到管道中;然后使用 grep 命令,在这些信息中寻找文件名中包含 suid 或 sguid 的文件,以达到查找具有 SUID 和 SGID 权限的文件的目的。

方法三:使用locate命令
locate -r '\b(s|S)(u|g)(i|G)(d|D)\b'

该命令使用正则表达式查找具有 SUID 和 SGID 权限的文件。其中,\b 表示单词边界,(s|S) 表示 s 或 S,(u|g) 表示 u 或 g,(i|G) 表示 i 或 G,(d|D) 表示 d 或 D。该命令会在系统索引库中查找匹配的文件,查找速度比 find 命令快,但需要预先生成索引库。如果未安装该命令,则可以使用以下命令进行安装:

sudo apt-get install mlocate

以上三种方法都可以用来查找具有 SUID 和 SGID 权限的文件,可以根据自己的需求选择适合自己的方法。查找出这些文件后,我们需要逐一检查它们的用途,并确认是否需要保留它们的 SUID 或 SGID 权限。如果不需要,可以使用 chmod 命令去除它们的权限。