Ich bin nicht sicher, warum die folgenden unterschiedliche Ausgabe haben. Meines Wissens nach geben Gruppen ohne Angabe eines Benutzers alle Gruppen an, bei denen der aktuell angemeldete Benutzer Mitglied ist.
jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare
jacob@box:~$ groups jacob
jacob : jacob
Was bedeutet es auch "Gruppen des aktuellen Prozesses" (von der Gruppenmanpage)? Wo sind sie aufgestellt?
HINWEIS: Meine Distribution ist Ubuntu.
Antworten:
Es könnte einer der folgenden sein:
Die Gruppen werden in der festgelegt
/etc/group
.quelle
So wie jeder Prozess eine aktuelle reale und effektive Benutzer-ID und eine reale und effektive Gruppen-ID hat, hat er auch eine Liste zusätzlicher Gruppen . Dies sind Zahlen (keine Namen), die alle vom Kernel verwaltet werden. Sie werden beim Anmelden vom Anmeldeprozess (oder vom Anzeigemanager) festgelegt, genau wie Ihre Benutzer-ID. Sie werden wie Ihre Benutzer-ID von Unterprozessen geerbt.
Wenn Sie
groups
ohne Argumente ausführen , wird letztendlich getgroups () aufgerufen , um die zusätzliche Gruppenliste vom Kernel abzurufen . (Auf meinem Linux-System ist / usr / bin / groups ein Shell-Skript, das "id -Gn" ausführt und getgroups () aufruft.)Wenn Sie ausführen
groups username
, muss der Befehl "raten", wie die zusätzlichen Gruppen lauten, wenn sich dieser Benutzer anmeldet. Dies geschieht im Allgemeinen durch Lesen von / etc / group oder im Gespräch mit NIS oder im Gespräch mit nscd oder ... Nun, es gibt a viele Möglichkeiten, wie es funktionieren könnte.Was Sie beobachten, ähnelt der Feststellung, dass Ihre aktuelle reale Benutzer-ID und Ihre Eingabe in / etc / passwd inkonsistent sind. Dies bedeutet, dass die Konfiguration Ihres Systems etwas seltsam ist, aber es ist schwer zu sagen, was ohne weitere Untersuchungen passiert.
quelle
(Anmerkung: Der
groups
Befehl ist zwar immer noch nützlich, wird jedoch meistens durch den Befehl id ersetzt .)Ein Benutzer hat eine primäre Gruppe, die traditionell in der Datei definiert ist,
/etc/passwd
mit der er sich anmeldet, die heute jedoch möglicherweise andere Quellen hat. Er kann auch Mitglied zusätzlicher Gruppen sein, die als sekundäre oder ergänzende Gruppen bezeichnet werden und traditionell in der Akte angegeben/etc/groups
sind, die heute jedoch auch aus zusätzlichen Quellen stammen oder von diesen impliziert werden können (wie NIS, LDAP, SAMBA usw.).Primär- und Ergänzungsgruppen werden zum Zeitpunkt der Anmeldung definiert und bleiben aktuell . Der Benutzer kann jedoch jederzeit seine derzeit aktive Primärgruppe mit dem
newgrp
Befehl ändern .Der Anmeldevorgang legt die primäre und die ergänzende Gruppe fest. Für die spätere Version wird normalerweise die libc-Funktion initgroups aufgerufen , die die Liste der zusätzlichen Gruppendaten zusammenstellt und an die setgroups- Funktion weiterleitet , die sie im Kontext des Prozesses festlegt.
Die Informationsquellen für
initgroups
sind:Der
groups
Befehl zeigt die Gruppen an, die aktuell auf Ihren Benutzer angewendet werden, und die Liste beginnt mit der aktuellen Primärgruppe, gefolgt von den zusätzlichen Gruppen ab dem Zeitpunkt der Anmeldung. Änderungen an den Datenquellen nach dem Zeitpunkt der Anmeldung werden in der angezeigten Liste nicht berücksichtigt.Der
groups username
Befehl wird Linux fragen zu berechnen , die Gruppen für den Benutzer, die es in erster Linie die Dateien mit tun/etc/password
und/etc/groups
dann den zusätzlichen Quellen. Dies spiegelt die aktuelle Situation der Systemdateien wider und entspricht möglicherweise nicht den aktuellen Gruppen , die zum Zeitpunkt der Anmeldung noch gültig sind.Der
groups username
Befehl führt möglicherweise zu einem anderen Ergebnis, wenn nicht alle Quellen verwendet werden, die der Anmeldevorgang zur Berechnung Ihrer zusätzlichen Gruppen verwendet hat. Dies ist anscheinend in Ihrem Fall der Fall. Auf diese Quellen kann möglicherweise nicht über Ihr Login zugegriffen werden oder der Befehl kann sie nur nicht aufrufen.Die Verwendung des
id username
Befehls kann zu besseren Ergebnissen führen, es kann jedoch auch nicht garantiert werden, dass er so vollständig ist wie der Anmeldevorgang. Derid
Befehl ist aktueller als der altegroups
Befehl und sollte präziser als dieser sein .Obwohl der
groups
Befehl ein genaues und korrektes Ergebnis liefert, haben Sie gut demonstriert, dass dergroups username
Befehl nicht dazu in der Lage ist, dasselbe zu tun.Ohne den Quellcode des
groups
Befehls zu untersuchen, würde ich vermuten, dass die Implementierung desgroups username
Befehls in Ihrer Linux-Distribution analysiert/etc/groups
, die in Ihrem Fall nichts enthielt, aber nicht verwendet/etc/nsswitch.conf
, von der alle Ihre zusätzlichen Gruppen stammten. Daher aufgeführt wird nur die primären Gruppennamenjacob
.Weitere Informationen finden Sie unter:
quelle