Bagaimana cara mendaftar semua pengguna dengan root?

35

Pada kotak linux, bagaimana cara mendaftar semua pengguna yang memiliki hak root (dan bahkan lebih baik, semua pengguna secara umum bersama dengan apakah mereka memiliki root atau tidak)?

Eric
sumber
1
Bisakah Anda lebih spesifik dengan apa yang Anda maksud dengan "root privilege"? Maksud Anda pengguna dengan UID = 0?
Chris S
Pengguna memiliki kemampuan untuk melakukan apa saja. Pada dasarnya - Saya perlu membuat daftar pengguna bersama dengan grup yang menjadi anggotanya jika memungkinkan.
Eric
2
Jika saya tahu di mana komputer Anda berada, saya bisa berjalan dan menarik kabel listrik. Itu akan memenuhi syarat sebagai "melakukan apa saja" yang berarti saya ada di daftar Anda. Rafiq telah mendaftarkan tiga hal paling umum, tetapi mungkin ada lebih banyak dan kami tahu tentang sistem Anda atau bagaimana pengaturannya.
Chris S

Jawaban:

42

Jangan lupa untuk mengubah kata sandi root. Jika ada pengguna yang memiliki UID 0 selain root, mereka seharusnya tidak. Ide buruk. Untuk memeriksa:

grep 'x:0:' /etc/passwd

Sekali lagi, Anda tidak harus melakukan ini tetapi untuk memeriksa apakah pengguna adalah anggota dari grup root:

grep root /etc/group

Untuk melihat apakah ada yang bisa menjalankan perintah sebagai root, periksa sudoers:

cat /etc/sudoers

Untuk memeriksa bit SUID, yang memungkinkan program dijalankan dengan hak akses root:

find / -perm -04000

Warner
sumber
Sebenarnya, yang pertama hanya berfungsi jika file kata sandi bayangan ada di pengguna. Saya setuju bahwa hampir selalu demikian, akhir-akhir ini, tetapi untuk berjaga-jaga, saya melakukan pekerjaan perl cepat yang secara eksplisit memeriksa bidang 3.
MadHatter mendukung Monica
4
Ini adalah pola yang lebih baik dari yang pertama: grep '[^:]*:[^:]*:0:' /etc/passwd. +1 secara khusus untuk memeriksa SUID.
Dijeda sampai pemberitahuan lebih lanjut.
33

Untuk melihat siapa yang UID 0:

getent passwd 0

Untuk melihat siapa yang ada dalam kelompok root, wheel admdan admin:

getent group root wheel adm admin

Untuk membuat daftar semua pengguna dan grup mereka adalah anggota:

getent passwd | cut -d : -f 1 | xargs groups
Dijeda sampai pemberitahuan lebih lanjut.
sumber
9
Tidak seperti semua jawaban lain yang salah bergantung pada file / etc / passwd, yang ini, menggunakan getent passwdsebaliknya, sebenarnya benar. Jangan lupa untuk memeriksa / etc / sudoers.
mivk
Terima kasih untuk ini. Jauh lebih jelas. Bagi saya ini adalah jawaban yang diterima.
Fiddy Bux
6

Root murni adalah id pengguna "0".

Semua pengguna dalam sistem berada di file / etc / passwd:

less /etc/passwd

Mereka yang root memiliki "0" sebagai id pengguna, yang merupakan kolom ke-3. Yang dengan "0" sebagai grup (kolom ke-4) mungkin juga memiliki beberapa hak root.

Selanjutnya, Anda akan ingin melihat grup, dan melihat siapa yang merupakan anggota tambahan dari grup "root" atau "wheel" atau "admin":

less /etc/group

Pengguna yang terdaftar dalam grup tersebut dapat memiliki beberapa hak akses root, terutama melalui perintah "sudo".

Hal terakhir yang ingin Anda periksa adalah konfigurasi "sudo" dan lihat siapa yang terdaftar memiliki otorisasi untuk menjalankan perintah ini. File ini sendiri didokumentasikan dengan baik sehingga saya tidak akan mereproduksi di sini:

less /etc/sudoers

Itu mencakup area utama yang bisa memiliki akses root.

Rafiq Maniar
sumber
Lihat juga serverfault.com/questions/205598/... untuk beberapa tempat lagi di mana hak-hak eskalasi hak istimewa dapat diberikan. (Yaitu, consolehelperdan PackageKit.)
mattdm
2
Semua pengguna pasti TIDAK dijamin berada di / etc / passwd. Mereka mungkin di LDAP, misalnya. Tetapi getent passwdharus mencantumkan semua pengguna sistem (termasuk root), dalam format passwd, terlepas dari basis data di mana mereka didefinisikan.
mivk
3

Untuk mencetak semua pengguna

perl -n -e '@user = split /:/ ; print "@user[0]\n";' < /etc/passwd

Untuk mencetak hanya pengguna dengan UID 0, seperti yang dikatakan orang lain, pengguna dengan hak akses root implisit:

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd
MadHatter mendukung Monica
sumber
Itu bagus, tapi perhatikan batasannya (saya yakin MadHatter sudah mengetahui hal ini) - ini tidak akan memeriksa grup dan tidak akan memeriksa sudoer. Itu hanya akan memeriksa, seperti katanya, root implisit.
Rafiq Maniar
2
Jangan parse / etc / passwd. Pengguna dapat didefinisikan di tempat lain. Gunakan getent passwdsebagai gantinya. Untuk contoh "cetak semua pengguna" pertama Anda, coba ini:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk
2

Untuk daftar cepat semua pengguna, coba tekan tab dua kali (untuk melengkapi otomatis) setelah mengetik passwdperintah yang diikuti oleh spasi. Ini berfungsi dengan superintah juga.

Harus dilakukan sebagai pengguna root-privilege.

Emeraldo
sumber
Apakah ini fitur khusus zsh? Bash menyarankan hanya file di openSUSE.
jgillich
Diuji pada Debian (Squeeze) dalam bash. Saya tidak percaya ada orang yang secara resmi akan mendukung ini, tapi itu jalan pintas.
Emeraldo
Pembaruan: Ini tidak lagi berfungsi di El Capitan. Itu mungkin diperbaiki karena alasan keamanan.
Emeraldo
0

Itu mengganggu saya bahwa tidak ada jawaban satu-baris ... Jika Anda ingin mendaftar semua akun UID 0 (root) gunakan yang berikut ini:

cat /etc/passwd | cut -f1,3,4 -d":" | grep"0:0" | cut -f1 -d":" | awk '{print $1}'

Terbaik,

Boschko
sumber