我在网上找到的所有方法都说明:
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)