Wie liste ich alle Benutzer mit root auf?


35

Wie liste ich auf einer Linux-Box alle Benutzer mit Root-Rechten auf (und noch besser, alle Benutzer im Allgemeinen sowie, ob sie Root haben oder nicht)?


1
Können Sie genauer sagen, was Sie unter "Root-Berechtigungen" verstehen? Du meinst Benutzer mit UID = 0?
Chris S

Benutzer, die die Fähigkeit haben, alles zu tun. Grundsätzlich - Ich muss die Benutzer zusammen mit den Gruppen auflisten, denen sie angehören, wenn dies möglich ist.
Eric

2
Wenn ich wüsste, wo sich Ihr Computer befindet, könnte ich aufsteigen und am Netzkabel ziehen. Das würde als "alles tun" qualifizieren, was bedeutet, dass ich auf Ihrer Liste stehe. Rafiq hat die drei häufigsten Dinge aufgelistet, aber es könnte noch mehr geben, und wir wissen, wie Ihr System aufgebaut ist.
Chris S

Antworten:


42

Vergessen Sie nicht, das root-Passwort zu ändern. Wenn ein Benutzer neben root die UID 0 hat, sollte dies nicht der Fall sein. Schlechte Idee. Überprüfen:

grep 'x:0:' /etc/passwd

Wiederum sollten Sie dies nicht tun, sondern prüfen, ob der Benutzer Mitglied der Stammgruppe ist:

grep root /etc/group

Um zu sehen, ob jemand Befehle als root ausführen kann, überprüfen Sie sudoers:

cat /etc/sudoers

So suchen Sie nach dem SUID-Bit, mit dem Programme mit Root-Rechten ausgeführt werden können:

find / -perm -04000


Streng genommen funktioniert das erste nur, wenn sich die Shadow-Passwortdatei in user befindet. Ich bin damit einverstanden, dass dies heutzutage fast immer der Fall ist, aber für alle Fälle habe ich einen schnellen Perl-Job ausgeführt, bei dem Feld 3 explizit überprüft wird.
MadHatter unterstützt Monica

4
Dies ist ein besseres Muster als die ersten: grep '[^:]*:[^:]*:0:' /etc/passwd. +1 insbesondere für die Überprüfung auf SUID.
Bis auf weiteres angehalten.

33

Um zu sehen, wer UID 0 ist:

getent passwd 0

Um zu sehen, wer in Gruppen rootist wheel admund admin:

getent group root wheel adm admin

So listen Sie alle Benutzer und die Gruppen auf, denen sie angehören:

getent passwd | cut -d : -f 1 | xargs groups

9
Im Gegensatz zu allen anderen Antworten, die sich fälschlicherweise auf die Datei / etc / passwd stützen getent passwd, ist diese hier richtig. Vergiss nur nicht, / etc / sudoers zu überprüfen.
mivk

Danke dafür. Viel klarer. Für mich ist das die akzeptierte Antwort.
Fiddy Bux

6

Reine root ist die Benutzer-ID "0".

Alle Benutzer im System befinden sich in der Datei / etc / passwd:

less /etc/passwd

Diejenigen, die root sind, haben "0" als Benutzer-ID, was die 3. Spalte ist. Diejenigen mit "0" als Gruppe (4. Spalte) können auch einige Root-Rechte haben.

Als Nächstes möchten Sie sich die Gruppen ansehen und sehen, wer ein zusätzliches Mitglied der Gruppen "root" oder "wheel" oder "admin" ist:

less /etc/group

Benutzer, die in diesen Gruppen aufgeführt sind, können über einige Root-Berechtigungen verfügen, insbesondere über den Befehl "sudo".

Das Letzte, was Sie überprüfen möchten, ist die "sudo" -Konfiguration, um zu sehen, wer die Berechtigung zum Ausführen dieses Befehls besitzt. Diese Datei selbst ist gut dokumentiert, daher werde ich sie hier nicht reproduzieren:

less /etc/sudoers

Dies deckt die Hauptbereiche ab, die Root-Zugriff haben könnten.


In serverfault.com/questions/205598/… finden Sie einige weitere Stellen, an denen Rechte zur Eskalation von Berechtigungen gewährt werden können. (Nämlich consolehelperund PackageKit.)
mattdm

2
Es wird definitiv NICHT garantiert, dass sich alle Benutzer in / etc / passwd befinden. Sie können zum Beispiel in LDAP sein. Es getent passwdsollten jedoch alle Systembenutzer (einschließlich root) im passwd-Format aufgelistet werden, unabhängig von der Datenbank, in der sie definiert sind.
Mivk

3

So drucken Sie alle Benutzer

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

Um nur die Benutzer mit der UID 0 zu drucken, müssen die Benutzer mit impliziten Root-Rechten wie von anderen gesagt:

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

Das ist ein guter Einzeiler, aber seien Sie sich der Einschränkungen bewusst (ich bin sicher, MadHatter ist sich dessen bereits bewusst) - es werden keine Gruppen und keine Sudoer überprüft. Es wird nur die implizite Wurzel prüfen, wie er sagt.
Rafiq Maniar

2
Analysieren Sie / etc / passwd nicht. Benutzer können an anderer Stelle definiert werden. Verwenden Sie getent passwdstattdessen. Versuchen Sie für Ihr erstes Beispiel "Alle Benutzer drucken" getent passwd | perl -naF: -e 'print "$F[0]\n"'
Folgendes

2

Um eine schnelle Liste aller Benutzer zu erhalten, drücken Sie zweimal die Tabulatortaste (zur automatischen Vervollständigung), nachdem Sie den passwdBefehl gefolgt von einem Leerzeichen eingegeben haben. Dies funktioniert auch mit dem suBefehl.

Muss als Benutzer mit Root-Rechten ausgeführt werden.


Ist das ein zsh-spezifisches Merkmal? Bash schlägt nur Dateien unter openSUSE vor.
Jgillich

Getestet unter Debian (Squeeze) in bash. Ich glaube nicht, dass irgendjemand dies offiziell unterstützen würde, aber es ist eine Abkürzung.
Emeraldo

Update: Dies funktioniert in El Capitan nicht mehr. Es wurde wahrscheinlich aus Sicherheitsgründen behoben.
Emeraldo

0

Es hat mich geärgert, dass es keine einzeilige Antwort gab ... Wenn Sie alle UID 0-Konten (Root-Konten) auflisten möchten, verwenden Sie Folgendes:

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

Beste,

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.