Ich möchte, dass mit einem Befehl alle Benutzer aufgelistet werden, die über Root-Berechtigungen verfügen, z. B. sudo?
Angenommen, ich bin ein Sudoer-Benutzer. Wie kann ich alle anderen Sudoer-Benutzer kennenlernen?
Ich möchte, dass mit einem Befehl alle Benutzer aufgelistet werden, die über Root-Berechtigungen verfügen, z. B. sudo?
Angenommen, ich bin ein Sudoer-Benutzer. Wie kann ich alle anderen Sudoer-Benutzer kennenlernen?
Antworten:
Wenn Sie nur die sudoers in der aufgeführten Liste müssen sudo
Gruppe, denke ich , dass der beste Weg , es zu tun wäre, um diesen Befehl auszuführen (was sollte als alle anderen Befehle in dieser Antwort rechen leichter sein):
grep -Po '^sudo.+:\K.*$' /etc/group
Auch wie in den Kommentaren von muru vorgeschlagen, kann das Format der Einträge in /etc/group
leicht gehandhabt werden von cut
:
grep '^sudo:.*$' /etc/group | cut -d: -f4
Auch hier kann man, wie in den Kommentaren von muru vorgeschlagen, getent
anstelle von grep
:
getent group sudo | cut -d: -f4
Mit jedem dieser Befehle werden alle in der sudo
Gruppe aufgelisteten Benutzer in /etc/group
(falls vorhanden) gedruckt .
Aufschlüsselung von Befehl 1:
grep
: Druckt alle Zeilen, die zu einem regulären Ausdruck in einer Datei passen-P
: grep
Stimmt mit regulären Ausdrücken im Perl-Stil übereino
: grep
Lässt nur die übereinstimmende Zeichenfolge drucken'^sudo.+:\K.*$'
: Stimmt grep
mit dem regulären Ausdruck zwischen den Anführungszeichen übereinRegex # 1 Aufschlüsselung:
^
: Beginn der Linie.+
: ein oder mehrere Zeichen\K
: Das vorherige Spiel verwerfen.*
: null oder mehr Zeichen$
: Ende der LinieAufschlüsselung von Befehl Nr. 2:
grep
: Druckt alle Zeilen, die zu einem regulären Ausdruck in einer Datei passen'^sudo.+:\K.*$'
: Stimmt grep
mit dem regulären Ausdruck zwischen den Anführungszeichen übereincut
: Druckt nur einen bestimmten Abschnitt jeder Zeile in einer Datei-d:
: Lässt cut
interpretieren :
als Feldbegrenzer-f4
: cut
Lässt nur das vierte Feld druckenRegex # 2 Aufschlüsselung:
^
: Beginn der Linie.*
: null oder mehr Zeichen$
: Ende der Liniegetent group sudo | cut -d: -f4
, oder benutze awk, aber denk daran, dass group und passwd feste Formate mit Begrenzern haben.
getent group
- Sie brauchen das grep überhaupt nicht. getent group foo
ist wie grep foo /etc/group
, aber fähiger.
getent
gelernt grep
und getent
rechnerisch verglichen habe? Wäre es leichter zu rennen getent
?
sudo
Gruppe sind. Einige Unixe haben andere Gruppen wie wheel
. Die Antwort von @muru wird alle Sudoer einschließen, egal in welcher Gruppe sie sich befinden.
Wie hier angegeben , halte ich es für den einfachsten Weg, mit -l
& -U
options zusammen zu entdecken. Geben Sie einfach Folgendes ein, um users
eine Liste zu erstellen : John
then:
Wenn der Benutzer sudo
Zugriff hat, wird die sudo
Zugriffsebene für diesen bestimmten Benutzer gedruckt :
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
Wenn der Benutzer nicht sudo Zugang hat, wird es drucken , dass ein Benutzer nicht erlaubt läuft sudo
auf localhost:
sudo -l -U John
User John is not allowed to run sudo on localhost.
"%domain admins@mycompany.intra" ALL=(ALL) ALL
haben, funktioniert es. Sie haben mir viel Zeit gespart, da ich nicht wusste, dass dies auch für nicht lokale Benutzer funktioniert.
Wie bereits erwähnt, kann die Antwort auf Unix & Linux Stack Exchange gefunden werden :
Dies zeigt, dass der Benutzer "saml" Mitglied der Radgruppe ist.
$ getent group wheel wheel:x:10:saml
Der einzige Unterschied ist, dass die Gruppe in Ubuntu nicht wheel
aber sudo
(oder admin
in älteren Versionen von Ubuntu) ist. So wird der Befehl:
getent group sudo
geten group
und sehe viele verschiedene Zahlen. Meine ursprüngliche Frage ist, wie man herausfindet, ob ein Benutzer ein Systembenutzer ist (erstellt mit useradd -r
)
Wenn Sie den sudo -l -U
Test erweitern, können Sie getent passwd
die Benutzer bestimmen, die ihn verwenden können sudo
. Mit getent
können wir auf Benutzer zugreifen, die möglicherweise nicht in der passwd
Datei vorhanden sind, z. B. LDAP-Benutzer:
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U
gibt keinen Exit-Wert ungleich Null zurück, den wir ausnutzen könnten, sodass wir uns darauf beschränken, die Ausgabe zu begrenzen.
sudo
.
Auf den meisten Unix-ähnlichen Systemen mit dem Befehl sudo und einer sudo-Konfigurationsdatei. visudo als root ausführen:
:~$ sudo bash
oder
:~$ su
:~# visudo
ermöglicht es einem Administrator, die Berechtigungen von Gruppen zu überprüfen und zu ändern, die den Befehl sudo verwenden können.
Auf Debian-basierten Unix-ähnlichen Systemen wie Ubuntu haben die Gruppen 4 und 27 im Allgemeinen Zugriffsrechte auf die sudo-Berechtigungen.
Gruppe 4 ist die Administratorgruppe (adm) und Gruppe 27 ist die Sudo-GID.
Um zu sehen, welche Benutzer diesen Gruppen derzeit zugewiesen sind, rufen Sie die Datei / etc / group wie folgt auf:
:~$ cat /etc/group
Eine Beispielausgabe unter Ubuntu (aber nicht auf Redhat-, Oracle Solaris / Solaris- oder BSD-basierten Systemen) würde dies ergeben:
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
Wie wir sehen können, ist Ihr Benutzer der Administrator des Systems und Mitglied der Gruppe 4 (adm). Ihr Benutzer und mein Bruder sind jedoch beide Mitglieder der Gruppe 27, bei der es sich um die gid-Nummer (Gruppenidentifikationsnummer) des Gruppen-Sudos handelt. So kann mybrother auch Root-Rechte erlangen (Superuser).
Viele Linux-Systeme wie Fedora und Slackware enthalten die Radgruppe gid = 10. Dies ermöglicht Administratorrechte, wenn der Befehl sudo angewendet wird. Auf BSD-basierten Systemen (zB FreeBSD) ist der Root-Benutzer ein Mitglied der Wheel-Gruppe, die gid 0 hat.
Auch mit dem Befehl id kann jeder Benutzer die Gruppeninformationen eines anderen bekannten Benutzers im System finden.
Zum Beispiel:
:~$ id mybrother
Beispielausgabe
uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
Dieser Befehl gibt eine Liste von Benutzern mit sudo-Rechten zurück:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd
Ausgabe ist (zB):
<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker
Wenn nur der Benutzername angezeigt werden soll, dann lautet dieser Befehl:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd
Befehl:
cat /etc/group | grep sudo
Ausgabe:
sudo:x:27:Tom,Stacy
Tom, Stacy sind die Benutzer mit Sudo-Berechtigungen.
cat
.
Ich war ratlos darüber, wie der vagrant
Benutzer sudo
auch ohne Erwähnung in /etc/sudoers
noch in /etc/group
noch gefunden mit verwenden kann getent
.
Stellt sich heraus, sudo
liest auch Einträge aus allen Dateien unter/etc/sudoers.d/
. Wenn Sie dieses Verzeichnis nicht durchgesehen haben, können Sie möglicherweise nicht erkennen, wie viele Benutzer tatsächlich sudo
Zugriff haben.
Diese Art des sudo
Zugriffs kann durch die Antwort von JoKeR unter Verwendung von erkannt werden sudo -l -U vagrant
, wird jedoch von keiner der anderen Antworten hier erkannt, auf die sich alle entweder getent
oder verlassen /etc/group
.