VMware ESXi and vSphere Cluster Management
Linux-Gruppen verwalten: Gruppen, Mitgliedschaften und Dateiberechtigungen
Linux-Gruppen verständlich verwalten: primäre und sekundäre Gruppen anzeigen, erstellen und ändern sowie Gruppeneigentum, chmod, setgid und Projektverzeichnisse einrichten.
Linux-Gruppen bündeln Benutzerkonten, damit gemeinsame Zugriffsrechte für Dateien, Verzeichnisse und Dienste vergeben werden können. Statt Berechtigungen für jede Person einzeln einzurichten, weist die Administration eine Datei einer Gruppe zu und verwaltet anschließend die Gruppenmitgliedschaften.
Dieses Kapitel setzt grundlegende Kenntnisse über die Shell, Benutzerkonten, ls -l, Dateirechte und sudo voraus. Die Beispiele verwenden die Benutzer alice und bob sowie die Gruppe projektteam.
Grundprinzip von Linux-Gruppen
Eine Gruppe ist eine Sammlung von Benutzerkonten. Ein Benutzerkonto besitzt eine eindeutige UID (User ID) und kann Mitglied in mehreren Gruppen sein. Jede Datei und jedes Verzeichnis hat neben einem Dateieigentümer auch einen Gruppeneigentümer.
Die klassischen Unix-Dateirechte unterscheiden drei Zugriffsbereiche:
- Besitzer: das Benutzerkonto, dem die Datei gehört.
- Gruppe: Mitglieder der Gruppe, der die Datei zugeordnet ist.
- Andere: alle übrigen Benutzer.
Für jeden dieser Bereiche können die Rechte r (Lesen), w (Schreiben) und x (Ausführen beziehungsweise Betreten) gesetzt werden. Gruppen ermöglichen damit eine kontrollierte Zusammenarbeit, ohne allen Benutzern pauschal Zugriff zu geben.
Primäre und sekundäre Gruppen
| Merkmal | Primäre Gruppe | Sekundäre Gruppe |
|---|---|---|
| Anzahl pro Benutzer | Genau eine | Keine, eine oder mehrere |
| Bedeutung bei neuer Datei | Wird normalerweise als Gruppeneigentümer eingetragen | Kann für den Zugriff auf bereits vorhandene Dateien verwendet werden |
| Speicherung beziehungsweise Anzeige | Als primäre GID des Kontos | Als ergänzende Mitgliedschaft |
| Typische Verwendung | Standardgruppe für persönliche Dateien | Projekt-, Geräte- oder Verwaltungszugriff |
Jedes Benutzerkonto besitzt eine primäre Gruppe. Bei vielen Linux-Distributionen wird beim Anlegen eines Benutzers automatisch eine private, gleichnamige Gruppe erzeugt. Für alice können Benutzername und primäre Gruppe daher beide alice lauten.
Zusätzliche Mitgliedschaften heißen sekundäre oder ergänzende Gruppen. Sie geben dem Benutzer weitere Zugriffsoptionen. Welche Berechtigung tatsächlich verwendet wird, hängt vom Eigentümer, vom Gruppeneigentümer und vom jeweiligen Rechtefeld der Datei ab.
Gruppeneigentum mit ls -l erkennen
Mit ls -l lassen sich Besitzer, Gruppeneigentümer und Berechtigungen einer Datei anzeigen:
$ ls -l bericht.txt
-rw-r----- 1 alice projektteam 1840 Aug 18 10:30 bericht.txt
| Ausgabeteil | Beispiel | Bedeutung |
|---|---|---|
| Dateityp und Rechtezeichen | -rw-r----- | - steht für eine reguläre Datei; danach folgen Rechte für Besitzer, Gruppe und Andere. |
| Besitzername | alice | Benutzerkonto, dem die Datei gehört. |
| Gruppenname | projektteam | Gruppe, der die Datei zugeordnet ist. |
| Dateigröße | 1840 | Größe der Datei in Bytes. |
| Zeitstempel | Aug 18 10:30 | Letzte relevante Änderung, abhängig von System und Ausgabeformat. |
| Dateiname | bericht.txt | Name des Objekts. |
Der Rechteblock -rw-r----- wird in drei Dreiergruppen zerlegt:
rw-: Der Besitzer darf lesen und schreiben.r--: Mitglieder vonprojektteamdürfen lesen, aber nicht schreiben.---: Andere Benutzer haben keinen Zugriff.
Mit der Option -n zeigt ls statt Namen die numerischen UID- und GID-Werte an:
$ ls -ln bericht.txt
-rw-r----- 1 1001 2500 1840 Aug 18 10:30 bericht.txt
Die GID 2500 bezeichnet die Gruppe numerisch. Der Name wird normalerweise über die konfigurierten Identitätsquellen aufgelöst.
Gruppeninformationen im System
Lokale Gruppen werden typischerweise in /etc/group beschrieben. Ein Eintrag hat das Format:
projektteam:x:2500:alice,bob
projektteam: Gruppenname.x: Kennwort-Platzhalter; geschützte gruppenbezogene Informationen liegen nicht im Klartext an dieser Stelle.2500: numerische Gruppen-ID, kurz GID.alice,bob: Mitgliederliste, insbesondere für ergänzende Mitgliedschaften.
Die GID identifiziert eine Gruppe unabhängig von ihrem Namen. Dateisysteme speichern bei Eigentümern und Gruppeneigentümern grundsätzlich numerische IDs. Wird eine Gruppe umbenannt, können Dateien deshalb weiterhin derselben GID zugeordnet sein.
/etc/gshadow ist von /etc/group getrennt. Diese geschützte Datei enthält gruppenbezogene Sicherheitsinformationen und Administratorlisten. Sie sollte nur mit den vorgesehenen Verwaltungswerkzeugen geändert werden.
Bestehende Gruppen und Mitgliedschaften anzeigen
Die wichtigsten Abfragen sind:
$ id
uid=1001(alice) gid=1001(alice) groups=1001(alice),2500(projektteam),4(adm)
$ groups
alice projektteam adm
$ id bob
uid=1002(bob) gid=1002(bob) groups=1002(bob),2500(projektteam)
$ getent group
$ getent group projektteam
id zeigt UID, primäre GID und weitere Gruppen. groups gibt die Gruppen eines Benutzers kompakter aus; ohne Argument bezieht sich der Befehl auf den aktuellen Benutzer. Mit getent group werden Gruppeneinträge aus den konfigurierten Identitätsquellen abgefragt. Das kann neben lokalen Dateien auch LDAP, Active Directory oder andere zentrale Verzeichnisdienste einschließen.
Die primäre Gruppe eines Kontos lässt sich besonders klar mit id -gn und ihre GID mit id -g prüfen:
$ id -gn alice
alice
$ id -g alice
1001
Gruppen erstellen, ändern und löschen
Eine Gruppe anlegen
$ sudo groupadd projektteam
Wenn eine feste GID benötigt wird, kann sie angegeben werden:
$ sudo groupadd -g 2500 projektteam
Eine feste GID ist beispielsweise bei abgestimmten Systemen oder beim Zugriff auf gemeinsam verwendete Dateisysteme sinnvoll. Vorher muss geprüft werden, dass Name und GID noch nicht anderweitig verwendet werden:
$ getent group projektteam
$ getent group 2500
Gruppennamen sollten kurz, eindeutig und konsistent sein. Konflikte mit bestehenden Gruppen, reservierten Namen und zentral verwalteten Identitäten sind zu vermeiden.
Eine Gruppe ändern
$ sudo groupmod -n team-neu projektteam
$ sudo groupmod -g 2600 team-neu
Der erste Befehl benennt die Gruppe um, der zweite ändert ihre GID. Bei einer GID-Änderung müssen Dateien, Konfigurationen und Dienste geprüft werden, die noch auf die alte numerische GID verweisen.
Eine Gruppe löschen
$ sudo groupdel projektteam
Vor dem Löschen muss geprüft werden, ob die Gruppe noch als primäre Gruppe eines Benutzerkontos verwendet wird. Eine solche Gruppe sollte zunächst durch eine andere primäre Gruppe ersetzt werden:
$ id alice
$ sudo usermod -g alice alice
Zusätzlich sollten Dateibesitz, Dienste, Freigaben und Konfigurationsdateien untersucht werden. Das Löschen einer Gruppe ändert nicht automatisch die numerischen Gruppenzuordnungen aller Dateien in sinnvoller Weise.
Benutzer Gruppen zuordnen
Sekundäre Gruppe hinzufügen
$ sudo usermod -aG projektteam alice
Die Kombination aus -a und -G ist entscheidend. -G setzt die Liste der sekundären Gruppen. Ohne -a werden bestehende ergänzende Mitgliedschaften ersetzt. Für eine Erweiterung sollte daher fast immer usermod -aG GRUPPE BENUTZER verwendet werden.
Alternativ kann gpasswd verwendet werden:
$ sudo gpasswd -a alice projektteam
Primäre Gruppe festlegen
$ sudo usermod -g projektteam alice
-g ändert die primäre Gruppe. Das beeinflusst normalerweise die Gruppe, die bei neu erzeugten Dateien und Verzeichnissen eingetragen wird. Es ersetzt nicht die Liste der sekundären Gruppen.
Gruppen beim Anlegen eines Benutzers zuweisen
$ sudo useradd -m -G projektteam,adm alice
Mit -G werden beim Anlegen ergänzende Gruppen angegeben. Eine primäre Gruppe kann je nach Distribution mit -g festgelegt werden. Danach sollte die tatsächliche Konfiguration mit id alice kontrolliert werden.
Gruppenänderungen gelten nicht immer sofort für bereits laufende Sitzungen. Der Benutzer sollte sich ab- und wieder anmelden oder eine neue Login-Sitzung öffnen. Danach prüfen:
$ id
$ ls -ld /srv/projekt
Gruppenbesitz und Berechtigungen setzen
Gruppeneigentümer ändern
$ sudo chgrp projektteam /srv/projekt
$ sudo chown :projektteam /srv/projekt
chgrp ändert den Gruppeneigentümer. Die Schreibweise chown :gruppe erreicht dasselbe, ohne den Benutzereigentümer zu ändern. Benutzer und Gruppe können auch gemeinsam angegeben werden:
$ sudo chown alice:projektteam bericht.txt
Gruppenrechte mit chmod setzen
Symbolische Angaben sind leicht zu lesen:
$ sudo chmod g+r bericht.txt
$ sudo chmod g+rw bericht.txt
$ sudo chmod g+rwx /srv/projekt
g steht für die Gruppe. Mit g+rwx werden Lesen, Schreiben und Ausführen für den Gruppenteil gesetzt. Numerische Angaben verwenden die Werte r=4, w=2 und x=1:
$ sudo chmod 664 bericht.txt
$ sudo chmod 2775 /srv/projekt
664 bedeutet: Besitzer lesen und schreiben, Gruppe lesen und schreiben, Andere lesen. Bei 2775 ist die führende 2 das setgid-Bit; Besitzer und Gruppe erhalten rwx, Andere r-x.
Rekursive Änderungen wirken auf alle enthaltenen Objekte:
$ sudo chgrp -R projektteam /srv/projekt
Solche Befehle sollten nur gezielt eingesetzt werden. Eine rekursive Änderung kann private Dateien, ausführbare Dateien oder bereits korrekt gesetzte Ausnahmen unbeabsichtigt verändern.
Rechte auf Dateien und Verzeichnissen
| Recht | Datei | Verzeichnis | Typische Auswirkung |
|---|---|---|---|
r | Inhalt lesen | Einträge im Verzeichnis auflisten | Ohne x ist die Nutzung der gefundenen Pfade trotzdem eingeschränkt. |
w | Inhalt ändern oder leeren | Einträge erstellen, umbenennen oder löschen | Auf Verzeichnissen wird zusätzlich meist x benötigt. |
x | Datei als Programm ausführen | Verzeichnis betreten und auf Einträge zugreifen | Ohne x kann ein Benutzer Pfade innerhalb des Verzeichnisses meist nicht verwenden. |
Ein Schreibrecht auf einer Datei reicht daher nicht automatisch aus, um diese Datei in einem Verzeichnis zu bearbeiten oder zu löschen. Dafür müssen auch die Rechte des Verzeichnisses und aller übergeordneten Verzeichnisse passen.
Gemeinsam genutzte Projektverzeichnisse einrichten
Ein typischer Ablauf für ein Projektverzeichnis ist:
- Eine eigene Projektgruppe anlegen.
- Alle vorgesehenen Benutzer als sekundäre Mitglieder hinzufügen.
- Das Verzeichnis erstellen oder seinen Gruppeneigentümer ändern.
- Gruppenschreibrechte setzen.
- Das setgid-Bit aktivieren, damit neue Inhalte die Verzeichnisgruppe erben.
- Mit mehreren Konten testen.
$ sudo groupadd projektteam
$ sudo usermod -aG projektteam alice
$ sudo usermod -aG projektteam bob
$ sudo mkdir -p /srv/projekt
$ sudo chgrp projektteam /srv/projekt
$ sudo chmod 2775 /srv/projekt
$ ls -ld /srv/projekt
Das Ergebnis kann beispielsweise so aussehen:
drwxrwsr-x 2 root projektteam 4096 Aug 18 11:00 /srv/projekt
Das s im Gruppenbereich zeigt das setgid-Bit. Neue Dateien und Unterverzeichnisse erben dadurch normalerweise projektteam als Gruppeneigentümer. Das verhindert, dass neue Inhalte durch die private primäre Gruppe des Erstellers aus dem gemeinsamen Projektkontext fallen.
Umask und fehlende Gruppenschreibrechte
Die umask ist eine Vorgabe, die Standardrechte bei der Erstellung neuer Dateien und Verzeichnisse einschränkt. Selbst wenn das Projektverzeichnis korrekt eingerichtet ist, kann eine restriktive umask dazu führen, dass neue Dateien kein Gruppenschreibrecht besitzen.
$ umask
$ ls -l /srv/projekt/neue-datei
Wenn Mitglieder Dateien lesen, aber nicht bearbeiten können, müssen Gruppeneigentum, Rechte und umask gemeinsam geprüft werden. Für Ausnahmen oder unterschiedliche Rechte mehrerer Gruppen sind ACLs (Access Control Lists) geeignet. Eine klassische Unix-Datei kann mit ihren drei Rechteklassen nicht gleichzeitig zwei verschiedene zusätzliche Gruppenregeln ausdrücken.
Wichtige Befehle zur Gruppenverwaltung
| Zweck | Befehl | Erforderliche Rechte | Hinweis |
|---|---|---|---|
| Aktuelle Identität und Gruppen anzeigen | id | Keine besonderen Rechte | Zeigt UID, primäre GID und ergänzende Gruppen. |
| Gruppe anlegen | sudo groupadd projektteam | Administratorrechte | Optional mit -g GID. |
| Benutzer zu zusätzlicher Gruppe hinzufügen | sudo usermod -aG projektteam alice | Administratorrechte | -a verhindert das Entfernen bisheriger Zusatzgruppen. |
| Primäre Gruppe ändern | sudo usermod -g projektteam alice | Administratorrechte | Beeinflusst die Standardgruppe neuer Dateien. |
| Gruppeneigentümer ändern | sudo chgrp projektteam /srv/projekt | Eigentümer oder Administratorrechte | Mit -R rekursiv, aber vorsichtig. |
| Gruppenrechte setzen | sudo chmod g+rwx /srv/projekt | Eigentümer oder Administratorrechte | Symbolische und numerische Schreibweisen sind möglich. |
| Gruppeninformationen abfragen | getent group projektteam | Normalerweise keine besonderen Rechte | Berücksichtigt konfigurierte lokale und zentrale Quellen. |
Sicherheits- und Administrationshinweise
- Vergib Mitgliedschaften nach dem Prinzip der geringsten Rechte.
- Behandle Gruppen wie
sudo,wheel,adm,dockerundsystemd-journalkontextabhängig. Ihre Rechte können je nach Distribution und Konfiguration weitreichend sein. - Vermeide unnötige Schreibrechte für
Andereoder große, nicht klar abgegrenzte Gruppen. - Dokumentiere Änderungen an Gruppen, GIDs, Projektverzeichnissen und privilegierten Mitgliedschaften.
- Prüfe Änderungen auf Mehrbenutzersystemen mit den tatsächlich betroffenen Konten.
Auf Systemen mit LDAP, Active Directory oder einer anderen zentralen Benutzerverwaltung können Benutzer und Gruppen von einem Verzeichnisdienst stammen. Lokale Befehle wie id und getent zeigen dann die über die Systemkonfiguration verfügbaren Informationen. Eine Änderung mit usermod oder das direkte Bearbeiten von /etc/group verändert jedoch nur lokale Daten und ist für zentral verwaltete Konten möglicherweise nicht der richtige Weg.
Praxisbeispiel: Mitgliedschaft sicher erweitern
Vor einer Änderung werden die aktuellen Gruppen geprüft:
$ id alice
$ getent group projektteam
Danach wird die Projektgruppe ergänzt:
$ sudo usermod -aG projektteam alice
Anschließend wird eine neue Login-Sitzung geöffnet und die Mitgliedschaft erneut geprüft:
$ id
$ ls -ld /srv/projekt
Wichtig ist der Vergleich vor und nach der Änderung. Die bisherigen sekundären Gruppen von alice müssen erhalten bleiben. Würde stattdessen usermod -G projektteam alice ohne -a verwendet, könnte die bisherige Zusatzgruppenliste ersetzt werden.
Fehleranalyse bei Gruppen und Berechtigungen
Neue Mitgliedschaft wirkt nicht
- Mit
id BENUTZERdie Konfiguration und mitidin einer neuen Sitzung die aktive Mitgliedschaft vergleichen. - Ab- und wieder anmelden oder eine neue Login-Sitzung öffnen.
- Mit
ls -ld ZIELGruppeneigentum und Verzeichnisrechte kontrollieren. - Bei Bedarf
usermod -aGodergpasswd -akorrekt ausführen.
Bisherige Zusatzgruppen fehlen
Wurde usermod -G ohne -a verwendet, wurde die Liste der sekundären Gruppen ersetzt. Mit id BENUTZER wird der Verlust sichtbar. Die erforderlichen Gruppen müssen anschließend vollständig wiederhergestellt werden; für künftige Ergänzungen ist usermod -aG zu verwenden.
Projektdateien bleiben für andere Mitglieder nicht bearbeitbar
- Mit
ls -lprüfen, ob neue Dateien wirklich die Projektgruppe besitzen. - Mit
ls -ldkontrollieren, ob das Projektverzeichnis das setgid-Bit besitzt. - Gruppenrechte auf bestehenden Dateien prüfen.
- Die umask und gegebenenfalls Standard-ACLs untersuchen.
groupdel schlägt fehl
Häufig ist die Gruppe noch die primäre Gruppe eines Benutzerkontos. Die betroffenen Konten müssen ermittelt und zunächst einer anderen primären Gruppe zugeordnet werden. Zusätzlich sind Dateibesitz und Konfigurationen zu prüfen, bevor die Gruppe gelöscht wird.
Ein Verzeichnis ist lesbar, aber Dateien lassen sich nicht öffnen oder anlegen
Bei Verzeichnissen haben r, w und x andere Bedeutungen als bei Dateien. Zum Auflisten wird r benötigt, zum Betreten und Zugreifen auf Einträge meist x, zum Erstellen oder Löschen von Einträgen w zusammen mit x. Kontrolliere mit ls -ld auch alle übergeordneten Verzeichnisse.
Prüfungsrelevante Zusammenfassung
- Jeder Benutzer hat genau eine primäre Gruppe und kann mehrere sekundäre Gruppen besitzen.
- Neue Dateien erhalten normalerweise die primäre Gruppe des Erstellers, sofern Vererbung durch setgid oder andere Mechanismen nicht greift.
- In
ls -lstehen nach dem Rechteblock zuerst Besitzer und dann Gruppeneigentümer. /etc/groupenthält lokale Gruppennamen, GIDs und Mitgliederinformationen;/etc/gshadowenthält geschützte gruppenbezogene Sicherheitsdaten.getent groupkann neben lokalen auch zentrale Identitätsquellen berücksichtigen.- Bei
usermod -aGverhindert-adas unbeabsichtigte Ersetzen bestehender Zusatzgruppen. chgrpändert den Gruppeneigentümer,chmoddie Rechte.- Das setgid-Bit auf einem Verzeichnis sorgt normalerweise dafür, dass neue Inhalte die Verzeichnisgruppe erben.
- Die umask kann Gruppenschreibrechte bei neu erstellten Dateien einschränken.
- Für feinere Regeln als Besitzer, eine Gruppe und Andere sind ACLs geeignet.
Weitere Zusammenhänge zu Gruppen, Mitgliedschaften und Dateirechten findest du unter Gruppen in Linux.