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?
command-line
sudo
Maythux
źródło
źródło
sudo
uprawnienia, a kto nie .... jeśli użytkownik jest wsudo
grupie, alesudoers
plik nie ma nic osudo
grupie, następnie?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):Również zgodnie z sugestiami muru, format wpisów
/etc/group
można łatwo obsłużyćcut
:Również ponownie, zgodnie z sugestiami Muru, można użyć
getent
zamiastgrep
: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.*$'
: powodujegrep
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.*$'
: powodujegrep
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, żecut
wypisuje tylko czwarte polePodział Regex # 2:
^
: początek linii.*
: zero lub więcej znaków$
: koniec liniiźródło
getent 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 jakgrep foo /etc/group
, ale bardziej zdolny.getent
, zastanawiałem się, jakgrep
igetent
porównać obliczeniowo? Czy bieganie byłoby lżejszegetent
?sudo
grupy. Niektóre unixy mają inne grupy, takie jakwheel
. 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 poziomsudo
dostępu dla tego konkretnego użytkownika:Jeśli użytkownik nie ma dostępu sudo, wydrukuje, że użytkownik nie może uruchomić
sudo
na localhost:źródło
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 [email protected]" 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 :
Jedyną różnicą jest to, że grupa w Ubuntu nie jest
wheel
, alesudo
(lubadmin
w starszych wersjach Ubuntu). Zatem polecenie staje się:źródło
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życiegetent
pozwala nam uzyskać dostęp do użytkowników, którzy mogą nie być obecni wpasswd
pliku, takich jak użytkownicy LDAP:sudo -U
nie zwraca niezerowej wartości wyjściowej, z której moglibyśmy skorzystać, więc jesteśmy zredukowani do grepowania wyjścia.źródło
sudo
.W większości systemów uniksowych, które mają polecenie sudo i mają plik konfiguracyjny sudo; uruchamianie visudo jako root:
lub
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:
Przykładowe dane wyjściowe w systemie Ubuntu (ale nie w systemach Redhat, Oracle Solaris / Solaris lub BSD):
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:
Próbka wyjściowa
źródło
To polecenie zwraca listę użytkowników z uprawnieniami sudo:
Dane wyjściowe to (np.):
Jeśli wyświetlana jest tylko nazwa użytkownika, to polecenie:
źródło
Komenda:
Wynik:
Tom, Stacy to użytkownicy z uprawnieniami sudo.
źródło
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 znalezieniugetent
.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 masudo
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órymkolwiekgetent
lub/etc/group
.źródło