¿Cómo buscar todos los archivos SUID / SGID?

11

Todos los howtos que encuentro en la web dicen:

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

Pero eso no es verdad. Ver:

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

Pregunta: Entonces, ¿cuál es la verdad? ¿Cómo puedo realmente enumerar todos los archivos SUID / SGID?

somelooser28533
fuente
Uhm, entonces, ¿por qué exactamente esto "no es cierto"? Hiciste R ea T que F riendly M anual, ¿verdad? Los bits de permiso de archivo son exactamente modo (octal o simbólico).
0xC0000022L
** prueba ** es un archivo. Encuentra búsquedas en directorios. Por lo tanto, debe usar find en el directorio donde reside la prueba.
Nils
1
@Nils: falso. find(GNU encuentra que es exacto) tomará directorios y archivos por igual. Él / ella simplemente pierde el punto del -permcambio. Leer el manual ayudaría.
0xC0000022L
@ 0xC0000022L Interesante. Mi página de manual de Linux en CentOS 5 me dice que solo tomará directorios. ¿Tiene mucho sentido ejecutarlo en un archivo?
Nils
@Nils: no, no tiene sentido hacerlo. Pero no evitarás esa locura. De todos modos, a primera vista también pensé que este era el problema. Por desgracia, no es por esta pregunta. Puede intentarlo buscando algunos bits en un archivo como este find $FILE -perm /7777para ver si lo findhace o lo impide.
0xC0000022L

Respuestas:

14

Si desea probar cualquiera de los bits, use /. Es decir, para su caso de uso:

find "$DIRECTORY" -perm /4000

y:

find "$DIRECTORY" -perm /2000

o combinado:

find "$DIRECTORY" -perm /6000

Puede usar tanto carpetas como archivos como argumento para GNU find.

Otro enfoque, IMO mejor legible, es utilizar los accesos directos mnemónicos. Es decir:

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

Advertencia de emptor

Tenga en cuenta que las variantes de findvarían. También pueden comportarse de manera diferente. Siempre lea el manual amigable (RTFM).

0xC0000022L
fuente
8

Al usar el siguiente comando puede enumerar todos los archivos binarios que tienen permiso SUID. La -perm -u=sbandera de la findherramienta hace el truco:

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