我在网上找到的所有指南都指出:
Find all SUID files:
find / -perm -4000 -print
Find all SGID files:
find / -perm -2000 -print
但事实并非如此。看:
$ ls -lah test
-r-sr-xr-x 1 user user 0B Jan 24 22:47 test
$
$
$ stat -x test | grep Mode
Mode: (4555/-r-sr-xr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
$
$
$ find test -perm 4000
$ find test -perm 2000
$
问题:那么真相又是什么呢?如何真正列出所有 SUID/SGID 文件?
答案1
如果你想测试任何位,使用/
.即对于您的用例:
find "$DIRECTORY" -perm /4000
和:
find "$DIRECTORY" -perm /2000
或组合:
find "$DIRECTORY" -perm /6000
您可以使用文件夹和文件作为 GNU 的参数find
。
另一种在我看来更易读的方法是使用助记符快捷方式。 IE:
find "$DIRECTORY" -perm /u=s,g=s
买者自负
请记住,不同的变体是find
不同的。他们的行为也可能不同。请务必阅读友好手册 (RTFM)。
答案2
通过使用以下命令,您可以枚举所有具有 SUID 权限的二进制文件。-perm -u=s
该工具的标志可以find
解决这个问题:
find / -perm -u=s -type f 2>/dev/null