Jak wyszukać wszystkie pliki SUID / SGID?

11

Wszystkie porady, które znajduję w sieci, brzmią:

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

Ale to nie jest prawda. Widzieć:

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

Pytanie: Więc jaka jest prawda? Jak mogę naprawdę wyświetlić wszystkie pliki SUID / SGID?

somelooser28533
źródło
Uhm, więc dlaczego dokładnie to „nieprawda”? Zrobiłeś R Wifi.Prowadzić firmy T on F riendly M Wynagradzanych, prawda? Bity uprawnień pliku są dokładnie w trybie (ósemkowym lub symbolicznym).
0xC0000022L
** test ** to plik. Znajdź wyszukiwania w katalogach. Dlatego powinieneś użyć find w katalogu, w którym znajduje się test.
Nils,
1
@Nils: nieprawda. find(GNU znajdzie się dokładnie) weźmie katalogi i pliki podobnie. Po prostu brakuje mu punktu -permzmiany. Pomocne byłoby przeczytanie instrukcji.
0xC0000022L
@ 0xC0000022L Interesujące. Moja strona linux na CentOS 5 mówi mi, że zajmie tylko katalogi. Czy uruchomienie pliku na pliku ma sens?
Nils,
@Nils: nie, nie ma w tym szczególnego sensu. Ale nie powstrzymasz się od tego szaleństwa. Niezależnie od tego, na pierwszy rzut oka również myślałem, że to jest problem. Niestety, to nie dotyczy tego pytania. Możesz spróbować sprawdzić niektóre bity w pliku takim jak ten, find $FILE -perm /7777aby zobaczyć, czy findto robi, czy zapobiega.
0xC0000022L

Odpowiedzi:

14

Jeśli chcesz przetestować dowolny bit, użyj /. Tj. Dla twojego przypadku użycia:

find "$DIRECTORY" -perm /4000

i:

find "$DIRECTORY" -perm /2000

lub połączone:

find "$DIRECTORY" -perm /6000

Możesz użyć zarówno folderów, jak i plików jako argumentu dla GNU find.

Innym, lepiej czytelnym, podejściem IMO jest stosowanie skrótów mnemonicznych. To znaczy:

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

Zastrzegający emptor

Pamiętaj, że warianty findróżnią się. Mogą również zachowywać się inaczej. Zawsze czytaj przyjazną instrukcję obsługi (RTFM).

0xC0000022L
źródło
8

Za pomocą następującego polecenia można wyliczyć wszystkie pliki binarne posiadające uprawnienia SUID. -perm -u=sFlaga findnarzędzia załatwia sprawę:

find / -perm -u=s -type f 2>/dev/null
Boschko
źródło