===== Gruppen / Gruppenverwaltung unter Unix =====
Quelle((http://de.linwiki.org/wiki/Linuxfibel_-_System-Administration_-_Gruppenverwaltung))
====Übersicht====
Berechtigungen beim Zugriff auf Dateien (Verzeichnisse, Geräte usw. sind bekanntlich nur spezielle Varianten von Dateien) werden unter Unix in drei »Ebenen« vergeben. Da wäre der Besitzer einer Datei, der letztlich selbst über die Rechte des Zugriffs entscheidet. Diesen Befugnissen für eine einzelne Person stehen die »Weltrechte« gegenüber, die bestimmen, was alle »Nicht-Besitzer« mit der Datei anstellen dürfen. Natürlich existieren genügend Szenarien, in denen Rechte weder exklusiv einer Person zugeordnet, noch jedermann gewährt werden sollten. Genau diese Beschränkung der Rechte auf einen bestimmten Personenkreis kann über Gruppen geregelt werden, indem die betreffende Datei einer konkreten Gruppe gehört, deren Mitglieder die befugten Personen umfassen.
Die Zugehörigkeit von Benutzern zu einer Gruppe kann auf mehreren Wegen erfolgen. Zum einen wird durch den Gruppeneintrag in der Datei [[Linuxfibel - System-Administration - Nutzerverwaltung#Die Datei /etc/passwd|/etc/passwd]] die Default-Gruppe eines Benutzers bestimmt. Legt dieser Benutzer z.B. eine neue Datei an, wird diese zunächst dieser Gruppe gehören. Soll ein Benutzer mehreren Gruppen angehören, so ist er in die Liste der Gruppenmitglieder der Datei [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/group|/etc/group]] aufzunehmen. Ein Benutzer kann dann für die Dauer der aktuellen Sitzung eine dieser Gruppen zu seiner Default-Gruppe ernennen. Und schließlich besteht die Möglichkeit, eine Gruppe durch ein Passwort zu schützen. In diesem Fall darf jeder Mitglied der Gruppe werden, der das Passwort kennt.
====Die Datei /etc/group====
In dieser Datei befinden sich die verschiedene Benutzergruppen und ihre Mitglieder. Ein Eintrag besitzt folgenden Aufbau:
Gruppenname:Passwort:Gruppennummer:Mitgliederliste
Die Einträge bedeuten:
''Gruppenname''
Der Name der Gruppe; auch hier ist die Beschränkung auf Kleinbuchstaben und maximal 8 Zeichen üblich (aber nicht notwendig).
''Passwort''
Benutzer können bei Kenntnis des Passwortes die Gruppe wechseln, auch wenn sie kein Mitglied der Gruppe sind; es gelten die gleichen Aussagen wie für die Passwörter der [[Linuxfibel - System-Administration - Nutzerverwaltung#Die Datei /etc/passwd|/etc/passwd]].
''Gruppennummer''
Nichtnegative Zahl < 64000. Gruppennummern < 100 sind für Systemzwecke reserviert und sollten nicht verwendet werden.
''Mitgliederliste''
Durch Komma getrennte Liste der Nutzerkennzeichen.
Der zweite und vierte Eintrag können entfallen, d.h. die Gruppe ist nicht durch ein Passwort geschützt bzw. in die Gruppe kann kein Benutzer wechseln, der diese nicht als Default-Gruppe hat.
Die Passwortabfrage entfällt für Gruppenmitglieder. Passwörter werden bei Verwendung des Shadow-Passwort-Systems (dieses verwenden alle aktuellen Distributionen) in der Datei [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/gshadow|/etc/gshadow]] gespeichert.
====Die Datei /etc/gshadow====
Anstatt Gruppenpasswörter und -mitglieder in der für alle lesbaren Datei [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/group|/etc/group]] zu speichern, werden bei Verwendung von Shadow-Passwort-Systemen diese in der nur für Root lesbaren Datei »/etc/gshadow« gehalten. Der Aufbau eines Eintrages besitzt folgendes Format:
Gruppenname:Passwort:Gruppenverwalter:Mitgliederliste
Die Einträge bedeuten:
''Gruppenname''
Wie in [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/group|/etc/group]]
''Passwort''
Das verschlüsselte Passwort; meist wird auf eine solche Möglichkeit verzichtet. Zum Setzen des Gruppenpasswortes bedient sich der Gruppenverwalter des Kommandos gpasswd.
''Gruppenverwalter''
Nutzerkennzeichen der/des Benutzer(s), den/die der Systemverwalter zu Administratoren für diese Gruppe ernannt hat. Der hier angeführte Nutzer darf andere Nutzer zur Gruppe hinzufügen und deren Einträge auch wieder entfernen, sowie das Gruppenpasswort ändern.
''Mitgliederliste''
Durch Komma getrennte Liste der Nutzerkennzeichen.
====Konvertieren der Einträge====
''Anmerkung:'' Die nachfolgend beschriebenen Programme liegen nicht jeder Distribution bei. Ob sie in Ihrer Version der Shadow-Utilities vorliegen, erkennen Sie anhand der Ausgabe von:
user@sonne> rpm -ql shadow
Bevorzugen Sie die manuelle Bearbeitung der Konfigurationsdateien, so können Sie im Falle der Gruppenverwaltung auf zwei Kommandos zurückgreifen, die eine automatische Konvertierung der Dateien [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/group|/etc/group]] und [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/gshadow|/etc/gshadow]] in das jeweils andere Format vornehmen. Ein solche Umwandlung kann in mehreren Situationen erforderlich werden:
* Sie bearbeiten die [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/group|/etc/group]] per Hand und möchten daraus die [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/gshadow|/etc/gshadow]] automatisch generieren lassen
* Sie stellen Ihr Passwortsystem nachträglich vom traditionellen Mechanismus auf das Shadow-System um
* Sie wollen das Shadow-System entfernen
Das Kommando '''grpconv''' erzeugt aus einer vorhandenen Datei [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/group|/etc/group]] und ggf. [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/gshadow|/etc/gshadow]] eine neue Datei [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/gshadow|/etc/gshadow]], indem es Passwörter und Mitgliederlisten aus der Gruppen- in die Shadowdatei überträgt:
root@sonne> grpconv
''grpunconv'' schreibt die Passwörter und Mitgliederlisten aus der [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/gshadow|/etc/gshadow]] in die Datei [[Linuxfibel - System-Administration - Gruppenverwaltung#Die Datei /etc/group|/etc/group]] zurück und löscht anschließend die Shadowdatei.
root@sonne> grpunconv
Eventuell wird eine Konsistenzprüfung der beiden Dateien nötig. Das Kommando '''grpck''' gibt enthaltene Unstimmigkeiten aus und fordert ggf. zu Korrekturen auf:
root@sonne> '''grpck'''
group uucp: no user uucpfaxroot
delete member `uucpfaxroot'? n
grpck: no changes
====Anlegen von Gruppen====
Das Anlegen neuer Gruppen kann prinzipiell auf drei Wegen erfolgen:
* mittels reiner Handarbeit
* mit Hilfe der allgemeinen Werkzeuge
* durch Verwendung distributionseigener Verwaltungstools
===Die Handarbeit===
1. Der Systemverwalter bearbeitet die Datei /etc/group. Als Editor ist das Kommando '''vigr''' zu empfehlen (falls installiert), da sich das Kommando selbsttätig um die Dateisperre kümmert. Welcher Editor sich hinter dem Aufruf verbirgt, kann durch Setzen der Shellvariablen "$VISUAL" bzw. "$EDITOR" (Auswertung in dieser Reihenfolge) gesteuert werden. Erst wenn beide Variablen nicht gesetzt sind, wird auf den [[Linuxfibel - Unix-Werkzeuge - Vi|vi]] zurück gegriffen.
root@sonne> '''vigr'''
...
fibel::102:
'''newgroup::103:'''
~
~
~
'''-- INSERT --''' 46,14 Bot
Achten Sie auf die Eindeutigkeit von Gruppenname und -nummer; die beiden anderen Felder sollten frei bleiben.
2. Nun ist die Datei /etc/gshadow anzupassen. Falls vorhanden, kann das Kommando '''grpconv''' verwendet werden, das automatisch eine Angleichung der Einträge vornimmt. Ist grpconv nicht installiert, muss die Datei von Hand bearbeitet werden. '''vigr -s''' öffnet die Datei /etc/gshadow.
root@sonne> '''vigr -s'''
...
fibel::root:user
'''newgroup::root:'''
~
~
~
'''-- INSERT --''' 46,14 Bot
In die dritten Spalte ist der Gruppenverwalter einzutragen, die 4. Spalte kann eine kommaseparierte Liste der Gruppenmitglieder beinhalten.
3. Falls erforderlich, ist das Gruppenpasswort zu setzen:
root@sonne> '''gpasswd newgroup'''
Changing the password for group users
New Password:
Re-enter new password:
4. Die Gruppenmitglieder sind anzulegen (siehe [[Linuxfibel - System-Administration - Gruppenverwaltung#Gruppenmitglieder|Gruppenmitglieder]]).
===Allgemeine Werkzeuge===
Auf Systemen mit traditioneller Passwort-Verwaltung heißt das benötigte Kommando '''addgroup'''. Seine Bedienung ist analog dem nachfolgend diskutiertem '''groupadd''', das auf Systemen mit Shadow-Passwort-Verwaltung eingesetzt wird. Letzteres Kommando nimmt automatisch die notwendigen Änderungen in der Datei /etc/gshadow vor.
Um eine neue Gruppe "newgroup" mit der Gruppennummer 111 anzulegen, gibt Root Folgendes ein:
root@sonne> groupadd -g 111 newgroup
Wird auf die Angabe einer Gruppennummer verzichtet, bekommt "newgroup" die nächste freie Gruppennummer zugewiesen. "groupadd" beendet seine Arbeit mit einer Fehlermeldung, falls eine schon verwendete Gruppennummer als Argument übergeben wurde. Ist eine doppelte Vergabe von GID's erwünscht, muss das dem Kommando mit der Option "-o" mitgeteilt werden:
root@sonne> groupadd -g 0 -o admins
===Distributionseigene Werkzeuge===
Die distributionseigenen Werkzeuge verpacken den Kommandozeilenaufruf in einen grafischen Dialog. Ihr Vorteil liegt oft in der Kopplung mehrerer Kommando in einer Maske, so ist es möglich, während des Anlegens einer Gruppe das Passwort zu setzen und gleichzeitig die Liste der Mitglieder anzulegen. Der Nachteil der Tools ist ihre meist auf nur ein System beschränkte Verfügbarkeit.
RedHat-basierende Distributionen administrieren die Gruppen über '''userconf'''.
SuSE hat die Gruppenverwaltung in '''Yast''' integriert .
====Löschen von Gruppen====
===Die Handarbeit===
Die Handarbeit läuft auf das manuelle Löschen der entsprechenden Einträge der Dateien /etc/group und /etc/gshadow hinaus.
1. Entfernen Sie den Gruppeneintrag aus der Datei /etc/group. Falls installiert, nutzen sie zum Bearbeiten das Kommando '''vigr'''.
2. Entfernen Sie den Gruppeneintrag aus der Datei /etc/gshadow. Dies kann durch Konvertierung mit Hilfe des Aufrufes von '''grpconv''' geschehen, oder durch Editieren der Datei ('''vigr -s'''). Falls beide Kommandos nicht auf dem System verfügbar sind, hilft jeder andere Editor.
3. Vergewissern Sie sich, dass kein Nutzer die entfernte Gruppe als Default-Gruppe in der Datei [[Linuxfibel - System-Administration - Nutzerverwaltung#Die Datei /etc/passwd|/etc/passwd]] eingetragen hat. Passen Sie solche Eintrage ggf. an (durch eine vorhandene Gruppe ersetzen).
4. Eventuell sollten Sie Dateien im System, die dieser Gruppe gehören, einer anderen Gruppe zuordnen (Siehe [[Linuxfibel - System-Administration - Zugriffsrechte#Besitzer ändern|Systemverwaltung->Zugriffsrechte->Besitzer]] ändern) bzw. solche Dateien entfernen.
===Allgemeine Werkzeuge===
In Nicht-Shadow-Passwort-Systemen ist '''delgroup''' das Kommando. Dessen Bedienung erfolgt analog zum Kommando '''groupdel'''. Beide Kommandos erwarten als Argument einzig den Namen der zu löschenden Gruppe. "groupdel" entfernt zusätzlich den Eintrag aus der Shadow-Gruppendatei.
root@sonne> '''groupdel fibel'''
===Distributionseigene Werkzeuge===
Das Entfernen kann in den Tools '''userconf''' von RedHat bzw. '''Yast''' (Administration des Systems->Gruppenverwaltung) bei SuSE erfolgen.
====Gruppenmitglieder====
===Die Handarbeit===
In einem System mit Shadow-Passwort-Verwaltung werden die Nutzerkennzeichen der Mitglieder einfach in das vierte Feld des betreffenden Gruppeneintrags der Datei /etc/gshadow eingetragen. Die einzelnen Einträge sind durch Kommas voneinander zu trennen. Zum Bearbeiten der Datei sollte, falls installiert, das Kommando '''vigr -s''' verwendet werden.
Bei Systemen ohne Shadow-Passwort-Verwaltung wird die Nutzerliste in das vierte Feld des Eintrages der Datei /etc/gshadow geschrieben. Dort können die Nutzer zwar auch bei Shadow-Systemen stehen, doch ist diese Liste dann für jeden lesbar!
===Allgemeine Werkzeuge===
Zum Verwalten von Gruppenmitgliedern dient das Kommando '''gpasswd'''. Sowohl Root als auch von ihm ernannte [[Linuxfibel - System-Administration - Gruppenverwaltung#Gruppenverwalter|Gruppenverwalter]] können mit Hilfe von "gpasswd"
''Mitglieder hinzufügen''
root@sonne> gpasswd -a user fibel
Adding user user to group fibel
''Mitglieder entfernen''
root@sonne> gpasswd -d user fibel
Removing user user from group fibel
''Das Gruppenpasswort ändern''
root@sonne> gpasswd fibel
Changing the password for group fibel
New Password:
Re-enter new password:
''Das Gruppenpasswort löschen''
root@sonne> gpasswd -r fibel
''Alle Gruppenmitglieder entfernen''
root@sonne> '''gpasswd -R fibel'''
===Distributionseigene Werkzeuge===
Ein Eintrag von Nutzern kann durch Editieren der Gruppeneinträge mit den Tools '''userconf''' von RedHat bzw. ''Yast'' (Administration des Systems->Gruppenverwaltung) bei SuSE erfolgen.
====Gruppenwechsel====
Der Wechsel einer Gruppe ist notwendig, falls:
* Der Nutzer kein ständiges Mitglied der Gruppe ist (dann muss er das Gruppenpasswort kennen)
* Alle neu anzulegenden Dateien automatisch der neuen Gruppe zugeordnet werden sollen
* Kommandos mit der Berechtigung einer anderen Gruppe ausgeführt werden sollen
Der Gruppenwechsel erfolgt mit dem Kommando '''newgrp''':
'''Aufruf''': newgrp [-] [group]
Das "-" als Argument bewirkt eine erneute Initialisierung aller Umgebungsvariablen inklusive einem eventuellen Verzeichniswechsel. Wird dem Kommando kein Gruppenname angegeben, wird in die Default-Gruppe (aus /etc/passwd) gewechselt. Ist ein Nutzer nicht zum Wechsel berechtigt, wird er zur Eingabe des Passwortes aufgefordert.
user@sonne> id
uid=500(user) gid=100(users) Gruppen=100(users),102(fibel)
user@sonne> newgrp fibel
user@sonne> id
uid=500(user) gid=102(fibel) Gruppen=100(users),102(fibel)
user@sonne> newgrp root
Password:
Um die effektive Gruppe nur während der Ausführung eines einzelnen Kommandos zu wechseln, kann auf das Kommando ''sg'' zurückgegriffen werden:
''Aufruf'': sg [-] [group [[-c] command]]
Die Angabe des Gruppennamens ist zwingend. Ein Aufruf ohne Kommando funktioniert zwar, bewirkt aber praktisch nichts.
user@sonne> sg - root ifconfig
Password:
Der Gruppenwechsel mittels newgrp kann vom (Gruppen)Administrator unterbunden werden:
root@sonne> gpasswd -R fibel
In die Gruppe "fibel" kann nun niemand mehr wechseln (alle Mitglieder mit Ausnahme von "root" wurden aus der Liste entfernt.).
====Gruppenverwalter====
Die Verwaltung aller Gruppen einer einzigen Person aufzubürden, kann diese schnell überfordern. Warum sollte die Mitglieder einer Gruppe, die gemeinsam an einem Programmierprojekt arbeiten, nicht auch der Projektleiter administrieren?
Das Einrichten und Entfernen von Gruppen wird immer Root anlasten, aber die Verwaltung dieser kann er delegieren:
root@sonne> gpasswd -A user fibel
Der Nutzer "user" ist nun berechtigt, Nutzer zur Gruppe "fibel" hinzuzufügen bzw. jene aus dieser Gruppe zu entfernen. Außerdem kann der Gruppenverwalter das Passwort einer Gruppe entfernen, so dass kein Nicht-Mitglied sich der Gruppe zuordnen kann:
user@sonne> gpasswd -r fibel
Root kann die Liste der Gruppenverwalter wieder löschen:
root@sonne> gpasswd -A "" fibel
Funktioniert leider unter Suse 10 nicht :(