Tüm süper kullanıcıları nasıl listeleyebilirim?


86

Sudo gibi kök ayrıcalıklara sahip tüm kullanıcıları listelemek için komut istiyorum.

Sanırım daha iyi bir kullanıcıyım. Diğer tüm sudoer kullanıcılarını nasıl bilebilirim?




@JoKeR güzel ve zor
Maythux

1
Sadece bu Not Joker ve muru 'ın cevapları doğru, sadece kullanıcı / grup conf dosyalarını ayrıştırma kimin sizi vermez sudoizni ve bir kullanıcı ise kim .... henüz sudogruptan ama sudoersdosya şey için söz vardır sudogrubunda, sonra?
heemayl

Yanıtlar:


81

sudoGrupta listelenen sudo'ları listelemeniz gerekiyorsa , bunu yapmanın en iyi yolunun bu komutu çalıştırmak olduğunu ( bu cevaptaki diğer komutlardan herhangi birine göre hesaplamalı olarak daha hafif olması gerektiğini ) düşünüyorum:

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

Ayrıca, muru tarafından yapılan yorumlarda da belirtildiği gibi, girişlerin formatı /etc/groupaşağıdakiler tarafından kolayca yönetilebilir cut:

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

Ayrıca yine Muru yorumlarına önerildiği üzere, birini kullanabilirsiniz getentyerine grep:

getent group sudo | cut -d: -f4

Bu komutlardan herhangi biri, sudogrupta listelenen tüm kullanıcıları /etc/group(varsa) yazdıracaktır .

Komut # 1 dağılımı:

  • grep: Bir dosyadaki regex ile eşleşen tüm satırları yazdırır.
  • -P: grepPerl tarzı regexlerle eşleşir
  • o: grepyalnızca eşleşen dizeyi yazdırır
  • '^sudo.+:\K.*$': greptırnak işaretleri arasındaki regex eşleşmesini sağlar

Regex # 1 dağılımı:

  • Listelenmeyen herhangi bir karakter veya karakter grubu, karakter veya karakter grubunun kendisi ile eşleşiyor
  • ^: satır başlangıcı
  • .+: bir veya daha fazla karakter
  • \K: önceki maçı sil
  • .*: sıfır veya daha fazla karakter
  • $: yolun sonu

Komut # 2 dağılımı:

  • grep: Bir dosyadaki regex ile eşleşen tüm satırları yazdırır.
  • '^sudo.+:\K.*$': greptırnak işaretleri arasındaki regex eşleşmesini sağlar
  • cut: Dosyadaki her satırın yalnızca belirli bir bölümünü yazdırır
  • -d:: alan sınırlayıcı olarak cutyorumlama yapar:
  • -f4: cutyalnızca dördüncü alanı yazdırır

Regex # 2 dağılımı:

  • Listelenmeyen herhangi bir karakter veya karakter grubu, karakter veya karakter grubunun kendisi ile eşleşiyor
  • ^: satır başlangıcı
  • .*: sıfır veya daha fazla karakter
  • $: yolun sonu

5
-1: Bu, sudoer'lara veya LDAP gibi harici kaynaklara eklenmiş diğer kullanıcıları veya grupları yakalamaz ve çocuk bunu yapmanın çirkin bir yoludur. getent group sudo | cut -d: -f4veya awk kullanın, ancak her iki durumda da grup ve şifrenin sınırlayıcılarla birlikte sabit biçimlerde olduğunu unutmayın.
muru

@muru Haklısın, cevabımı güncelledim
kos

@kos Ayrıca gerçekten kullanmanız gerektiğine dikkat edin - grep'e getent grouphiç ihtiyacınız yok. getent group foogibi grep foo /etc/group, ama daha yetenekli.
muru

@muru Ben hiç bilmiyordum getent, hesaplamalı nasıl grepve herhangi bir düşündüm getent? Koşması daha getentmı hafif ?
kos

1
Bu cevap tüm sudo'ların sudogrubun üyesi olduğunu varsayar . Bazı unix'ler gibi başka gruplar da vardır wheel. @Muru tarafından verilen cevap, hangi gruplarda olursa olsun tüm sudo'ları içerecektir.
Simon Woodside

30

O belirtildiği gibi burada ben keşfetmeye simpliest yolu düşünün -l& -Uaraya seçenekleri, sadece tipi usersbu örneğin listeler: Johno zaman:

Kullanıcının sudoerişimi varsa, sudosöz konusu kullanıcının erişim düzeyini yazdırır :

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

Kullanıcı sudo erişimine sahip değilse, kullanıcının localhost'ta çalışmasına izin verilmediğini yazdıracaktır sudo:

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

2
Sen tüm normal kullanıcılar üzerinden döngü olabilir ve kullanarak bunlar hakkında ayrıntılı bilgi dönmek gibi bir şey : for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU "$u" ; done. hızlı kesmek garantili hiçbir şey :)
Wilf,

