Comment rechercher tous les fichiers SUID / SGID?

11

Tous les howtos que je trouve sur le web indiquent:

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

Mais ce n'est pas vrai. Voir:

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

Question: Quelle est donc la vérité? Comment puis-je vraiment lister tous les fichiers SUID / SGID?

somelooser28533
la source
Uhm, alors pourquoi est-ce exactement "faux"? Vous avez fait R ead T il F riendly M anuel, non? Les bits d'autorisation du fichier sont exactement en mode (octal ou symbolique).
0xC0000022L
** test ** est un fichier. Recherchez des recherches dans les répertoires. Vous devez donc utiliser find dans le répertoire où réside test.
Nils
1
@Nils: faux. find(GNU find to be exact) prendra les répertoires et les fichiers de la même façon. Il / elle manque simplement le point de l' -perminterrupteur. La lecture du manuel serait utile.
0xC0000022L
@ 0xC0000022L Intéressant. Ma page de manuel linux sur CentOS 5 me dit qu'elle ne prendra que les répertoires. Y a-t-il beaucoup de sens à l'exécuter sur un fichier?
Nils
@Nils: non, il n'y a pas de sens particulier à le faire. Mais cela ne vous empêchera pas de cette folie. Quoi qu'il en soit, à première vue, je pensais aussi que c'était le problème. Hélas, ce n'est pas pour cette question. Vous pouvez essayer en vérifiant certains bits sur un fichier comme celui-ci find $FILE -perm /7777pour voir si findcela le fait ou l'empêche.
0xC0000022L le

Réponses:

14

Si vous souhaitez tester l' un des bits, utilisez /. C'est à dire pour votre cas d'utilisation:

find "$DIRECTORY" -perm /4000

et:

find "$DIRECTORY" -perm /2000

ou combiné:

find "$DIRECTORY" -perm /6000

Vous pouvez utiliser à la fois des dossiers et des fichiers comme argument pour GNU find.

Une autre approche, plus lisible de l'OMI, utilise les raccourcis mnémoniques. C'est à dire:

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

Caveat emptor

Gardez à l'esprit que les variantes findvarient. Ils peuvent également se comporter différemment. Lisez toujours le manuel convivial (RTFM).

0xC0000022L
la source
8

En utilisant la commande suivante, vous pouvez énumérer tous les fichiers binaires disposant de l'autorisation SUID. Le -perm -u=sdrapeau de l' findoutil fait l'affaire:

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