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 sudoGruppe, 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/groupleicht gehandhabt werden von cut:
grep '^sudo:.*$' /etc/group | cut -d: -f4
Auch hier kann man, wie in den Kommentaren von muru vorgeschlagen, getentanstelle von grep:
getent group sudo | cut -d: -f4
Mit jedem dieser Befehle werden alle in der sudoGruppe 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: grepStimmt mit regulären Ausdrücken im Perl-Stil übereino: grepLässt nur die übereinstimmende Zeichenfolge drucken'^sudo.+:\K.*$': Stimmt grepmit 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 grepmit dem regulären Ausdruck zwischen den Anführungszeichen übereincut: Druckt nur einen bestimmten Abschnitt jeder Zeile in einer Datei-d:: Lässt cutinterpretieren :als Feldbegrenzer-f4: cutLä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 fooist wie grep foo /etc/group, aber fähiger.
getentgelernt grepund getentrechnerisch verglichen habe? Wäre es leichter zu rennen getent?
sudoGruppe 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& -Uoptions zusammen zu entdecken. Geben Sie einfach Folgendes ein, um userseine Liste zu erstellen : Johnthen:
Wenn der Benutzer sudoZugriff hat, wird die sudoZugriffsebene 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 sudoauf localhost:
sudo -l -U John
User John is not allowed to run sudo on localhost.
"%domain admins@mycompany.intra" ALL=(ALL) ALLhaben, 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 wheelaber sudo(oder adminin älteren Versionen von Ubuntu) ist. So wird der Befehl:
getent group sudo
geten groupund 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 -UTest erweitern, können Sie getent passwddie Benutzer bestimmen, die ihn verwenden können sudo. Mit getentkönnen wir auf Benutzer zugreifen, die möglicherweise nicht in der passwdDatei 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 vagrantBenutzer sudoauch ohne Erwähnung in /etc/sudoersnoch in /etc/groupnoch gefunden mit verwenden kann getent.
Stellt sich heraus, sudoliest 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 sudoZugriff haben.
Diese Art des sudoZugriffs 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 getentoder verlassen /etc/group.