Zurück

1.111.1

Verwalten von Benutzer- und Gruppenkonten und verwandten Systemdateien


Beschreibung: Prüfungskandidaten sollten in der Lage sein, Benutzerkonten hinzuzufügen, zu löschen, zu deaktivieren und zu ändern. Enthaltene Tätigkeiten beinhalten das Hinzufügen und Löschen von Gruppen und das Ändern der Benutzer- und Gruppeninformation in den passwd/group Datenbanken. Ebenfalls enthalten ist das Erstellen von speziellen und eingeschränkten Konten.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:


Um mit einem Linux-Rechner arbeiten zu können, muß man eine gültige Userkennung auf diesem Rechner besitzen. Ein wichtiger Teil der administrativen Aufgaben eines Systemverwalters bezieht sich auf die Verwaltung dieser User-Accounts. Dieser Abschnitt behandelt die dazu notwendigen Fähigkeiten.

Ein User auf einem Linux-Rechner wird intern über seine UserID (UID), eine Nummer von 0 bis 65535, verwaltet. Der User mit der Nummer 0 ist der Systemverwalter. Nicht der Name root sondern die UserID 0 machen ihn zum Superuser. Alle anderen User sind sogenannte Normaluser, deren Rechte zwar stark unterschiedlich sein können, wobei der Unterschied aber nicht über die UserID definiert ist.

Jeder User gehört mindestens einer Gruppe zu, kann aber Mitglied beliebig vieler Gruppen sein. Eine dieser Gruppen ist die Login-Gruppe (manchmal auch primäre Gruppe genannt) des Users, die Gruppe, der später die Dateien gehören werden, die der User anlegt.

Die Dateien, in denen die Informationen über User und Gruppen abgelegt werden und die Befehle, die wir zum Anlegen und Bearbeiten dieser Userinformationen brauchen werden im Folgenden dargestellt.

Die Datei /etc/passwd

Die Datei /etc/passwd enthält alle Usereinstellungen, bis auf das verschlüsselte Passwort. In älteren Versionen ist auch das Passwort hier abgelegt, aus Sicherheitsgründen wurde es aber in den neueren Versionen in die Datei /etc/shadow ausgelagert.

Die Datei /etc/passwd muss für alle User lesbar sein, denn sie ist der einzige Ort, an dem die Verbindung zwischen UserID und Usernamen hergestellt werden kann.

  -rw-r--r--   ...    /etc/passwd
Das wird praktisch bei jedem Aufruf von Programmen benötigt, die auch nur irgendetwas mit Usernamen zu tun haben, sogar ein ls -l braucht also diesen Zugriff. Wenn das verschlüsselte Passwort hier abgelegt wäre, so könnte ein Angreifer die Datei lesen, das Passwort nehmen und über eine brute force attack (Ausprobieren aller denkbaren Möglichkeiten) das Passwort entschlüsseln. Das war der Grund für die Auslagerung.

Die Datei /etc/passwd ist eine Textdatei, die für jeden User eine Zeile angelegt hat. Diese Zeile enthält verschiedene Felder, die durch einen Doppelpunkt voneinander getrennt sind. Das Format ist:

  Username:x:UserID:GruppenID:Beschreibung:Homeverzeichnis:Startshell
Dabei bedeuten die einzelnen Felder:

Username
Der Name des Users. Alphanumerische Zeichen.

x
Hier stand früher das verschlüsselte Passwort. Das x bedeutet, daß die Passwort-Information jetzt in /etc/shadow ausgelagert wurde.

UserID
Die numerische UserID (UID). Eine einheitliche Nummer von 0 bis 65534. Wenn mehrere User die selbe ID benutzen, dann sind sie aus der Sich des Systems die selben User. Die UID 0 ist für den Systemverwalter reserviert.

GruppenID
Die numerische GruppenID (GID) der Login-Gruppe des Users. Der User kann noch Mitglied anderer Gruppen sein, diese Gruppe ist aber seine initiale Gruppe, d.h. alle Dateien, die der User anlegt werden normalerweise die Gruppenzugehörigkeit zu dieser Gruppe haben. (Ausnahme: Dateien, die in Verzeichnissen angelegt werden, die eine andere Gruppenzugehörigkeit haben und das SGID-Bit gesetzt haben)

