Linux-Kurs / Benutzer, Gruppen und Dateibesitz verstehen

Linux weist einem Konto eine Benutzer-ID (UID) und einer Gruppe eine Gruppen-ID (GID) zu. Eine Datei speichert den Besitzer und die Gruppe, während ein Konto eine Hauptgruppe und zusätzliche Gruppen haben kann. Verwenden Sie id, groups, getent und ls -l, um diese Beziehungen zu untersuchen. Diese Lektion konzentriert sich darauf, Besitzinformationen zu lesen, ohne die Eigentümer von Konten oder Dateien zu ändern.

Die Untersuchung von Konten und Gruppen bereitet Sie auf Eigentums- und Zugriffsrechte vor. Verstehen Sie, warum Gruppenänderungen möglicherweise eine neue Anmeldesitzung erfordern, bevor Sie den Zugriff diagnostizieren.

Was Benutzer- und Gruppen-IDs bedeuten

Ein für Menschen lesbarer Kontoname wie learner entspricht einer numerischen UID. Eine Gruppe hat einen Namen und eine numerische GID. Die Primärgruppe eines Benutzers ist die Hauptgruppe, die in den Kontodaten vermerkt ist; zusätzliche Gruppen sind weitere Mitgliedschaften. Zugriffsentscheidungen kombinieren Dateibesitzer, Gruppe, Berechtigungsbits und andere Systemregeln. Die Mitgliedschaft allein gewährt nicht die Fähigkeit, jede Datei, die dieser Gruppe gehört, zu lesen oder zu ändern.

Das Administratorkonto root hat normalerweise die UID 0. Gehen Sie nicht davon aus, dass normale Benutzer- oder Gruppen-IDs immer bei 1000 beginnen; die Werte hängen vom System und den Kontorichtlinien ab.

Überprüfen Sie den Benutzer und die Gruppen der aktuellen Sitzung.

Diese Befehle funktionieren für einen gewöhnlichen Benutzer und ändern das Konto nicht. id zeigt Benutzernamen und Gruppennamen zusammen mit numerischen IDs an. id -un druckt den Benutzernamen, id -gn den primären Gruppennamen und id -nG die Namen der Gruppen im aktuellen Kontext.

id
id -un
id -gn
id -nG
groups

Ein illustratives id-Ergebnis ist uid=1000(learner) gid=1000(learner) groups=1000(learner),10(wheel). Tatsächliche Namen, Nummern und Gruppen können variieren. Der gid=...-Teil gibt die primäre Gruppe an; groups=... listet die in der aktuellen Sitzung wirksamen Gruppen auf.

groups bietet eine kürzere Auflistung der Gruppennamen. Wenn ein Administrator gerade Ihre Mitgliedschaften geändert hat, kann es sein, dass eine bereits geöffnete Login-Sitzung die neue Gruppenliste nicht sofort übernimmt. Unterscheiden Sie die Konfiguration der Kontodatenbank von den Gruppen, die auf den aktuellen Prozess angewendet werden.

Abfragedaten des Kontos mit getent

getent fragt Benutzer- und Gruppendatenbanken über den Name Service Switch (NSS) des Systems ab. Je nach Konfiguration können die Ergebnisse aus lokalen Dateien oder aus einem externen Verzeichnisdienst stammen. Dies kann die tatsächliche Namensauflösung besser widerspiegeln als das bloße Lesen von /etc/passwd. Fragen Sie Ihr aktuelles Konto und die primäre Gruppe ab mit:

getent passwd "$(id -un)"
getent group "$(id -gn)"

Eine getent passwd-Zeile enthält normalerweise durch Doppelpunkte getrennte Angaben wie Name, Passwort-Platzhalter, UID, primäre GID, Beschreibung, Home-Verzeichnis und Login-Shell. Das bedeutet nicht, dass ein Klartextpasswort angezeigt wird. Eine getent group-Zeile enthält den Gruppennamen und die GID. Die Mitgliedsliste in einer Gruppen-Zeile muss nicht alle auflisten, deren primäre Gruppe diese Gruppe ist. Verwenden Sie daher id, wenn Sie die tatsächlichen Gruppen eines bestimmten Benutzers überprüfen.

Eine minimale Installation könnte getent nicht enthalten. In diesem Fall konsultieren Sie die mit der installierten libc oder Distribution bereitgestellten Nachschlagewerkzeuge. Bearbeiten Sie nicht leichtfertig /etc/passwd oder /etc/group, um Kontodaten zu ändern.

Den Eigentümer und die Gruppe einer Datei lesen

Erstellen Sie eine Übungsdatei zum Untersuchen. Wenn ~/linux-course-16-practice existiert, wählen Sie einen anderen Namen. Beenden Sie, wenn mkdir fehlschlägt; touch kann Zeitstempel ändern, wenn eine vorhandene Datei übergeben wird.

mkdir ~/linux-course-16-practice
cd ~/linux-course-16-practice
pwd
touch own.txt
ls -l own.txt

In einer ls -l-Zeile geben die beiden Namen nach den Berechtigungen und der Linkanzahl normalerweise den Besitzer und die Gruppe an. Eine neue Datei gehört in der Regel dem aktuellen Benutzer, aber ihre Gruppe kann von den Einstellungen des übergeordneten Verzeichnisses und dem Verhalten des Dateisystems abhängen; man sollte nicht davon ausgehen, dass sie immer mit der Hauptgruppe übereinstimmt. Größe und Zeitstempel variieren ebenfalls.

GNU stat kann Namen und numerische IDs in einer Zeile ausgeben. %U und %G sind Eigentümer- und Gruppenname; %u und %g sind deren numerische IDs.

stat -c '%U | %G | %u | %g | %n' own.txt

Die Ausgabe könnte learner | learner | 1000 | 1000 | own.txt ähneln, aber überprüfen Sie Ihre eigenen Werte. Der Dateibesitz gibt an, wem die Datei gehört; Berechtigungen sind separate Informationen darüber, welche Aktionen erlaubt sind. chown ändert das Eigentum und kann echte Daten beeinflussen, daher wird es in dieser schreibgeschützten Übung absichtlich weggelassen.

Drei Unterscheidungen klar halten

  • Benutzername versus UID: Der Name dient zur Anzeige und zum Nachschlagen; das System verwendet auch die numerische ID.
  • Primäre versus zusätzliche Gruppen: Unterscheiden Sie die eine primäre Gruppe des Kontos von den Gruppen, die in einer Sitzung vorhanden sind.
  • Kontodaten versus eine aktuelle Sitzung: Datenbankänderungen aktualisieren möglicherweise nicht die Gruppenmitgliedschaften in einer bereits geöffneten Sitzung.

Bei der Untersuchung eines Berechtigungsproblems führen Sie zuerst id für den Benutzer und die Gruppen der Sitzung aus, dann ls -l oder stat für den Eigentümer und die Gruppe der Zieldatei. Vergleichen Sie diese Ergebnisse, bevor Sie die Berechtigungseinstellungen überprüfen.

Offizielle Dokumentation

Das GNU Coreutils-Handbuch dokumentiert id, groups, ls und stat. Das getent(1)-Handbuch und das nsswitch.conf(5)-Handbuch erklären die Abfrage von Kontodaten.