Bagaimana cara mencari semua file SUID / SGID?

11

Semua howtos yang saya temukan di status web:

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

Tapi itu tidak benar. Lihat:

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

Pertanyaan: Jadi apa kebenarannya? Bagaimana saya bisa membuat daftar semua file SUID / SGID?

somelooser28533
sumber
Uhm, jadi mengapa ini "tidak benar"? Anda melakukan R EAD T dia F riendly M lipat, kan? Bit izin file persis mode (oktal atau simbolis).
0xC0000022L
** test ** adalah file. Temukan pencarian di direktori. Jadi, Anda harus menggunakan find pada direktori tempat tes berada.
Nils
1
@Nils: tidak benar. find(GNU temukan tepatnya) akan mengambil direktori dan file yang sama. Dia hanya melewatkan titik -permsakelar. Membaca manual akan membantu.
0xC0000022L
@ 0xC0000022L Menarik. Linux-manpage saya di CentOS 5 memberitahu saya itu hanya akan mengambil direktori. Apakah ada banyak akal dalam menjalankannya pada file?
Nils
@Nils: nggak ada arti khusus dalam melakukannya. Tapi itu tidak akan Anda mencegah dari kebodohan itu. Bagaimanapun, pada pandangan pertama saya juga menganggap ini sebagai masalah. Sayangnya, ini bukan untuk pertanyaan ini. Anda dapat mencoba dengan memeriksa beberapa bit pada file seperti ini find $FILE -perm /7777untuk melihat apakah Anda findmelakukannya atau mencegahnya.
0xC0000022L

Jawaban:

14

Jika Anda ingin menguji bit apa pun , gunakan /. Yaitu untuk kasus penggunaan Anda:

find "$DIRECTORY" -perm /4000

dan:

find "$DIRECTORY" -perm /2000

atau digabungkan:

find "$DIRECTORY" -perm /6000

Anda dapat menggunakan folder dan file sebagai argumen untuk GNU find.

Lain, IMO lebih baik dibaca, pendekatan menggunakan pintas mnemonic. Yaitu:

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

Kaisar peringatan

Perlu diingat bahwa varian findbervariasi. Mereka juga mungkin berperilaku berbeda. Selalu baca manual ramah (RTFM).

0xC0000022L
sumber
8

Dengan menggunakan perintah berikut, Anda dapat menghitung semua binari yang memiliki izin SUID. The -perm -u=sbendera findalat melakukan trik:

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