Beschreibung
Hier kann eine kurze Beschreibung des Users stehen. Das Format ist technisch gesehen frei wählbar. Inzwischen hat sich ein Standard durchgesetzt, der die folgenden Informationen hier ablegt: Diese Informationen werden mit Kommata voneinander getrennt. Programme wie finger greifen auf diese Information zu. Dieses Feld kann aber auch leergelassen werden oder einfach nur eine Kurzbeschreibung beinhalten.

Homeverzeichnis
Das Verzeichnis des Users. Beim Login wird automatisch in dieses Verzeichnis gewechselt.

Startshell
Die Shell, die beim Login gestartet werden soll. Hier wird bei normalen Usern meist die /bin/bash oder /usr/bin/csh stehen. Ein Sonderfall sind Useraccounts, die nötig sind um bestimmte Dienste anzubieten (z.B. Samba, pop3, ...). Solche User sollen evt. keine Möglichkeit haben, sich regulär einzuloggen. In einem solchen Fall wird hier zweckmäßigerweise /bin/false eingetragen. Das ist ein Programm, das nichts tut, als einen Rückgabewert von 1 zu produzieren. Wenn ein User diesen Eintrag hat, kann er sich nicht einloggen, bzw. er kann schon, fliegt aber sofort wieder raus, weil seine "Shell" sich sofort wieder verabschiedet.

Eine typische Zeile aus /etc/passwd könnte also folgendermaßen aussehen:

  root:x:0:0:Hans Maier,1,089/12345,089/54321,Systemverwalter:/root:/bin/bash
Oft wird das Beschreibungsfeld gar nicht ausgefüllt oder nur mit einem kurzen Namen versehen, dann wird es noch einfacher:
  root:x:0:0::/root:/bin/bash

Wenn ein Feld also leergelassen wird, folgen die Doppelpunkte direkt aufeinander.

Die Datei /etc/shadow

Nachdem das verschlüsselte Passwort jetzt nicht mehr in der Datei /etc/passwd abgelegt wird, ist dazu eine andere Datei notwendig. Diese Datei heißt /etc/shadow und birgt neben dem Passwort noch einige Einstellmöglichkeiten, die sich alle um das Passwort drehen. Wie schon in /etc/passwd handelt es sich um eine reine Textdatei, die für jeden User eine Zeile veranschlagt. Wieder ist jede Zeile in Felder aufgeteilt, die durch Doppelpunkte getrennt werden.

Die Datei /etc/passwd ist nicht lesbar für alle sondern meist nur durch den Systemverwalter. Manche Distributionen legen eine Gruppe shadow an, deren Mitglieder noch ein Leserecht auf diese Datei haben, das ist aber nicht zwingend erforderlich. Ein Zugriffsrecht von

-rw-------    ...   /etc/shadow

ist völlig ausreichend.

Die interne Struktur jeder Zeile ist folgende:

  Username:Passwort:Alter:min_Alter:max_Alter:Warnzeit:Pufferzeit:Ungültigkeit:Reserviert 
Die Bedeutungen der einzelnen Felder sind:

Username
Der Username, genau so wie in /etc/passwd. Das ist sozusagen das Schlüsselfeld des Datensatzes, mit dem die Verbindung zu den Zeilen aus /etc/passwd hergestellt wird.

Passwort
Hier steht das verschlüsselte Passwort. Linux verschlüsselt seine Passwörter mit einem nicht-reversiblen Verschlüsselungsmechanismus durch den Systemaufruf crypt. Das Ergebnis ist immer eine 13-24-stellige Zeichenkette, egal wie lange das eingegebene Passwort war. Wenn hier also eine Zeichenkette steht, die nicht 13-24-stellig ist, so existiert kein Passwort, das durch Aufruf von crypt in diese Zeichenkette verschlüsselt werden würde. Damit ist der Eingang faktisch gesperrt. Häufig steht hier z.B. ein einzelnes Sternchen (*) oder ein Ausrufungszeichen (!). Das heißt, daß dieser Eingang verschlossen ist, es existiert kein gültiges Passwort. Der Systemverwalter kann sich aber mit dem Befehl su in diesen Benutzer verwandeln und unter seiner Effektiven UID arbeiten. Steht in diesem Feld nichts, folgt also ein Doppelpunkt dem nächsten, so gibt es kein Passwort, der Eingang ist frei, der User kann sich ohne Nennung eines Passworts einloggen.

