Warum unterscheidet sich die Ausgabe von "groups" von "groups user", wenn ich gerade als Benutzer angemeldet bin?

21

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.

Jake
quelle
@Jake Versuchen Sie, sich aus- und wieder
1
Ich habe dieses Problem umgekehrt. 'groups myname' gibt mir alle Gruppen, die ich in der Datei / etc / groups habe, aber nur 'groups' zeigt mir nur meine primäre Gruppe an. Und tatsächlich scheitern Befehle, die erfordern, dass ich einer bestimmten Zusatzgruppe angehöre, an fehlenden Berechtigungen. Ich wünschte, ich wüsste, was das verursachte.
Todd Walton

Antworten:

11

Es könnte einer der folgenden sein:

  • Es könnte ein Fehler sein (obwohl ich es bezweifle)
  • Möglicherweise müssen Sie sich abmelden und erneut anmelden

Die Gruppen werden in der festgelegt /etc/group.


quelle
8

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 groupsohne 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.

Nemo
quelle
3

(Anmerkung: Der groupsBefehl 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/passwdmit 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/groupssind, 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 newgrpBefehl ä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 initgroupssind:

Wird von der GNU C-Bibliothek und bestimmten anderen Anwendungen verwendet, um zu bestimmen, aus welchen Quellen Namensdienstinformationen in einer Reihe von Kategorien in welcher Reihenfolge abgerufen werden sollen. Jede Kategorie von Informationen wird durch einen Datenbanknamen identifiziert.

Der groupsBefehl 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 usernameBefehl wird Linux fragen zu berechnen , die Gruppen für den Benutzer, die es in erster Linie die Dateien mit tun /etc/password und /etc/groupsdann 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 usernameBefehl 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 usernameBefehls kann zu besseren Ergebnissen führen, es kann jedoch auch nicht garantiert werden, dass er so vollständig ist wie der Anmeldevorgang. Der idBefehl ist aktueller als der alte groupsBefehl und sollte präziser als dieser sein .

Obwohl der groupsBefehl ein genaues und korrektes Ergebnis liefert, haben Sie gut demonstriert, dass der groups usernameBefehl nicht dazu in der Lage ist, dasselbe zu tun.

Ohne den Quellcode des groupsBefehls zu untersuchen, würde ich vermuten, dass die Implementierung des groups usernameBefehls 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 Gruppennamen jacob.

Weitere Informationen finden Sie unter:

Harrymc
quelle