如何搜索所有 SUID/SGID 文件?

som*_*533 16 find

我在网上找到的所有方法都说明:

Find all SUID files:
find / -perm -4000 -print
Find all SGID files:
find / -perm -2000 -print 
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。看:

$ 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
$
Run Code Online (Sandbox Code Playgroud)

问题:那么真相是什么?我怎样才能真正列出所有的 SUID/SGID 文件?

0xC*_*22L 17

如果要测试任何位,请使用/. 即对于您的用例:

find "$DIRECTORY" -perm /4000
Run Code Online (Sandbox Code Playgroud)

和:

find "$DIRECTORY" -perm /2000
Run Code Online (Sandbox Code Playgroud)

或组合:

find "$DIRECTORY" -perm /6000
Run Code Online (Sandbox Code Playgroud)

您可以同时使用文件夹和文件作为 GNU 的参数find

另一种 IMO 可读性更好的方法是使用助记符快捷方式。IE:

find "$DIRECTORY" -perm /u=s,g=s
Run Code Online (Sandbox Code Playgroud)

买者自负

请记住, 的变体各find不相同。他们的行为也可能不同。始终阅读友好手册 (RTFM)。


小智 12

通过使用以下命令,您可以枚举所有具有 SUID 权限的二进制文件。该工具的-perm -u=s标志可以解决问题find

find / -perm -u=s -type f 2>/dev/null
Run Code Online (Sandbox Code Playgroud)