Alter
Hier stehen die Anzahl der Tage seit dem 1. Januar 1970 bis zu dem Tag, an dem das Passwort das letzte Mal verändert wurde. Keine Angst, das müssen Sie nicht selbst ausrechnen, das Programm passwd tut das für Sie und trägt diese Zahl hier ein.

min_Alter
Das Mindestalter eines Passworts, bevor es geändert werden darf. Also genau genommen, die Anzahl der Tage, die seit dem letzten Passwort-Wechsel vergehen müssen, damit es erneut verändert werden darf. Das hat in der Praxis eigentlich nur dann eine Bedeutung, wenn einem User verboten werden soll, das Passwort zu ändern (z.B. wenn mehrere User sich einen Account teilen). Wenn dieses Feld eine größere Zahl aufweist, als das nächste, dann darf der User sein Passwort nie ändern.

max_Alter
Die maximale Anzahl von Tagen, bevor ein Passwort geändert werden muß. Viele Hochsicherheitssysteme verlangen, daß die Passwörter regelmäßig geändert werden müssen. Hier wird die Anzahl der Tage eingetragen, die maximal zwischen zwei Wechseln des Passworts vergehen dürfen.

Warnzeit
Damit ein User merkt, das das Passwort bald geändert werden muß, kann hier die Anzahl der Tage vor dem Ablauf der Gültigkeit eines Passworts angegeben werden, ab der der User beim Login auf den baldigen Ablauf hingewiesen wird.

Pufferzeit
Weil es sein kann, daß ein User ein paar Tage nicht eingeloggt war, kann er womöglich die Warnmeldung nie gesehen haben, die ihn auf das baldige Ablaufen des Passworts hingewiesen hätte. Hier kann man die Pufferzeit in Tagen angeben, die nach dem Ablaufen des Passworts verstreichen darf, bevor der Account tatsächlich ungültig wird.

Ungültigkeit
Dieses Feld wird nur für Accounts benötigt, die zeitlich befristet sind. Hier steht die Anzahl von Tagen seit dem 1. Januar 1970, bis zu dem Tag, an dem der Account ungültig wird. Auch dazu gibt es selbstverständlich Programme, die diesen Wert in ein Datum umrechnen.

Reserviert
Ein reserviertes Feld für zukünftige Erweiterungen.

Ein minimaler Eintrag besteht nur aus dem Usernamen, gefolgt von 8 Doppelpunkten. Das wäre dann ein User, der sich ohne Passwort einloggen darf. Die anderen Felder sind optional und können - je nach Sicherheitsbedarf des Systems - gesetzt werden, wie gewünscht.

Die Datei /etc/group

Diese Datei enthält die Gruppeninformationen für die Usergruppen des Systems. Sie ist - wie die anderen Dateien der Userverwaltung - wieder eine Textdatenbank mit Feldern, die durch Doppelpunkte voneinander getrennt sind. Jede Zeile beschreibt eine Gruppe.

Die Zeilen definieren die Mitglieder der Gruppen, die nicht die Login Gruppen der User sind. Die Login-Gruppen-Mitgliedschaft ist in dieser Datei also nicht verzeichnet.

Wie schon bei der Datei /etc/passwd, so gilt auch bei der Datei /etc/group, daß sie für alle Welt lesbar sein muß. Daher sind wieder die Passwörter der Gruppen in die Datei /etc/gshadow ausgelagert worden, deren Format gleich im Anschluß besprochen wird. Wie in /etc/passwd, so steht im Passwort-Feld in /etc/group heute einfach ein x.

Das Format der Zeilen in /etc/group ist:

  Gruppenname:x:GruppenID:Liste der Mitglieder

Die Bedeutung der einzelnen Zeilen ist schnell erklärt:

