我一直在尝试使用“oneliner”查找setuid可执行文件。
我首先尝试的线路是:
find / -perm /u+s -type f
然后我发现一行类似但给出了不同的结果:
find / -perm /6000 -type f
据我所知,这些看起来是相同的,但第一个显示的结果没有第二个那么多(大多数都缺少奇怪的组)。为什么,有什么不同?
答案1
大多数人不知道,Unix 权限实际上不仅仅是用户、组和其他 (rwx)。这 3 个三元组是允许用户、组和其他用户访问文件和目录的典型权限。然而,还有一组位于用户位之前的位。这些位被称为“特殊模式”。
它更多的是一种速记符号,您在处理诸如chmod
.
$ chmod 644
实际上相当于:
$ chmod 0644
这是位列表:
摘录维基百科文章标题为:chmod
Flag Octal value Purpose
---- ----------- -------
S_ISUID 04000 Set user ID on execution
S_ISGID 02000 Set group ID on execution
S_ISVTX 01000 Sticky bit
S_IRUSR, S_IREAD 00400 Read by owner
S_IWUSR, S_IWRITE 00200 Write by owner
S_IXUSR, S_IEXEC 00100 Execute/search by owner
S_IRGRP 00040 Read by group
S_IWGRP 00020 Write by group
S_IXGRP 00010 Execute/search by group
S_IROTH 00004 Read by others
S_IWOTH 00002 Write by others
S_IXOTH 00001 Execute/search by others
你的问题
因此,在您要查找的第一个命令中u+s
,结果将是 bit 04000
。当您使用数字符号时,您需要的是位04000
和 02000
。这将为您提供设置了用户或组 setuid 位的文件。
进一步阅读
我强烈建议任何想要更好地了解 Unix 权限的人阅读维基百科页面关于chmod
。它非常简单地将其分解,并且在您忘记时是一个很好的参考。
参考
答案2
模式6000
是u+s,g+s
,而不仅仅是u+s
(那就是4000
)。
find / -perm /u+s
或者find / -perm /4000
只查找设置了 setuid 位的文件。find / -perm /u+s
或find / -perm /6000
查找设置了 setuid 位或 setgid 位的文件。