Chcę, aby polecenie wyświetlało listę wszystkich użytkowników, którzy mają uprawnienia roota, np. Sudo?
Załóżmy, że jestem użytkownikiem sudoer. Jak mogę poznać wszystkich innych użytkowników sudoer?
Chcę, aby polecenie wyświetlało listę wszystkich użytkowników, którzy mają uprawnienia roota, np. Sudo?
Załóżmy, że jestem użytkownikiem sudoer. Jak mogę poznać wszystkich innych użytkowników sudoer?
Odpowiedzi:
Jeśli potrzebujesz tylko wymienić sudoerów wymienionych w sudogrupie, myślę, że najlepszym sposobem na to byłoby uruchomienie tego polecenia (które powinno być lżejsze obliczeniowo niż jakiekolwiek inne polecenie w tej odpowiedzi):
grep -Po '^sudo.+:\K.*$' /etc/group
Również zgodnie z sugestiami muru, format wpisów /etc/groupmożna łatwo obsłużyć cut:
grep '^sudo:.*$' /etc/group | cut -d: -f4
Również ponownie, zgodnie z sugestiami Muru, można użyć getentzamiast grep:
getent group sudo | cut -d: -f4
Każde z tych poleceń spowoduje wydrukowanie wszystkich użytkowników wymienionych w sudogrupie w /etc/group(jeśli są).
Podział polecenia nr 1:
grep: Drukuje wszystkie wiersze pasujące do wyrażenia regularnego w pliku-P: grepdopasowuje wyrażenia regularne w stylu Perlao: grepdrukuje tylko dopasowany ciąg'^sudo.+:\K.*$': powoduje grepdopasowanie wyrażenia regularnego między cudzysłowamiPodział Regeksu nr 1:
^: początek linii.+: jeden lub więcej znaków\K: odrzuć poprzedni mecz.*: zero lub więcej znaków$: koniec liniiPodział polecenia nr 2:
grep: Drukuje wszystkie wiersze pasujące do wyrażenia regularnego w pliku'^sudo.+:\K.*$': powoduje grepdopasowanie wyrażenia regularnego między cudzysłowamicut: Drukuje tylko określoną sekcję każdego wiersza w pliku-d:: cutinterpretuje :jako ogranicznik pola-f4: sprawia, że cutwypisuje tylko czwarte polePodział Regex # 2:
^: początek linii.*: zero lub więcej znaków$: koniec liniigetent group sudo | cut -d: -f4lub użyj awk, ale pamiętaj, że grupa i hasło mają ustalone formaty z ogranicznikami.
getent group- w ogóle nie potrzebujesz grep. getent group foojest jak grep foo /etc/group, ale bardziej zdolny.
getent, zastanawiałem się, jak grepi getentporównać obliczeniowo? Czy bieganie byłoby lżejsze getent?
sudogrupy. Niektóre unixy mają inne grupy, takie jak wheel. Odpowiedź @muru obejmie wszystkich sudoersów, bez względu na grupy, w których są.
Jak stwierdzono tutaj, uważam najprostszy sposób na odkrycie razem z opcjami -l& -U, po prostu wpisz, usersże wyświetli się lista np . John:
Jeśli użytkownik ma sudodostęp, wydrukuje poziom sudodostępu dla tego konkretnego użytkownika:
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
Jeśli użytkownik nie ma dostępu sudo, wydrukuje, że użytkownik nie może uruchomić sudona localhost:
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. szybki hack nic nie gwarantuje :)
"%domain admins@mycompany.intra" ALL=(ALL) ALLto działa. Zaoszczędziłeś mi dużo czasu, ponieważ nie wiedziałem, że działa to również dla nielokalnych użytkowników.
Jak już wspomniano, odpowiedź można znaleźć na Unix & Linux Stack Exchange :
To pokazuje, że użytkownik „saml” jest członkiem grupy kół.
$ getent group wheel wheel:x:10:saml
Jedyną różnicą jest to, że grupa w Ubuntu nie jest wheel, ale sudo(lub adminw starszych wersjach Ubuntu). Zatem polecenie staje się:
getent group sudo
geten groupi widzę wiele różnych liczb. Moje oryginalne pytanie brzmi: jak dowiedzieć się, czy użytkownik jest użytkownikiem systemu (utworzonym za pomocą useradd -r)
Rozwijając sudo -l -Utest, można użyć getent passwddo określenia użytkowników, którzy mogą korzystać sudo. Użycie getentpozwala nam uzyskać dostęp do użytkowników, którzy mogą nie być obecni w passwdpliku, takich jak użytkownicy LDAP:
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U nie zwraca niezerowej wartości wyjściowej, z której moglibyśmy skorzystać, więc jesteśmy zredukowani do grepowania wyjścia.
sudo.
W większości systemów uniksowych, które mają polecenie sudo i mają plik konfiguracyjny sudo; uruchamianie visudo jako root:
:~$ sudo bash
lub
:~$ su
:~# visudo
pozwoli administratorowi na sprawdzenie i zmianę uprawnień grup, które mogą korzystać z polecenia sudo.
W systemach uniksopodobnych opartych na Debianie, takich jak Ubuntu, grupy 4 i 27 zazwyczaj mają prawa dostępu do uprawnień sudo.
Grupa 4 to grupa administratorów (adm), a grupa 27 to sudo gid.
Aby zobaczyć, którzy użytkownicy są obecnie przypisani do tych grup, cat / etc / group plik, jak pokazano poniżej:
:~$ cat /etc/group
Przykładowe dane wyjściowe w systemie Ubuntu (ale nie w systemach Redhat, Oracle Solaris / Solaris lub BSD):
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
Jak możemy stwierdzić, użytkownik jest administratorem systemu i członkiem grupy 4 (adm). Ale twój użytkownik i mój brat są członkami grupy 27, która jest numerem gid (identyfikacja grupy) sudo grupy. Więc mój brat może również uzyskać uprawnienia roota (superużytkownik).
Wiele systemów Linux, takich jak Fedora i Slackware, zawiera grupę kół gid = 10. Który zezwala na uprawnienia administratora po zastosowaniu polecenia sudo. W systemach opartych na BSD (np. FreeBSD) użytkownik root jest członkiem grupy kół, która ma wartość gid 0.
Również za pomocą komendy id każdy użytkownik może znaleźć w systemie informacje o grupie innego znanego użytkownika.
Na przykład:
:~$ id mybrother
Próbka wyjściowa
uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
To polecenie zwraca listę użytkowników z uprawnieniami sudo:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd
Dane wyjściowe to (np.):
<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker
Jeśli wyświetlana jest tylko nazwa użytkownika, to polecenie:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd
Komenda:
cat /etc/group | grep sudo
Wynik:
sudo:x:27:Tom,Stacy
Tom, Stacy to użytkownicy z uprawnieniami sudo.
cat .
Byłem zaskoczony tym, w jaki sposób vagrantużytkownik może korzystać sudonawet bez wzmianki w, /etc/sudoersani w, /etc/groupani w znalezieniu getent.
Okazuje się, że sudoczyta również wpisy ze wszystkich plików pod/etc/sudoers.d/ . Jeśli więc nie przejrzałeś tego katalogu, możesz nie zdawać sobie sprawy, ilu użytkowników faktycznie ma sudodostęp.
Ten rodzaj sudodostępu można wykryć za pomocą odpowiedzi JoKeR, sudo -l -U vagrantale nie jest on wykrywany przez żadną z innych odpowiedzi tutaj, które opierają się na którymkolwiek getentlub /etc/group.