Gruppenname
Der Name der Gruppe, wie er dann z.B. von ls -l ausgegeben wird.

x
Das Feld, in dem früher das Passwort stand.

GruppenID
Die numerische GruppenID (GID), die die Gruppe kennzeichnet. Die Datei /etc/passwd referenziert die Login-Gruppen der Usereinträge z.B. mit dieser Nummer.

Liste der Mitglieder
Eine durch Kommata getrennte Liste von Usernamen. User, die hier aufgeführt sind, sind durch diesen Eintrag Mitglieder der jeweiligen Gruppe. Die Gruppenmitgliedschaft der Login-Gruppe eines Users muß hier nicht aufgeführt sein.

Gruppenmitgliedschaften sind oft nicht ganz richtig verstanden. Aus diesem Grund folgt hier noch eine kurze Beschreibung der Mechanismen:

Jeder User kann Mitglied beliebig vieler Gruppen sein, hat aber immer genau eine Login-Gruppenmitgliedschaft. Diese Login-Gruppenmitgliedschaft wird in /etc/passwd definiert. Jede weitere Gruppenmitgliedschaft eines Users wird in der Datei /etc/group definiert.

Die pure Mitgliedschaft in einer Gruppe gibt dem User die Rechte eines Gruppenmitglieds auf Dateien, die dieser Gruppe zugehören. Es sind keine weiteren Befehle nötig, um diese Rechte wahrzunehmen. Ein Beispiel:

Wenn der User foo Mitglied der Gruppen users, bar, foobar und uucp ist, dann kann er alle folgenden Dateien lesen:

-rw-r-----   1 root     users          294 Jul 29  2000 Datei1
-rw-r-----   1 root     bar            294 Jul 29  2000 Datei2
-rw-rw----   1 root     foobar         294 Jul 29  2000 Datei3
-rw-r-----   1 root     uucp           294 Jul 29  2000 Datei4
Die Datei Datei3 dürfte er sogar beschreiben.

Um diese Rechte auszuüben, muß der User foo keinerlei zusätzliche Befehle wie newgrp oder ähnliches benutzen, er hat die Rechte einfach durch die bloße Gruppenmitgliedschaft.

Wenn ein User eine Datei anlegt, dann bekommt diese Datei automatisch die Gruppenzugehörigkeit zur Login-Gruppe des Users. Das kann durch Befehle wie newgrp oder sg verändert werden.

Die Datei /etc/gshadow

Gruppenpasswörter werden nicht dazu benötigt, eine Gruppenmitgliedschaft zu beweisen. Sie dienen nur dazu, einem User, der nicht Mitglied einer bestimmten Gruppe ist, zeitweilig die Rechte eines Mitglieds zu geben. Dazu muß er das Gruppenpasswort bekommen. Das wird nur sehr selten benötigt, denn es ist ja nicht viel Aufwand, einen User zu einem Gruppenmitglied zu machen.

Auch wenn ein User selbst kein Passwort hat, aber die Gruppe, zu der er mit newgrp wechseln will eines besitzt, muß es angegeben werden.

Damit die Passwörter für Gruppen nicht einlesbar sind, werden sie wieder in einer Datei abgelegt, die nicht für alle Welt lesbar ist. Diese Datei heißt /etc/gshadow. Das Format dieser Datei ist wieder ähnlich wie bei den anderen besprochenen Dateien. Zeilen, die in Felder aufgeteilt sind, durch Doppelpunkte voneinander getrennt. Das genaue Format ist:

  Gruppenname:Passwort:Gruppenverwalter:Liste der Mitglieder
Die einzelnen Felder haben folgende Bedeutung:

Gruppenname
Der ausgeschriebene Name der Gruppe, wie er in /etc/group steht

Passwort
Das verschlüsselte Passwort der Gruppe. Steht hier eine Zeichenkette, die kein gültiges verschlüsseltes Passwort darstellt, also eine nicht 13-24 stellige Zeichenkette, dann hat die Gruppe kein gültiges Passwort. Das heißt, User, die nicht Mitglied der Gruppe sind, sich nicht mit newgrp zum Gruppenmitglied erklären können.

