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 sudo
grupie, 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/group
można łatwo obsłużyć cut
:
grep '^sudo:.*$' /etc/group | cut -d: -f4
Również ponownie, zgodnie z sugestiami Muru, można użyć getent
zamiast grep
:
getent group sudo | cut -d: -f4
Każde z tych poleceń spowoduje wydrukowanie wszystkich użytkowników wymienionych w sudo
grupie w /etc/group
(jeśli są).
Podział polecenia nr 1:
grep
: Drukuje wszystkie wiersze pasujące do wyrażenia regularnego w pliku-P
: grep
dopasowuje wyrażenia regularne w stylu Perlao
: grep
drukuje tylko dopasowany ciąg'^sudo.+:\K.*$'
: powoduje grep
dopasowanie 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 grep
dopasowanie wyrażenia regularnego między cudzysłowamicut
: Drukuje tylko określoną sekcję każdego wiersza w pliku-d:
: cut
interpretuje :
jako ogranicznik pola-f4
: sprawia, że cut
wypisuje tylko czwarte polePodział Regex # 2:
^
: początek linii.*
: zero lub więcej znaków$
: koniec liniigetent group sudo | cut -d: -f4
lub 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 foo
jest jak grep foo /etc/group
, ale bardziej zdolny.
getent
, zastanawiałem się, jak grep
i getent
porównać obliczeniowo? Czy bieganie byłoby lżejsze getent
?
sudo
grupy. 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 sudo
dostęp, wydrukuje poziom sudo
dostę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ć sudo
na 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) ALL
to 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 admin
w starszych wersjach Ubuntu). Zatem polecenie staje się:
getent group sudo
geten group
i 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 -U
test, można użyć getent passwd
do określenia użytkowników, którzy mogą korzystać sudo
. Użycie getent
pozwala nam uzyskać dostęp do użytkowników, którzy mogą nie być obecni w passwd
pliku, 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 vagrant
użytkownik może korzystać sudo
nawet bez wzmianki w, /etc/sudoers
ani w, /etc/group
ani w znalezieniu getent
.
Okazuje się, że sudo
czyta 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 sudo
dostęp.
Ten rodzaj sudo
dostępu można wykryć za pomocą odpowiedzi JoKeR, sudo -l -U vagrant
ale nie jest on wykrywany przez żadną z innych odpowiedzi tutaj, które opierają się na którymkolwiek getent
lub /etc/group
.