Como procurar todos os arquivos SUID / SGID?

11

Todos os howtos que encontro na web declaram:

Find all SUID files:
find / -perm -4000 -print
Find all SGID files:
find / -perm -2000 -print 

Mas isso não é verdade. Vejo:

$ 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
$

Pergunta: Então, qual é a verdade? Como posso realmente listar todos os arquivos SUID / SGID?

somelooser28533
fonte
Uhm, então por que exatamente isso "não é verdade"? Você fez R ead T ele F riendly M anual, certo? Os bits de permissão do arquivo são exatamente o modo (octal ou simbólico).
0xC0000022L
** teste ** é um arquivo. Encontre pesquisas nos diretórios. Portanto, você deve usar o find no diretório em que o teste reside.
Nils
1
@ Nils: falso. find(O GNU acha que é exato) terá diretórios e arquivos. Ele / ela simplesmente perde o objetivo do -perminterruptor. Ler o manual ajudaria.
0xC0000022L
@ 0xC0000022L Interessante. Minha página de manual do Linux no CentOS 5 diz que apenas serão necessários diretórios. Existe muito sentido em executá-lo em um arquivo?
Nils
@ Nils: não, não há um sentido particular em fazê-lo. Mas você não vai impedir essa loucura. Independentemente disso, à primeira vista, também pensei que esse fosse o problema. Infelizmente, não é para esta pergunta. Você pode tentar verificar alguns bits em um arquivo como este find $FILE -perm /7777para ver se o findfaz ou o impede.
0xC0000022L

Respostas:

14

Se você deseja testar algum dos bits, use /. Ou seja, para o seu caso de uso:

find "$DIRECTORY" -perm /4000

e:

find "$DIRECTORY" -perm /2000

ou combinado:

find "$DIRECTORY" -perm /6000

Você pode usar pastas e arquivos como argumento para o GNU find.

Outra abordagem, mais legível pela IMO, é usar os atalhos mnemônicos. Ou seja:

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

Advertência emptor

Lembre-se de que as variantes de findvariam. Eles também podem se comportar de maneira diferente. Leia sempre o manual amigável (RTFM).

0xC0000022L
fonte
7

Usando o comando a seguir, você pode enumerar todos os binários com permissão SUID. A -perm -u=sbandeira da findferramenta faz o truque:

find / -perm -u=s -type f 2>/dev/null
Boschko
fonte