Wie suche ich nach allen SUID / SGID-Dateien?

11

Alle Howtos, die ich im Web finde, besagen:

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

Das stimmt aber nicht. Sehen:

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

Frage: Was ist die Wahrheit? Wie kann ich wirklich alle SUID / SGID-Dateien auflisten?

somelooser28533
quelle
Ähm, warum genau ist das "nicht wahr"? Du hast R ead T er F riendly M anual, nicht wahr? Die Berechtigungsbits der Datei sind genau im Modus (oktal oder symbolisch).
0xC0000022L
** Test ** ist eine Datei. Suchen Sie nach Verzeichnissen. Verwenden Sie also find in dem Verzeichnis, in dem sich der Test befindet.
Nils
1
@Nils: falsch. find(GNU findet genau) nimmt Verzeichnisse und Dateien gleichermaßen. Er / sie verfehlt einfach den Punkt des -permSchalters. Das Lesen des Handbuchs würde helfen.
0xC0000022L
@ 0xC0000022L Interessant. Meine Linux-Manpage unter CentOS 5 sagt mir, dass nur Verzeichnisse benötigt werden. Ist es sinnvoll, es in einer Datei auszuführen?
Nils
@Nils: Nein, es macht keinen besonderen Sinn, das zu tun. Aber du wirst diese Torheit nicht verhindern. Unabhängig davon dachte ich auf den ersten Blick auch, dass dies das Problem ist. Leider ist es nicht für diese Frage. Sie können versuchen, indem Sie in einer solchen Datei find $FILE -perm /7777nach Bits suchen , um festzustellen, ob Sie finddies tun oder verhindern.
0xC0000022L

Antworten:

14

Wenn Sie testen wollen , jede der Bits verwenden /. Dh für Ihren Anwendungsfall:

find "$DIRECTORY" -perm /4000

und:

find "$DIRECTORY" -perm /2000

oder kombiniert:

find "$DIRECTORY" -perm /6000

Sie können sowohl Ordner als auch Dateien als Argument für GNU verwenden find.

Ein anderer, IMO besser lesbarer Ansatz ist die Verwendung der mnemonischen Verknüpfungen. Dh:

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

Vorbehalt Emptor

Beachten Sie, dass die Varianten von findvariieren. Sie können sich auch anders verhalten. Lesen Sie immer das freundliche Handbuch (RTFM).

0xC0000022L
quelle
7

Mit dem folgenden Befehl können Sie alle Binärdateien mit SUID-Berechtigung auflisten. Die -perm -u=sFlagge des findWerkzeugs macht den Trick:

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