Pertanyaan Bagaimana saya bisa daftar semua pengguna super?


Saya ingin sebuah perintah untuk mendaftar semua pengguna yang memiliki hak akses root yaitu sudo?

Misalkan saya pengguna sudoer. Bagaimana saya bisa tahu semua pengguna sudoer lainnya?


57
2018-04-20 10:57


asal


Inilah jawabannya: unix.stackexchange.com/a/140974/107084 - A.B.
Saya menemukan yang satu ini bagus unix.stackexchange.com/questions/50785/… - JoKeR
@JoKeR bagus dan rumit - Maythux
Perhatikan itu saja Pelawak dan muruJawabannya benar, hanya parsing file conf pengguna / grup tidak memberi Anda yang memiliki sudo izin dan siapa yang belum .... jika ada pengguna sudo kelompok tetapi sudoers file tidak ada yang disebutkan sudo kelompok, lalu? - heemayl


Jawaban:


Jika Anda hanya perlu daftar sudoers yang terdaftar di sudo kelompok, saya pikir cara terbaik untuk melakukannya adalah dengan menjalankan perintah ini (yang mana harus menjadi lebih ringan secara komputasi daripada perintah lainnya dalam jawaban ini):

grep -Po '^sudo.+:\K.*$' /etc/group

Juga seperti yang disarankan dalam komentar oleh muru, format entri di /etc/group dapat dengan mudah ditangani oleh cut:

grep '^sudo:.*$' /etc/group | cut -d: -f4

Juga lagi seperti yang disarankan dalam komentar oleh muru, yang bisa digunakan getent di tempat grep:

getent group sudo | cut -d: -f4

Semua perintah ini akan mencetak semua pengguna yang terdaftar di sudo grup dalam /etc/group (jika ada).

Rincian Command # 1:

  • grep: Mencetak semua garis yang cocok dengan regex dalam file
  • -P: merek grep mencocokkan regexes Perl-style
  • o: merek grep hanya cetak string yang cocok
  • '^sudo.+:\K.*$': merek grep cocok dengan regex di antara tanda kutip

Rincian Regex # 1:

  • Karakter atau grup karakter apa pun yang tidak terdaftar cocok dengan karakter atau grup karakter itu sendiri
  • ^: awal baris
  • .+: satu atau lebih karakter
  • \K: buang pertandingan sebelumnya
  • .*: nol atau lebih banyak karakter
  • $: akhir baris

Rincian Command # 2:

  • grep: Mencetak semua garis yang cocok dengan regex dalam file
  • '^sudo.+:\K.*$': merek grep cocok dengan regex di antara tanda kutip
  • cut: Mencetak hanya bagian tertentu dari setiap baris dalam file
  • -d:: merek cut menafsirkan : sebagai pemisah bidang
  • -f4: merek cut hanya cetak bidang keempat

Rincian Regex # 2:

  • Karakter atau grup karakter apa pun yang tidak terdaftar cocok dengan karakter atau grup karakter itu sendiri
  • ^: awal baris
  • .*: nol atau lebih banyak karakter
  • $: akhir baris

59
2018-04-20 11:57



-1: ini tidak akan menangkap pengguna atau grup lain yang mungkin telah ditambahkan ke sudoers, atau sumber eksternal seperti LDAP, dan anak laki-laki itu adalah cara yang buruk untuk melakukan hal ini. getent group sudo | cut -d: -f4, atau gunakan awk, tapi ingat cara itu grup dan passwd memiliki format tetap, dengan pembatas. - muru
@muru Anda benar, saya memperbarui jawaban saya - kos
@kos Juga perhatikan apa yang benar-benar harus Anda gunakan getent group - Anda tidak perlu grep sama sekali. getent group foo seperti grep foo /etc/group, tetapi lebih mampu. - muru
@muru saya tidak tahu getent sama sekali, setiap pemikiran tentang bagaimana grep dan getent bandingkan dengan komputasi? Apakah akan lebih ringan untuk dijalankan getent? - kos
Jawaban ini mengasumsikan bahwa semua sudoer adalah anggota dari sudo kelompok. Beberapa unix memiliki grup lain seperti wheel. Jawaban oleh @muru akan mencakup semua sudoer tidak peduli kelompok apa yang mereka masuki. - Simon Woodside


Seperti yang dinyatakan sini Saya menganggap cara paling sederhana untuk menemukannya -l & -U pilihan bersama, cukup ketik users itu akan daftar misalnya: John kemudian:

Jika pengguna memilikinya sudo akses, itu akan mencetak tingkat sudo akses untuk pengguna tertentu:

  sudo -l -U John
  User John may run the following commands on this host:
     (ALL : ALL) ALL

