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?
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?
Yanıtlar:
sudo
Grupta 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/group
aş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 getent
yerine grep
:
getent group sudo | cut -d: -f4
Bu komutlardan herhangi biri, sudo
grupta 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
: grep
Perl tarzı regexlerle eşleşiro
: grep
yalnızca eşleşen dizeyi yazdırır'^sudo.+:\K.*$'
: grep
tırnak işaretleri arasındaki regex eşleşmesini sağlarRegex # 1 dağılımı:
^
: satır başlangıcı.+
: bir veya daha fazla karakter\K
: önceki maçı sil.*
: sıfır veya daha fazla karakter$
: yolun sonuKomut # 2 dağılımı:
grep
: Bir dosyadaki regex ile eşleşen tüm satırları yazdırır.'^sudo.+:\K.*$'
: grep
tırnak işaretleri arasındaki regex eşleşmesini sağlarcut
: Dosyadaki her satırın yalnızca belirli bir bölümünü yazdırır-d:
: alan sınırlayıcı olarak cut
yorumlama yapar:
-f4
: cut
yalnızca dördüncü alanı yazdırırRegex # 2 dağılımı:
^
: satır başlangıcı.*
: sıfır veya daha fazla karakter$
: yolun sonugetent group sudo | cut -d: -f4
veya awk kullanın, ancak her iki durumda da grup ve şifrenin sınırlayıcılarla birlikte sabit biçimlerde olduğunu unutmayın.
getent group
hiç ihtiyacınız yok. getent group foo
gibi grep foo /etc/group
, ama daha yetenekli.
getent
, hesaplamalı nasıl grep
ve herhangi bir düşündüm getent
? Koşması daha getent
mı hafif ?
sudo
grubun ü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.
O belirtildiği gibi burada ben keşfetmeye simpliest yolu düşünün -l
& -U
araya seçenekleri, sadece tipi users
bu örneğin listeler: John
o zaman:
Kullanıcının sudo
erişimi varsa, sudo
sö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.
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 :)
"%domain admins@mycompany.intra" ALL=(ALL) ALL
o zaman çalışır. Bana çok zaman kazandırdın, çünkü bunun yerel olmayan kullanıcılar için de işe yaradığını bilmiyordum.
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 admin
Ubuntu’nun eski sürümlerinde) olmasıdır. Böylece komut olur:
getent group sudo
geten group
ve 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
)
sudo -l -U
Testi genişleterek, kullanabilecek getent passwd
kullanıcıları belirlemek için kullanabilirsiniz sudo
. Kullanma getent
, passwd
LDAP 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.
sudo
.
Ç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)
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
Komut:
cat /etc/group | grep sudo
Çıktı:
sudo:x:27:Tom,Stacy
Tom, Stacy, sudo ayrıcalıklarına sahip kullanıcılar.
cat
.
vagrant
Kullanıcının, sudo
içinde /etc/sudoers
ne de /etc/group
ne de bulunamadıkça bile kullanabileceği konusunda şaşkına döndüm getent
.
Çıkıyor sudo
da 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 sudo
erişime sahip olduğunu bilmiyor olabilirsiniz .
Bu tür bir sudo
erişim JoKeR'in kullandığı cevapla tespit edilebilir, sudo -l -U vagrant
ancak burada getent
veya hepsine dayanan diğer cevapların hiçbirinde tespit edilmez /etc/group
.