Weiß jemand warum der Linux-Befehl
groups
zeigt eine andere Ausgabe als
groups username
Der angemeldete Benutzer entspricht dem Parameter Benutzername. Beispiel:
thorsten@ubuntu:~/tmp$ groups
thorsten adm dialout cdrom plugdev lpadmin admin sambashare
thorsten@ubuntu:~/tmp$ groups thorsten
thorsten : thorsten adm dialout cdrom plugdev nogroup lpadmin admin sambashare
linux
user-accounts
Thorsten Niehues
quelle
quelle
Antworten:
Wenn Sie ausführen , wird 1 der angegebene Benutzer in und (obwohl es sich um LDAP, NIS oder etwas anderes 2 handeln kann ) gesucht und alle gefundenen Gruppen angezeigt.
groups username
/etc/passwd
/etc/group
Auf der anderen Seite, wenn Sie das ausführen
groups
Befehl ohne Argumente, listet es einfach alle Gruppen es sich gehört 3 - das ist nicht unbedingt das gleiche wie das, was in aufgeführt/etc/group
. (Siehe unten für eine Erklärung.) In der Tat, die nur gemacht Lookups/etc/group
sind für GIDs zu Gruppennamen zu übersetzen.Jeder Prozess verfügt über eine Reihe von Anmeldeinformationen , die unter anderem eine "echte Gruppen-ID" (primäre GID), eine "effektive Gruppen-ID" (EGID) und eine Liste von "zusätzlichen Gruppen" -IDs (sekundäre GIDs) enthalten. Standardmäßig erbt ein Prozess seine Anmeldeinformationen von seinem übergeordneten Element. Prozesse, die als Root (UID 0) ausgeführt werden oder über die
CAP_SETUID
Fähigkeit verfügen, können jedoch beliebige Anmeldeinformationen festlegen.Insbesondere wenn Sie sich bei Linux anmelden (ob in einem tty, X11 oder über SSH), sucht der Anmeldevorgang (/ bin / login, gdm, sshd) nach Ihrem Benutzernamen, um Ihre UID, primäre GID und sekundäre GIDs zu ermitteln . Auf einem Personal Computer bedeutet dies lediglich das Lesen der entsprechenden Zeilen
passwd
undgroup
Dateien (oder NIS, LDAP usw.).Als nächstes wechselt der Anmeldevorgang 4 zu diesen Anmeldeinformationen, bevor Sie Ihre Sitzung starten, und jeder Prozess, den Sie von nun an starten, hat genau die gleichen UIDs und GIDs - das System überprüft 5 nicht
/etc/group
mehr und nimmt keine vorgenommenen Änderungen auf.Auf diese Weise gehört der
/usr/bin/groups
Prozess zu denselben Gruppen wie beim Anmelden und nicht zu den Angaben in der Datenbank.Hinweis: Die obige Erklärung gilt auch für fast alle Unixe. für die Windows NT-Familie (außer UIDs und GIDs werden alle als "SIDs" bezeichnet, es gibt keine "primäre Gruppe", die Anmeldeinformationen werden als "Prozesstoken" bezeichnet und
CAP_SETUID
sind SeCreateTokenPrivilege oder SeTcbPrivilege ); und wahrscheinlich für die meisten anderen Mehrbenutzer-Betriebssysteme.1 getpwuid () und getgrouplist () werden verwendet, um die Gruppen eines Benutzers nachzuschlagen.
2 Unter Linux bestimmt glibc
/etc/nsswitch.conf
, wo nach diesen Informationen gesucht werden soll.3
groups
verwendet getgid (), getegid () und getgroups (), um eigene Anmeldeinformationen abzurufen.4 setuid (), setgid (), initgroups () und verwandte.
5 Eine Ausnahme ist natürlich die verschiedenen Werkzeuge , die erhöhte (Lauf setuid- ) wie
su
,sudo
,sg
,newgrp
,pkexec
, und so weiter. Dies bedeutet, dasssu $USER
eine Shell mit der aktualisierten Gruppenliste erzeugt wird.quelle
groups
allein gibt die aktuelle Gruppenmitgliedschaft des Eigentümers des Prozesses an. Dies kann davon abweichen,groups <username>
ob sich die groupdb seit dem Start des Prozesses oder der Prozessverantwortliche geändert hat.quelle
groups
gibt keine aktuelle Mitgliedschaft an, sondern die, die zum Zeitpunkt des Aufrufs des Anmeldevorgangs (/ sbin / login, gdm, sshd) "aktuell" warinitgroups()
.Starten Sie einfach den Computer neu und beide Gruppen und Gruppenbenutzer sollten die gleichen Ergebnisse erzielen.
Der Grund, warum sie unterschiedlich waren, war, dass Sie sich einer neuen Gruppe hinzugefügt haben, zu der Sie beim Starten des Computers nicht gehörten.
quelle
su
einer erneuten Öffnung der aktuellen Sitzung schließen). Sie können auchnewgrp
Prozesse mit der neuen Gruppe starten.Führen Sie aus
updatedb
, ob sich etwas geändert hat.Das gleiche auf meinem OSX-Computer, wenn sich groupdb nicht geändert hat:
quelle