Jak wyświetlić listę wszystkich użytkowników z rootem?

35

W jaki sposób mogę wyświetlić listę użytkowników posiadających uprawnienia roota (a jeszcze lepiej wszystkich użytkowników wraz z tym, czy mają uprawnienia roota, czy nie)?

Eric
źródło
1
Czy możesz sprecyzować, co rozumiesz przez „uprawnienia roota”? Masz na myśli użytkowników o UID = 0?
Chris S,
Użytkownicy mający możliwość zrobienia czegokolwiek. Zasadniczo - muszę wymienić użytkowników wraz z grupami, których są członkami, jeśli to możliwe.
Eric
2
Gdybym wiedział, gdzie jest twój komputer, mógłbym podejść i wyciągnąć przewód zasilający. To by się kwalifikowało jako „rób wszystko”, co oznacza, że ​​jestem na twojej liście. Rafiq wymienił trzy najczęstsze rzeczy, ale może być ich więcej i wiemy o twoim systemie lub jego konfiguracji.
Chris S,

Odpowiedzi:

42

Nie zapomnij zmienić hasła roota. Jeśli jakikolwiek użytkownik ma UID 0 poza rootem, nie powinien. Kiepski pomysł. Sprawdzić:

grep 'x:0:' /etc/passwd

Ponownie, nie powinieneś tego robić, ale aby sprawdzić, czy użytkownik jest członkiem grupy głównej:

grep root /etc/group

Aby sprawdzić, czy ktokolwiek może wykonywać polecenia jako root, sprawdź sudoers:

cat /etc/sudoers

Aby sprawdzić bit SUID, który umożliwia wykonywanie programów z uprawnieniami administratora:

find / -perm -04000

Warner
źródło
Ściśle rzecz biorąc, ten pierwszy działa tylko wtedy, gdy plik haseł cienia znajduje się w użytkowniku. Zgadzam się, że prawie zawsze tak jest, ale na wszelki wypadek wykonałem szybką pracę w Perlu, która wyraźnie sprawdza pole 3.
MadHatter obsługuje Monikę
4
Ten wzór jest lepiej niż pierwszy: grep '[^:]*:[^:]*:0:' /etc/passwd. +1 w szczególności za sprawdzenie SUID.
Wstrzymano do odwołania.
33

Aby zobaczyć, kto jest UID 0:

getent passwd 0

Aby zobaczyć, kto jest w grupach root, wheel admi admin:

getent group root wheel adm admin

Aby wyświetlić listę wszystkich użytkowników i grup, których są członkami:

getent passwd | cut -d : -f 1 | xargs groups
Wstrzymano do odwołania.
źródło
9
W przeciwieństwie do wszystkich innych odpowiedzi, które błędnie opierają się na pliku / etc / passwd, ta, używając getent passwdzamiast tego, jest właściwie poprawna. Tylko nie zapomnij sprawdzić / etc / sudoers.
mivk,
Dzięki za to. O wiele jaśniej. Dla mnie to zaakceptowana odpowiedź.
Fiddy Bux
6

Czysty root to identyfikator użytkownika „0”.

Wszyscy użytkownicy w systemie znajdują się w pliku / etc / passwd:

less /etc/passwd

Użytkownicy root mają „0” jako identyfikator użytkownika, czyli trzecią kolumnę. Osoby z „0” jako grupą (4. kolumna) mogą również mieć pewne uprawnienia root.

Następnie przyjrzyj się grupom i zobacz, kto jest dodatkowym członkiem grup „root”, „wheel” lub „admin”:

less /etc/group

Użytkownicy znajdujący się w tych grupach mogą mieć uprawnienia administratora, szczególnie za pomocą polecenia „sudo”.

Ostatnią rzeczą, którą chcesz sprawdzić, jest konfiguracja „sudo” i sprawdzenie, kto ma uprawnienia do uruchomienia tego polecenia. Sam plik jest dobrze udokumentowany, więc nie będę go tutaj kopiować:

less /etc/sudoers

Obejmuje to główne obszary, które mogą mieć dostęp do roota.

Rafiq Maniar
źródło
Zobacz także serverfault.com/questions/205598/ ... kilka innych miejsc, w których można przyznać prawa do eskalacji uprawnień. (Mianowicie consolehelperi PackageKit.)
mattdm
2
Wszyscy użytkownicy zdecydowanie NIE mają gwarancji, że będą w / etc / passwd. Mogą być na przykład w LDAP. getent passwdPowinien jednak wyświetlać listę wszystkich użytkowników systemu (w tym root), w formacie passwd, niezależnie od bazy danych, w której są zdefiniowani.
mivk
3

Aby wydrukować wszystkich użytkowników

perl -n -e '@user = split /:/ ; print "@user[0]\n";' < /etc/passwd

Aby wydrukować tylko tych użytkowników z identyfikatorem UID 0, ponieważ, jak powiedzieli inni, użytkownicy z niejawnymi uprawnieniami roota:

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd
MadHatter obsługuje Monikę
źródło
To dobra linijka, ale miej świadomość ograniczeń (jestem pewien, że MadHatter już o tym wie) - nie sprawdza grup i nie sprawdza sudoerów. Sprawdza tylko, jak mówi, ukryty korzeń.
Rafiq Maniar,
2
Nie analizuj / etc / passwd. Użytkownicy mogą być zdefiniowani w innym miejscu. Użyj getent passwdzamiast tego. getent passwd | perl -naF: -e 'print "$F[0]\n"'
Jako
2

Aby uzyskać szybką listę wszystkich użytkowników, spróbuj dwukrotnie nacisnąć klawisz Tab (w celu autouzupełniania) po wpisaniu passwdpolecenia, a następnie spacji. Działa to również z supoleceniem.

Należy to zrobić jako użytkownik root.

Emeraldo
źródło
Czy jest to funkcja specyficzna dla Zsh? Bash sugeruje tylko pliki w openSUSE.
jgillich
Testowane na Debianie (Squeeze) w bash. Nie sądzę, żeby ktokolwiek oficjalnie poparłby to, ale jest to skrót.
Emeraldo
Aktualizacja: To już nie działa w El Capitan. Prawdopodobnie zostało to naprawione ze względów bezpieczeństwa.
Emeraldo 24.04.16
0

Denerwowało mnie to, że nie było odpowiedzi jednokreskowej ... Jeśli chcesz wyświetlić listę wszystkich kont UID 0 (root), skorzystaj z następujących opcji:

cat /etc/passwd | cut -f1,3,4 -d":" | grep"0:0" | cut -f1 -d":" | awk '{print $1}'

Najlepiej,

Boschko
źródło