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


11

我在网络上找到的所有方法都指出:

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文件?


嗯,为什么这是“不正确的”呢?你做[R EAD 牛逼˚F riendly 中号 anual,对不对?文件的权限位完全是模式(八进制或符号)。
0xC0000022L

** test **是一个文件。查找目录搜索。因此,您应该在test所在的目录上使用find。
Nils

1
@Nils:不正确。find(确切地说,是GNU)将使用目录和文件。他/她只是错过了-perm切换的要点。阅读手册会有所帮助。
0xC0000022L

@ 0xC0000022L有趣。我在CentOS 5上的linux-manpage告诉我它将仅使用目录。在文件上运行它有很多意义吗?
Nils

@Nils:不,这样做没有特别的意义。但这不会阻止您的愚蠢。无论如何,乍一看我也认为这是问题所在。las,不是这个问题。您可以尝试检查此类文件中的某些位,find $FILE -perm /7777以查看是否find执行此操作或阻止执行此操作。
0xC0000022L

Answers:


14

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

find "$DIRECTORY" -perm /4000

和:

find "$DIRECTORY" -perm /2000

或合并:

find "$DIRECTORY" -perm /6000

您可以将文件夹和文件都用作GNU的参数find

IMO另一个更易读的方法是使用助记符快捷方式。即:

find "$DIRECTORY" -perm /u=s,g=s

买者自负

请记住,variant的变体find有所不同。它们的行为也可能有所不同。请务必阅读友好手册(RTFM)。


8

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

find / -perm -u=s -type f 2>/dev/null
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.