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
und group
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, dass su $USER
eine Shell mit der aktualisierten Gruppenliste erzeugt wird.