Gruppenverwalter
Jede Gruppe kann einen User haben, der als Gruppenverwalter fungiert. Ein Gruppenverwalter darf

In diesem Feld steht der Name des Gruppenverwalters der Gruppe, so wie er auch in /etc/passwd aufgeführt ist.

Liste der Mitglieder
Eine Liste der Mitglieder der Gruppe, die sich mit newgrp zum Mitglied der Gruppe machen dürfen. Diese Liste ist nicht zwansläufig deckungsgleich mit der der gleichen Gruppe in /etc/group. Ein User, der Mitglied hier in der Liste ist, aber nicht als Mitglied der Gruppe in /etc/shadow aufgeführt ist, ist nicht automatisch Mitglied der Gruppe, kann sich aber ohne Nennung eines Passworts mit newgrp zum Mitglied der Gruppe ernennen.

Der wichtigste Grund für die Verwendung der /etc/gshadow-Datei ist wohl der, daß jede Gruppe einen eigenen Gruppenverwalter haben kann. Diese Tatsache erleichtert das Leben des Systemverwalters, weil er sich nicht um alles selbst kümmern muß.


Programme zum Umgang mit den User-/Gruppendatenbanken

Die Arbeiten an all diesen vier Dateien (passwd, shadow, group und gshadow) können prinzipiell immer mit einem Texteditor wie dem vi vorgenommen werden, es gibt aber auch viele wichtige Programme, die einem Systemverwalter die zeitaufwendige Handarbeit ersparen und auch in Schleifen bestens dazu geeignet sind, Veränderungen für viele User (oder Gruppen) automatisch vorzunehmen. Dazu kommt, daß es Programme geben muß, mit deren Hilfe auch Normaluser ihre Einstellungen verändern können, etwa ihr Passwort wechseln. Diese Programme sollen hier noch kurz dargestellt werden. Ich habe - wo immer es noch keine deutsche Handbuchseite gab - die jeweiligen Handbuchseiten übersetzt und hier mit aufgenommen.

Die beste Art, diese Programme kennenzulernen, ist es, möglichst viel mit ihnen herumzuspielen, neue User anzulegen, zu verändern, wieder zu löschen usw. Nur die Praxis mit Programmen führt im Endeffekt zur Vertrautheit mit dem Umgang...

Das Anlegen neuer User mit useradd

Das Programm useradd dient dazu, einen neuen User anzulegen, ohne die Handarbeit mit Editoren auf den Dateien passwd, shadow, group und gshadow. Wir haben oben schon gesehen, daß das Format z.B. der Datumsangaben (Tage seit dem 1. Januar 1970) nicht unbedingt geeignet ist, von Hand gesetzt zu werden. Das Programm useradd nimmt uns diese Arbeit ab.

Die genaue Anwendung dieses Programms entnehmen Sie der Handbuchseite, hier nur noch ein paar Tipps aus der Praxis:

Wenn mit useradd ein neuer User angelegt werden soll, dann reicht oft nur die Angabe des Namens, weil die Voreinstellungen in der Regel sehr vernünftige Werte beinhalten. Oft wird jedoch vergessen, daß das Programm ohne die Option -m das Homeverzeichnis des Users nicht anlegt. Daran sollten Sie denken.

Die Angabe eines Passwortes ist selten von Nöten. Wird useradd ohne Passwort angegeben, so sperrt es den Account zunächst einmal durch ein ! im Passwortfeld der Datei /etc/shadow. Später können Sie mit dem Programm passwd ein Passwort vergeben.

Löschen von Usereinträgen mit userdel

Das Löschen von Useraccounts übernimmt das Programm userdel. Wird zusätzlich noch die Option -r angegeben, so wird gleich das Homeverzeichnis des Users mitgelöscht. Andere Dateien im System, die diesem User gehören werden nicht gesucht. Hier muß "von Hand" gesucht werden, das nimmt uns userdel nicht ab. Aber wir kennen ja jetzt das Programm find, mit dem wir solche Suchen in einem Rutsch erledigen können...

Ändern von Usereinstellungen mit usermod

