Frage Wie listet ich alle Benutzer mit Root auf?


Wie liste ich auf einer Linux-Box alle Benutzer auf, die root priveleges haben (und noch besser, alle Benutzer im Allgemeinen, wenn sie root haben oder nicht)?


30
2017-12-02 14:33


Ursprung


Können Sie genauer sagen, was Sie unter "root privileges" verstehen? Sie meinen Benutzer mit UID = 0? - Chris S
Benutzer mit der Fähigkeit, alles zu tun. Grundsätzlich - ich muss Benutzer zusammen mit den Gruppen auflisten, denen sie angehören, wenn es möglich ist. - Eric
Wenn ich wüsste, wo dein Computer ist, könnte ich hochgehen und am Stromkabel ziehen. Das würde als "tue alles" gelten, was bedeutet, dass ich auf deiner Liste stehe. Rafiq hat die drei häufigsten Dinge aufgelistet, aber es könnte mehr geben und wir wissen über Ihr System oder wie es eingerichtet ist. - Chris S


Antworten:


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

grep 'x:0:' /etc/passwd

Auch hier sollten Sie nicht überprüfen, ob der Benutzer Mitglied der Root-Gruppe ist:

grep root /etc/group

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

cat /etc/sudoers

So prüfen Sie das SUID-Bit, mit dem Programme mit root-Rechten ausgeführt werden können:

find / -perm -04000


39
2017-12-02 14:41



Genau genommen funktioniert das erste nur, wenn sich die Shadow-Passwortdatei im Benutzer befindet. Ich stimme zu, dass es heutzutage fast immer so ist, aber nur für den Fall, ich habe einen schnellen Perl-Job gemacht, der Feld 3 explizit überprüft. - MadHatter
Dies ist ein besseres Muster als das erste: grep '[^:]*:[^:]*:0:' /etc/passwd. +1 insbesondere für die Prüfung auf SUID. - Dennis Williamson


Um zu sehen, wer UID 0 ist:

getent passwd 0

Um zu sehen, wer in Gruppen ist root, wheel  adm und 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

27
2017-12-02 15:32



Im Gegensatz zu allen anderen Antworten, die sich fälschlicherweise auf die / etc / passwd-Datei verlassen, wird diese verwendet getent passwd ist eigentlich richtig. Vergessen Sie nicht, / etc / sudoers zu überprüfen. - mivk


Pure root ist Benutzer-ID "0".

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

less /etc/passwd

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

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

less /etc/group

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

Die letzte Sache, die Sie überprüfen möchten, ist die "sudo" -Konfiguration und sehen Sie, wer als Berechtigung zum Ausführen dieses Befehls aufgeführt ist. Diese Datei selbst ist gut dokumentiert, daher werde ich sie hier nicht reproduzieren:

less /etc/sudoers

Das deckt die Hauptbereiche ab, in denen Root-Zugriff möglich ist.


5
2017-12-02 14:41



Siehe auch serverfault.com/questions/205598/... für ein paar weitere Orte, an denen Privilegien-Eskalationsrechte gewährt werden könnten. (Nämlich, consolehelper und PackageKit.) - mattdm
Alle Benutzer sind definitiv nicht garantiert in / etc / passwd zu sein. Sie können zum Beispiel in LDAP sein. Aber getent passwd sollte alle Systembenutzer (einschließlich root) im passwd-Format auflisten, unabhängig von der Datenbank, in der sie definiert sind. - mivk


Um alle Benutzer zu drucken

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

Um nur die Benutzer mit der UID 0 zu drucken, so wie andere Benutzer gesagt haben, die Benutzer mit impliziten Root-Rechten:

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

2
2017-12-02 14:44



Das ist ein guter Liner, aber beachte die Einschränkungen (ich bin mir sicher, MadHatter ist sich dessen schon bewusst) - es wird keine Gruppen checken und es werden keine Sudoers überprüft. Es prüft nur, wie er sagt, implizite Wurzel. - Rafiq Maniar
Parsen Sie nicht / etc / passwd. Benutzer können an anderer Stelle definiert werden. Benutzen getent passwd stattdessen. Versuchen Sie zum ersten Mal "Alle Benutzer drucken": getent passwd | perl -naF: -e 'print "$F[0]\n"' - mivk


Um eine schnelle Liste aller Benutzer zu erhalten, klicken Sie zweimal auf den Tab (um die automatische Vervollständigung abzuschließen) passwd Befehl gefolgt von einem Leerzeichen. Dies funktioniert mit der su Befehl auch.

Muss als root-privilegierter Benutzer ausgeführt werden.


1
2017-09-16 18:29



Ist das eine zsh-spezifische Funktion? Bash schlägt nur Dateien auf openSUSE vor. - jgillich
Getestet auf Debian (Squeeze) in bash. Ich glaube nicht, dass irgendjemand das offiziell unterstützen würde, aber es ist eine Abkürzung. - Emeraldo
Aktualisieren: Dies funktioniert nicht mehr in El Capitan. Es wurde wahrscheinlich aus Sicherheitsgründen behoben. - Emeraldo