Jika pengguna tidak memiliki akses sudo, itu akan mencetak bahwa pengguna adalah tidak diizinkan untuk berlari sudo di localhost:

   sudo -l -U John
   User John is not allowed to run sudo on localhost.

25
2018-04-20 11:40



Anda dapat mengulang melalui semua pengguna normal dan mengembalikan detail yang mereka gunakan sesuatu seperti: for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU "$u" ; done. tidak ada peretasan cepat dijamin :) - Wilf
Ini juga berfungsi di pengaturan direktori aktif. Misalnya Anda dapat memilih pengguna dari beberapa grup khusus dan memeriksa pengguna. Jika Anda menambahkan grup AD dengan benar sesuatu seperti "%domain admins@mycompany.intra" ALL=(ALL) ALL maka itu berhasil. Anda menyelamatkan saya banyak waktu, karena saya tidak menyadari ini bekerja untuk pengguna non-lokal juga. - AdamKalisz


Seperti yang telah dinyatakan, jawabannya dapat ditemukan Unix & Linux Stack Exchange:

Ini menunjukkan bahwa pengguna "saml" adalah anggota grup wheel.

$ getent group wheel
wheel:x:10:saml

Satu-satunya perbedaan adalah grup di Ubuntu tidak wheel, tapi sudo (atau admin di versi Ubuntu yang lebih lama). Jadi perintahnya menjadi:

getent group sudo

10
2018-04-20 11:02





Memperluas pada sudo -l -U tes, yang bisa digunakan getent passwd untuk menentukan pengguna yang dapat menggunakan sudo. Menggunakan getent memungkinkan kami untuk mengakses pengguna yang mungkin tidak hadir di passwd file, seperti pengguna LDAP:

getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'

sudo -U tidak mengembalikan nilai keluar non-nol yang dapat kami manfaatkan, jadi kami dikurangi untuk meng-grepping output.


6
2018-04-20 13:26



Ini adalah jawaban terbaik karena tidak menganggap ada kelompok yang dipanggil sudo. - Simon Woodside


Perintah ini mengembalikan daftar pengguna dengan hak sudo:

awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd

Keluarannya adalah (mis.):

<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker

Jika hanya nama pengguna yang ditampilkan, maka perintah ini:

awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd

1
2018-04-20 11:12



itu menunjukkan lebih banyak pengguna daripada sudoers. Perlu beberapa modifikasi - Maythux
@NewUSer Apakah itu lebih baik? - A.B.
Jauh lebih baik. Pekerjaan Gd - Maythux
@NewUSer Terima kasih kembali. - A.B.


Pada kebanyakan sistem mirip Unix, yang memiliki perintah sudo, dan memiliki file konfigurasi sudo; menjalankan visudo sebagai root:

:~$ sudo bash

atau

:~$ su

:~# visudo

akan memungkinkan administrator untuk memeriksa dan mengubah hak istimewa grup yang dapat menggunakan perintah sudo.

Pada sistem berbasis Unix yang berbasis Debian, seperti Ubuntu, grup 4 dan 27 umumnya memiliki hak akses ke hak akses sudo.

Grup 4 adalah grup administrator (adm) dan grup 27 adalah sudo gid.

Untuk melihat apa yang saat ini ditetapkan pengguna untuk grup ini, kucing file / etc / group seperti yang ditunjukkan di bawah ini:

:~$ cat /etc/group

Contoh keluaran, pada Ubuntu (tetapi tidak berbasis Redhat, Oracle Solaris / Solaris based, atau sistem berbasis BSD) akan menghasilkan ini:

adm:x:4:youruser
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9: 
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:youruser,mybrother
floppy:x:25:
tape:x:26:
sudo:x:27:youruser,mybrother

Seperti yang bisa kami katakan, pengguna Anda adalah administrator sistem, dan anggota grup 4 (adm). Tetapi pengguna Anda dan saudara laki-lakiku keduanya anggota kelompok 27, yang merupakan nomor kelompok (kelompok identifikasi) dari kelompok sudo. Jadi saudara lelaki juga bisa mendapatkan hak akses root (super user).

Banyak sistem linux seperti Fedora dan Slackware, menggabungkan grup gid = 10. Yang memungkinkan hak administrator ketika perintah sudo diterapkan. Pada sistem berbasis BSD (misalnya, FreeBSD), pengguna root adalah anggota grup wheel yang gid 0.

Juga dengan menggunakan perintah id, setiap pengguna dapat menemukan informasi grup dari pengguna lain yang diketahui ke sistem.

Sebagai contoh:

:~$ id mybrother

Keluaran sampel

uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

0
2018-06-08 20:13