Um die ganzen Eigenschaften eines bereits bestehenden Users zu verändern gibt es das Programm usermod. Hier können die ganzen Einstellungen verändert werden, die wir schon beim Anlegen eines Users angeben konnten. Zusätzlich kann auch der Name des Users noch verändert werden.

Bei der Änderung verschiedener Eigenschaften kommt es aber immer wieder zu Komplikationen, ein paar davon seien hier genannt:

Ändern der Passwort-Gültigkeit mit chage

Speziell für die Einträge in /etc/shadow existiert noch das Programm chage, das entweder über Kommandozeilenparameter oder - falls keine Parameter angegeben wurden - interaktiv die Einstellungen dieser Werte erlaubt.

Ändern von Usereigenschaften mit passwd, newgrp, chsh und chfn

Alle drei Programme useradd, userdel und usermod sind Werkzeuge des Systemverwalters und werden nur von ihm aufgerufen. Damit auch Normaluser ein paar Dinge - zumindestens für ihren eigenen Account - ändern dürfen gibt es noch ein paar Programme, deren Aufgaben sich zum Teil mit denen der drei letztgenannten überschneiden - passwd, newgrp, chsh und chfn.

Diese Programme ändern alle (mit Ausnahme von newgrp) verschiedene Einstellungen in einer oder mehreren der vier oben beschriebenen Dateien passwd, shadow, group und gshadow. Die genaue Anwendung entnehmen Sie wiederum den Handbuchseiten. Hier eine kurze Beschreibung, was die einzelnen Programme anbieten und was Normaluser damit anstellen können:

Die beiden letzten Programme arbeiten auch interaktiv. Wenn keinerlei Parameter angegeben werden, so fragen diese Programme die Angaben ab.

Verwaltung der Gruppen

Die Aufgaben zum Verwalten von Gruppen entsprechen im Wesentlichen denen zur Verwaltung der User. Und so existieren für den Systemverwalter (und nur für ihn) hier genau die drei Befehle, die wir für die Userverwaltung schon hatten:

Mit der Einführung der Shadow-Gruppen, also der verschlüsselten Speicherung der Gruppenpasswörter in der Datei /etc/gshadow hielt eine andere Neuerung ihren Einzug, die Möglichkeit, daß bestimmte User zu Gruppenadministratoren werden. Ein Gruppenadministrator hat bestimmte Rechte für die Gruppe, deren Verwalter er ist. Er kann

Für diese Aufgabe steht ihm das Programm gpasswd zur Verfügung. Dieses Programm ist prinzipiell für zwei Aufgabenbereiche geeignet:

Und schließlich gibt es noch das Programm groups, das jeder User dazu nutzen kann, herauszufinden in welchen Gruppen er eigentlich Mitglied ist. Dieses Programm ist eigentlich nur ein Shellscript, das wiederum den Befehl id nutzt. Id ist ein Programm, mit dem herausgefunden werden kann, welche UserID, GruppenIDs usw ein User besitzt.

Überprüfung der Konsistenz mit pwck und grpck

Da all diese Verwaltungsaufgaben für die oben beschriebenen User- und Gruppendateien viel Aufwand ist, gibt es noch die Programme pwck (Password-Check) und grpck (Group-Check), die die interne Konsistenz dieser Dateien überprüfen. Diese Programme sind naturgemäß Werkzeuge des Systemverwalters, da außer ihm niemand die shadow-Dateien lesen darf.

Konvertierung der User- und Gruppendatenbanken

In seltenen Fällen kann es notwendig sein, die Passwort- und Gruppendatenbanken entweder von der alten (shadow-losen) Version in die moderne (shadow-basierte) Version zu konvertieren oder umgekehrt. Zu diesem Zweck stehen uns die folgenden Programme zur Verfügung:

pwconv Konvertiert die alte /etc/passwd Datei in eine passwd/shadow Kombination.
pwunconv Konvertiert eine moderne passwd/shadow Kombination in eine alte passwd Datei.
grpconv Konvertiert die alte /etc/group Datei in eine group/gshadow Kombination.
grpunconv Konvertiert eine moderne group/gshadow Kombination in eine alte group Datei.