Bu aynı zamanda aktif bir dizin kurulumunda da çalışır. Örneğin, bazı özel gruplardan bir kullanıcı seçebilir ve kullanıcıyı kontrol edebilirsiniz. AD grubunu doğru bir şekilde eklediyseniz, "%domain admins@mycompany.intra" ALL=(ALL) ALLo zaman çalışır. Bana çok zaman kazandırdın, çünkü bunun yerel olmayan kullanıcılar için de işe yaradığını bilmiyordum.
AdamKalisz

14

Daha önce de belirtildiği gibi, cevabı Unix ve Linux Stack Exchange'de bulabilirsiniz :

Bu, "saml" kullanıcısının, tekerlek grubunun bir üyesi olduğunu gösterir.

$ getent group wheel
wheel:x:10:saml

Tek fark Ubuntu’daki grubun değil wheel, sudo(veya adminUbuntu’nun eski sürümlerinde) olmasıdır. Böylece komut olur:

getent group sudo

Bu sayılar ne anlama geliyor? Yaptım geten groupve birçok farklı sayı gördüm. Asıl sorum şu, bir kullanıcının bir sistem kullanıcısı olup olmadığını öğrenmek (birlikte yaratılmış useradd -r)
Shayan

9

sudo -l -UTesti genişleterek, kullanabilecek getent passwdkullanıcıları belirlemek için kullanabilirsiniz sudo. Kullanma getent, passwdLDAP kullanıcıları gibi dosyada bulunmayan kullanıcılara erişmemize olanak sağlar:

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

sudo -U faydalanabileceğimiz sıfır olmayan bir çıkış değeri döndürmez, bu nedenle çıktıyı greplemede azalırız.


Bu en iyi cevap çünkü bir grup olduğunu varsaymıyor sudo.
Simon Woodside

3

Çoğu Unix benzeri sistemde, sudo komutu ve bir sudo yapılandırma dosyası vardır; root olarak visudo çalıştıran:

:~$ sudo bash

veya

:~$ su

:~# visudo

Bir yöneticinin sudo komutunu kullanabilecek grupların imtiyazlarını denetlemesine ve değiştirmesine izin verecektir.

Debian tabanlı Unix benzeri sistemlerde, Ubuntu gibi, 4 ve 27 numaralı gruplar genellikle sudo ayrıcalıklarına erişim haklarına sahipler.

Grup 4 yönetici grubu (adm) ve grup 27 ise sudo gid'dir.

Bu gruplara hangi kullanıcıların atandığını görmek için aşağıda gösterilen / etc / group dosyasına bakın:

:~$ cat /etc/group

Ubuntu'da (ancak Redhat tabanlı, Oracle Solaris / Solaris tabanlı veya BSD tabanlı sistemlerde değil) bir örnek çıktı şöyle olur:

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

Anlatabileceğimiz gibi, operatörünüz sistemin yöneticisi ve grup 4 (adm) üyesidir. Ancak kullanıcı ve benim kardeşim hem grup 27'nin üyeleridir, bu grup sudo gid (grup kimliği) sayısıdır. Böylece kardeşim ayrıca kök ayrıcalıklara da sahip olabilir (süper kullanıcı).

Fedora ve Slackware gibi birçok linux sistemi, gid = 10 tekerlek grubunu içermektedir. Sudo komutu uygulandığında yönetici haklarına izin verilir. BSD tabanlı sistemlerde (örneğin FreeBSD), kök kullanıcı gid 0 olan tekerlek grubunun bir üyesidir.

Ayrıca, id komutunu kullanarak herhangi bir kullanıcı bilinen başka bir kullanıcının grup bilgisini sistemde bulabilir.

Örneğin:

:~$ id mybrother

Örnek çıktı

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

Seni oylamak için özel olarak giriş yaptım. Mükemmel açıklama :)
Vidor Vistrom

1

Bu komut, sudo haklarına sahip kullanıcıların bir listesini döndürür:

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

Çıktı (örn.):

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

Yalnızca görüntülenecek kullanıcı adı ise, bu komut:

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

1
sudoerlardan daha fazla kullanıcı gösterir. Bazı değişikliklere ihtiyacı var
Maythux

@Yeni Kullanıcı Daha iyi mi?
AB

Çok daha iyi. Gd çalışmaları
Maythux


0

vagrantKullanıcının, sudoiçinde /etc/sudoersne de /etc/groupne de bulunamadıkça bile kullanabileceği konusunda şaşkına döndüm getent.

Çıkıyor sudoda altındaki tüm dosyalardan girdileri okur/etc/sudoers.d/ . Dolayısıyla, bu dizine bakmadıysanız, kaç kullanıcının gerçekte sudoerişime sahip olduğunu bilmiyor olabilirsiniz .

Bu tür bir sudoerişim JoKeR'in kullandığı cevapla tespit edilebilir, sudo -l -U vagrantancak burada getentveya hepsine dayanan diğer cevapların hiçbirinde tespit edilmez /etc/group.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.