Skip to content

13 Benutzerverwaltung

13 Benutzerverwaltung

Lernziele

  • Das Benutzer- und Gruppenkonzept von Linux verstehen
  • Die Struktur und Speicherung von Benutzer- und Gruppendaten bei Linux kennen
  • Die Kommandos zur Verwaltung von Benutzer- und Gruppendaten anwenden können

Vorkenntnisse

  • Kenntnisse über den Umgang mit Konfigurationsdateien

13.1 Grundlagen

13.1.1 Wozu Benutzer?

Früher waren Computer groß und teuer. Heute sind Büroarbeitsplätze ohne eigenen PC („persönlicher Computer”) kaum noch vorstellbar und auch in den meisten häuslichen Arbeitszimmern steht ein Computer. Während es in der Familie noch genügen mag, wenn Vater, Mutter und die Kinder ihre Dateien nach Absprache jeweils in verschiedenen Verzeichnissen ablegen, ist das in Unternehmen oder Hochschulen definitiv nicht mehr ausreichend. Spätestens wenn Speicherplatz oder andere Dienste auf zentralen Servern zur Verfügung gestellt werden, auf die viele Anwender zugreifen können, muss das Computersystem in der Lage sein, zwischen verschiedenen Benutzern zu unterscheiden und diesen unterschiedliche Rechte zuzuordnen. Schließlich geht Frau Schulz aus der Entwicklungsabteilung die Gehaltsliste für alle Angestellten in der Regel genauso wenig etwas an wie Herrn Schmidt aus der Personalabteilung die detaillierten Pläne für die neuen Produkte. Und auch am heimischen Herd ist Privatsphäre möglicherweise erwünscht: Die Weihnachtsgeschenkliste oder das Tagebuch der Tochter (ehedem mit Schloss versehen) sollen neugierigen Augen vielleicht nicht ohne Weiteres zugänglich sein.

💡 Den Umstand, dass Töchterchens Tagebuch auf Facebook & Co. möglicherweise ohnehin der ganzen Welt zum Lesen zur Verfügung steht, lassen wir hier einmal außer Acht. Selbst wenn das so ist, soll die ganze Welt ja trotzdem nicht in Töchterchens Tagebuch schreiben dürfen. (Aus diesem Grund unterstützt auch Facebook die Idee verschiedener Benutzer.)

Ein weiterer Grund für die Unterscheidung verschiedener Benutzer ist, dass einige Aspekte des Systems nicht ohne besondere Privilegien einsehbar oder änderbar sein sollen. Linux führt aus diesem Grund eine separate Benutzeridentität (root) für den Systemadministrator ein. Dadurch ist es möglich, Informationen wie etwa die Benutzerkennwörter vor „gewöhnlichen” Benutzern geheim zu halten. Die Plage älterer Windows-Systeme – Programme, die Sie per E-Mail oder durch ungeschicktes Surfen erhalten und die dann im System alle Arten von Schindluder treiben – kann Sie unter Linux nicht ereilen. Das liegt daran, dass alles, was Sie als gewöhnlicher Benutzer starten können, nicht in der Position ist, systemweit Schindluder zu treiben.

⚠️ Ganz korrekt ist das leider nicht, denn hin und wieder werden Fehler in Linux bekannt, über die ein „normaler Benutzer” Dinge tun kann, die sonst dem Administrator vorbehalten sind. Diese Art von Fehler ist äußerst ärgerlich, wird in der Regel jedoch sehr zeitnah nach dem Auffinden behoben. Es ist jedoch möglich, dass ein solcher Fehler einige Zeit lang unerkannt im System schlummert. Sie sollten daher anstreben, von kritischen Systembestandteilen wie dem Systemkern immer die neueste Version laufen zu lassen, die Ihr Distributor unterstützt (wie bei allen Betriebssystemen).

⚠️ Auch die Tatsache, dass Linux die Systemkonfiguration vor unbefugtem Zugriff durch normale Benutzer schützt, sollte Sie nicht dazu verleiten, Ihr Gehirn auszuschalten. Wir geben Ihnen hier einige Tipps (etwa, dass Sie sich nicht als root auf der grafischen Oberfläche anmelden sollen), aber Sie sollten weiterhin mitdenken. E-Mails, die Sie auffordern, eine bestimmte Adresse aufzurufen und dort Ihre Bank-PIN und drei Transaktionsnummern einzugeben, können Sie auch unter Linux erhalten. Sie sollten sie genauso ignorieren wie anderswo auch.

In Linux werden verschiedene Benutzer über unterschiedliche Benutzerkonten (engl. Accounts) unterschieden. Typischerweise werden bei den gängigen Distributionen während der Installation zwei Benutzerkonten eingerichtet: root für Administrationsaufgaben und ein weiteres Konto für einen „normalen” Benutzer.

Zusätzliche Konten können Sie als Administrator selbst einrichten. Alternativ können sie sich ergeben, wenn der Rechner als Client in einem größeren Netzwerk installiert ist und die Benutzerkonten in einer anderswo gespeicherten Datenbank verwaltet werden.

💡 Linux unterscheidet nicht zwischen Benutzern, sondern zwischen Benutzerkonten. So kann beispielsweise ein separates Benutzerkonto zum E-Mail-Lesen und Surfen im Internet verwendet werden, wenn Sie zu 100 % sichergehen wollen, dass heruntergeladene Inhalte keinen Zugriff auf Ihre wichtigen Daten haben (was trotz der Trennung von Benutzer und Administrator sonst möglich wäre). Mit etwas Trickreichtum können Sie sogar einen Browser und ein E-Mail-Programm, die unter Ihrem Surf-Konto laufen, zwischen Ihren „normalen” Programmen anzeigen lassen[^1].

Unter Linux ist jedem Benutzerkonto eine eindeutige numerische Kennung, die sogenannte User ID (UID), zugeordnet. Zu einem Benutzerkonto gehört neben der UID außerdem ein textueller Benutzername (zum Beispiel root oder hugo), der für Menschen leichter zu merken ist. An den meisten Stellen, an denen dies relevant ist – etwa beim Anmelden oder bei der Ausgabe einer Liste von Dateien mit ihren Eigentümern –, verwendet Linux, wo möglich, den textuellen Namen.

💡 Der Linux-Kern kennt die textuellen Benutzernamen jedoch nicht; in den Prozessdaten und in den Eigentümerangaben im Dateisystem wird immer nur die UID verwendet. Das kann zu Problemen führen, wenn ein Benutzer gelöscht wird, der noch Dateien im System hat, und die UID anschließend einem anderen Benutzer zugewiesen wird. Jener Benutzer „erbt” die Dateien des vorherigen UID-Inhabers.

Grundsätzlich spricht nichts Technisches dagegen, dass mehreren Benutzernamen dieselbe (numerische) UID zugeordnet ist. Diese Benutzer haben gleichberechtigten Zugriff auf alle dieser UID gehörenden Dateien, aber jeder kann sein eigenes Kennwort haben. Sie sollten diese Möglichkeit aber nicht oder nur mit großer Vorsicht nutzen.

13.1.2 Benutzer und Gruppen

Um mit einem Linux-Rechner zu arbeiten, müssen Sie sich zunächst anmelden (umgangssprachlich auch „einloggen”), damit das System Sie erkennt und Ihnen die entsprechenden Zugriffsrechte zuordnen kann (hierzu später mehr). Alle Aktionen, die Sie während einer Arbeitssitzung ausführen, werden Ihrem Benutzerkonto zugeordnet. Jeder Benutzer hat außerdem ein Heimatverzeichnis (engl. home directory), in dem er seine „eigenen Dateien” ablegen kann. Auf dieses Verzeichnis haben andere Benutzer in der Regel keinen Lese- und mit sehr großer Sicherheit keinen Schreibzugriff. (Nur der Systemadministrator, auch root genannt, darf alle Dateien lesen und schreiben.)

⚠️ Je nachdem, welche Linux-Distribution Sie benutzen (Stichwort: Ubuntu), kann es sein, dass Sie sich nicht explizit beim System anmelden müssen. Dann „weiß” der Rechner allerdings, dass normalerweise Sie kommen, und nimmt einfach an, dass Sie auch wirklich Sie sind. Hier tauschen Sie Sicherheit gegen Bequemlichkeit. Dieser Tauschhandel ist vermutlich nur sinnvoll, wenn Sie mit einiger Gewissheit davon ausgehen können, dass niemand außer Ihnen Ihren Rechner einschaltet. Das dürfte auf den Computer in Ihrem Single-Haushalt ohne Putzfrau beschränkt sein. Wir haben es Ihnen gesagt.

Mehrere Benutzer, die bestimmte Systemressourcen oder Daten gemeinsam nutzen, können eine Gruppe bilden. Linux identifiziert die Gruppenmitglieder entweder durch feste, namentliche Zuordnung oder durch eine vorübergehende Anmeldung, die der Anmeldeprozedur für Benutzer ähnelt. Gruppen haben keine automatisch vorhandenen „Heimatverzeichnisse”, aber Sie können als Administrator beliebige Verzeichnisse einrichten, die für bestimmte Gruppen gedacht sind und entsprechende Rechte haben.

Auch Gruppen werden betriebssystemintern durch numerische Kennungen (engl. group IDs, kurz GIDs) identifiziert.

💡 Gruppennamen verhalten sich zu GIDs wie Benutzernamen zu UIDs: Der Linux-Kernel kennt nur Gruppennamen und legt diese auch nur in den Prozessdaten und im Dateisystem ab.

Jeder Benutzer gehört zu einer primären Gruppe und möglicherweise zu mehreren sekundären oder zusätzlichen Gruppen. In einem Unternehmen wäre es beispielsweise möglich, projektspezifische Gruppen einzuführen und die jeweiligen Projektmitarbeiter in die entsprechende Gruppe aufzunehmen, damit sie Zugriff auf ein Verzeichnis mit gemeinsamen Daten bekommen, das nur für Gruppenmitglieder zugänglich ist.

Für die Zwecke der Rechtevergabe sind alle Gruppen gleichwertig – jeder Benutzer erhält immer alle Rechte, die sich aus allen Gruppen ergeben, in denen er Mitglied ist. Der einzige Unterschied zwischen der primären Gruppe und den sekundären Gruppen besteht darin, dass neu angelegte Dateien in der Regel1 der primären Gruppe zugeordnet werden.

💡 Bis einschließlich Linux-Kernel 2.4 konnte ein Benutzer maximal 32 zusätzliche Gruppen haben. Seit Linux-Kernel 2.6 ist die Anzahl der zusätzlichen Gruppen nicht mehr beschränkt.

Die UID eines Benutzerkontos, die primäre und die sekundären Gruppen sowie die dazugehörigen GIDs können Sie mit dem Programm id abfragen:

$ id
uid=1000(hugo) gid=1000(hugo) groups=24(cdrom),29(audio),44(video),✄
✁ 1000(hugo)
$ id root
uid=0(root) gid=0(root) groups=0(root)

💡 Mit den Optionen -u, -g bzw. -G lässt sich id dazu überreden, nur die UID des Kontos, die GID der primären Gruppe oder die GIDs der sekundären Gruppe auszugeben. (Diese Optionen lassen sich nicht kombinieren.) Mit der zusätzlichen Option -n werden statt Zahlen Namen ausgegeben:

$ id -G
1000 24 29 44
$ id -Gn
hugo cdrom audio video

💡 Das Kommando „groups” liefert dasselbe Ergebnis wie das Kommando „id -Gn”.

Mit dem Befehl last können Sie herausfinden, wer sich wann auf Ihrem Rechner angemeldet hat (und im Falle von Anmeldungen über das Netzwerk auch, von wo aus).

$ last
hugo pts/1 pchugo.example.c Wed Feb 29 10:51 still logged in
oberboss pts/0 pc01.vorstand.ex Wed Feb 29 08:44 still logged in
hugo pts/2 pchugo.example.c Wed Feb 29 01:17 08:44 (07:27)
susi pts/0 :0 Tue Feb 28 17:28 18:11 (00:43)
✁✁✁✁✁
reboot system boot 3.2.0-1-amd64 Fri Feb 3 17:43 13:25 (4+19:42)
✁✁✁✁✁

In der dritten Spalte wird bei Sitzungen über das Netz der Rechnername des SSH-Clients angezeigt. „:0” steht für den grafischen Bildschirm (genau genommen den ersten X-Server – es könnten mehrere geben).

💡 Beachten Sie auch den Reboot-Eintrag, der angibt, dass der Rechner neu gestartet wurde. In der dritten Spalte steht die Versionsnummer des Linux-Betriebssystemkerns, wie sie durch den Befehl „uname -r” ermittelt wird.

Mit einem Benutzernamen als Parameter liefert last Informationen über einen bestimmten Benutzer.

$ last
hugo pts/1 pchugo.example.c Wed Feb 29 10:51 still logged in hugo pts/2 pchugo.example.c Wed Feb 29 01:17 08:44 (07:27)
✁✁✁✁✁

💡 Es könnte Sie (zurecht!) stören, dass diese sensiblen Informationen anscheinend ohne Weiteres beliebigen Systembenutzern zugänglich gemacht werden. Wenn Sie als Administrator die Privatsphäre Ihrer Benutzer besser schützen möchten, als es Ihre Linux-Distribution von sich aus tut, können Sie mit dem folgenden Kommando

# chmod o-r /var/log/wtmp

das allgemeine Leserecht für die Datei entfernen. In dieser Datei findet last die verräterischen Daten. Benutzer ohne Administratorprivilegien sehen dann nur noch etwas wie

$ last
last: /var/log/wtmp: Permission denied

13.1.3 »Natürliche Personen« und Pseudobenutzer

Das Benutzer- und Gruppenkonzept wird außer für „natürliche Personen“ – die menschlichen Benutzer des Systems – auch verwendet, um die Zugriffsrechte auf gewisse Bereiche des Systems zu strukturieren. Das bedeutet, dass es neben den persönlichen Konten der „echten” Benutzer wie Ihnen weitere Konten auf dem System Pseudobenutzer gibt. Diese sind nicht tatsächlichen menschlichen Benutzern zugeordnet, sondern systemintern für administrative Funktionen zuständig. Hier werden funktionale Rollen definiert, denen eigene Konten und Gruppen zugeordnet werden.

Nach der Installation von Linux finden Sie eine ganze Reihe solcher Pseudobenutzer in den Dateien /etc/passwd und /etc/group. Die wichtigste Rolle hat hier der uns bereits bekannte Benutzer root mit der gleichnamigen Gruppe. UID und GID von root sind 0 (Null).

💡 Die Sonderrechte von root sind an die UID 0 gekoppelt, die GID 0 hat darüber hinaus keine besondere Bedeutung.

Weitere Pseudobenutzer können für bestimmte Programmsysteme (zum Beispiel news für News mit INN oder postfix für Mail mit Postfix) oder für bestimmte Komponenten oder Gerätegruppen (zum Beispiel Drucker, Band- und Diskettenlaufwerke) existieren. Diese Konten erreichen Sie wie andere auch gegebenenfalls über den Befehl su. Diese Pseudbenutzer sind als Eigentümer von Dateien und Verzeichnissen hilfreich, um die mit dem Eigentum an Systemdaten verbundenen Zugriffsrechte flexibel an die speziellen Anforderungen anzupassen, ohne das Root-Konto benutzen zu müssen. Dasselbe gilt für Gruppen: Mitglieder der Gruppe disk haben beispielsweise Zugriff auf die Platten auf Blockebene.

Übungen

✏️ 13.1 [1] Wie unterscheidet der Betriebssystemkern zwischen verschiedenen Benutzern und Gruppen?

✏️ 13.2 [2] Was passiert, wenn eine UID zweimal mit unterschiedlichen Namen vergeben wird? Ist das erlaubt?

✏️ 13.3 [1] Was versteht man unter Pseudobenutzern? Nennen Sie Beispiele!

✏️ 13.4 [2] (Beim zweiten Durcharbeiten.) Ist es akzeptabel, einen Benutzer in die Gruppe „disk” aufzunehmen, dem Sie das Root-Kennwort nicht anvertrauen würden? Warum (nicht)?

13.2 Benutzer und Gruppendaten

13.2.1 Die Datei /etc/passwd

Die zentrale Benutzerdatenbank ist die Datei /etc/passwd. Jeder Benutzer auf dem System hat einen Eintrag in dieser Datei, d. h. eine Zeile, in der Attribute wie Benutzername, richtiger Name usw. festgehalten werden. Bereits mit der Erstinstallation eines Linux-Systems sind die meisten Pseudobenutzer in der Datei eingetragen.

Die Einträge in /etc/passwd haben das folgende Format:

⟨Benutzername⟩:⟨Kennwort⟩:⟨UID⟩:⟨GID⟩:⟨GECOS⟩:⟨Heimatverzeichnis⟩:⟨Shell⟩
hugo:x:1000:1000:Hugo Schulz:/home/hugo:/bin/sh

Benutzername: Dieser Name sollte aus Kleinbuchstaben und Ziffern bestehen, wobei das erste Zeichen ein Buchstabe sein muss. Unix-Systeme unterscheiden oft nur die ersten acht Zeichen – Linux hat diese Einschränkung nicht, aber in heterogenen Netzen sollten Sie darauf Rücksicht nehmen.

⚠️ Widerstehen Sie der Versuchung, Umlaute, Satzzeichen und Ähnliches in Benutzernamen aufzunehmen, selbst wenn das System es zulässt. Nicht alle Werkzeuge zum Anlegen neuer Benutzer sind pingelig und Sie könnten /etc/passwd ja auch direkt ändern. Was auf den ersten Blick prächtig zu funktionieren scheint, kann später anderswo zu Problemen führen.

💡 Ebenfalls Abstand nehmen sollten Sie von Benutzernamen, die nur aus Großbuchstaben oder nur aus Ziffern bestehen. Erstere können Probleme beim Anmelden verursachen (siehe Übung 13.6), Letztere können zu Verwirrung führen, vor allem, wenn der numerische Benutzername nicht mit der numerischen UID des Kontos übereinstimmt. Programme wie „ls -l” zeigen nämlich die UID an, wenn es für die betreffende UID keinen Eintrag in /etc/passwd gibt. Es ist nicht unbedingt einfach, UIDs in der ls-Ausgabe von rein numerischen Benutzernamen zu unterscheiden.

⟨Kennwort⟩ Traditionell steht an dieser Stelle das verschlüsselte Kennwort des Benutzers. Unter Linux sind heute „Schattenkennwörter” üblich. Anstatt das Kennwort in der für jeden lesbaren Datei /etc/passwd abzulegen, wird es in der Datei /etc/shadow gespeichert, auf die nur der Administrator und einige privilegierte Prozesse Zugriff haben. In /etc/passwd macht ein „x” auf diesen Umstand aufmerksam. Jedem Benutzer steht das Kommando „passwd” zur Verfügung, um sein Kennwort selbst zu ändern.

💡 Linux erlaubt verschiedene Verfahren zur Verschlüsselung von Kennwörtern. Ein klassisches Verfahren ist das von Unix übernommene und von DES abgeleitete crypt-Verfahren. Solche Kennwörter sind in verschlüsselter Form genau 13 Zeichen lang. Ebenfalls verbreitet sind MD5-Kennwörter, deren verschlüsselte Form länger ist und immer mit der Zeichenfolge $1$ beginnt. Manche Linux-Versionen unterstützen weitere Verfahren.

⟨UID⟩ Die numerische Benutzerkennung – kurz UID – ist eine Zahl zwischen 0 und 2³²-1. Nach Konvention sind UIDs zwischen 0 und 99 (einschließlich) für das System reserviert. UIDs zwischen 100 und 499 können an Softwarepakete ausgegeben werden, falls diese Pseudbenutzer benötigen. UIDs für „echte” Benutzer haben bei den meisten Distributionen Werte ab 1000.

Da die Benutzer im System nicht durch die Namen, sondern durch die UID unterschieden werden, behandelt der Kernel zwei Konten mit unterschiedlichen Benutzernamen, aber derselben UID, was die Zugriffsrechte angeht, als völlig identisch. Bei den Kommandos, die einen Benutzernamen anzeigen (etwa „ls -l” oder id), wird in solchen Fällen immer der Benutzername verwendet, der beim Anmelden angegeben wurde.

⟨GID⟩ Die GID der primären Gruppe des Benutzers nach dem Anmelden.

Bei den Novell-/SUSE-Distributionen und einigen anderen wird eine bestimmte Gruppe – beispielsweise „users” – als Standardgruppe für alle Benutzer eingetragen. Diese Methode ist einfach zu verstehen und hat Tradition.

Bei vielen Distributionen, etwa denen von Red Hat oder Debian GNU/Linux, wird dagegen für jeden neuen Benutzer automatisch eine eigene Gruppe mit der gleichen GID wie die UID des Benutzerkontos angelegt. Die Idee dahinter ist, eine differenziertere Rechtevergabe zu ermöglichen als bei dem Ansatz, alle Benutzer in dieselbe Gruppe „users” zu packen. Stellen Sie sich folgende Situation vor: Emil (Benutzername emil) ist der persönliche Assistent der Vorstandsvorsitzenden Susi (Benutzername susi). In dieser Funktion muss er hin und wieder auf Dateien zugreifen, die in Susis Heimatverzeichnis gespeichert sind und die alle anderen Benutzer nichts angehen. Der von Red Hat, Debian & Co. verfolgte Ansatz „Eine Gruppe pro Benutzer” macht es einfach, Emil in die Gruppe Susi zu setzen und dafür zu sorgen, dass Susis Dateien für alle Gruppenmitglieder lesbar sind (der Standardfall), aber nicht für den „Rest der Welt”. Beim Ansatz „Eine Gruppe für alle” wäre es nötig, eine ganz neue Gruppe einzuführen und die Konten Emil und Susi entsprechend umzukonfigurieren.

Jeder Benutzer muss durch die Zuordnung in der Datei /etc/passwd mindestens Mitglied einer Benutzergruppe sein.

💡 Die sekundären Gruppen (soweit vorhanden) des Benutzers werden durch entsprechende Einträge in der Datei /etc/group festgelegt.

⟨GECOS⟩ Dies ist das Kommentarfeld, auch GECOS-Feld genannt.

💡 GECOS steht für „General Electric Comprehensive Operating System” und hat nichts mit Linux zu tun – abgesehen davon, dass man in diesem Feld in der Frühzeit von Unix Informationen eingefügt hat, die für die Kompatibilität mit einigen Jobversanddiensten für GECOS-Rechner notwendig waren.

In diesem Feld sind verschiedene Informationen über den Benutzer gespeichert, darunter vor allem sein „richtiger” Name und optionale Angaben wie Zimmer- oder Telefonnummer. Diese Informationen werden von Programmen wie Mail und Finger benutzt. Oft wird der volle Name von News- und Mail-Programmen bei der Zusammenstellung der Absenderadresse verwendet.

💡 Theoretisch gibt es ein Programm namens chfn, mit dem Sie den Inhalt Ihres GECOS-Feldes ändern können. Ob das im Einzelfall klappt, ist eine andere Frage, da man zumindest in Firmen nicht unbedingt jedem erlauben möchte, seinen Namen beliebig zu ändern. Das hier benannte Verzeichnis ist der persönliche Bereich des Benutzers, in dem er seine eigenen Dateien aufbewahren kann. Ein neu erstelltes Heimatverzeichnis ist selten leer, da ein neuer Benutzer üblicherweise einige Profildateien als Erstausstattung vom Administrator erhält. Wenn sich ein Benutzer anmeldet, benutzt seine Shell das Heimatverzeichnis als aktuelles Verzeichnis, d. h., der Benutzer befindet sich unmittelbar nach der Anmeldung zunächst dort.

⟨Login-Shell⟩: Der Name des Programms, das nach erfolgreicher Anmeldung gestartet werden soll – das ist in der Regel eine Shell. Das siebte Feld reicht bis zum Zeilenende.

💡 Der Benutzer kann diesen Eintrag selbst mit dem Programm chsh ändern. Die erlaubten Programme (Shells) sind in der Datei /etc/shells aufgelistet. Soll ein Benutzer keine interaktive Shell haben, kann auch ein beliebiges anderes Programm mit allen Argumenten in dieses Feld eingetragen werden (ein gängiger Kandidat ist /bin/true). Das Feld kann auch leer bleiben. In diesem Fall wird automatisch die Standardshell /bin/sh gestartet.

💡 Wenn Sie sich unter einer grafischen Oberfläche anmelden, werden normalerweise alle möglichen Programme für Sie gestartet, aber nicht zwangsläufig eine interaktive Shell. Der Shell-Eintrag in /etc/passwd wird jedoch beispielsweise aktiv, wenn Sie ein Terminal-Emulationsprogramm wie xterm oder Konsole aufrufen. Diese Programme orientieren sich in der Regel daran, um Ihre bevorzugte Shell zu identifizieren.

Einige der hier gezeigten Felder können leer bleiben. Absolut notwendig sind nur der Benutzername, die UID, die GID und das Heimatverzeichnis. Für die meisten Benutzerkonten sind alle diese Felder ausgefüllt, Pseudobenutzer benutzen jedoch eventuell nur einen Teil der Felder.

Die Heimatverzeichnisse befinden sich üblicherweise unter /home und heißen wie der Benutzername des Besitzers. Das ist in der Regel eine ganz nützliche Übereinkunft, die dazu beiträgt, dass das Heimatverzeichnis eines bestimmten Benutzers leicht zu finden ist. Theoretisch kann ein Heimatverzeichnis jedoch an beliebiger Stelle im System liegen und der Name kann beliebig sein.

💡 Bei großen Systemen ist es gängig, zwischen /home und dem Verzeichnis des Benutzernamens noch eine oder mehrere Zwischenebenen einzuführen, etwa

/home/pers/hugo # Hugo aus der Personalabteilung
/home/entw/susi # Susi aus der Entwicklungsabteilung
/home/vorst/heinz # Heinz aus dem Vorstand

Dafür gibt es mehrere Gründe. Einerseits ist es so leichter möglich, die Heimatverzeichnisse einer Abteilung auf einem Server der Abteilung zu halten und sie bei Bedarf auf anderen Client-Rechnern zugänglich zu machen. Andererseits waren Unix-Dateisysteme (und manche Linux-Dateisysteme) im Umgang mit Verzeichnissen, die sehr viele Dateien enthalten, langsam, was sich bei einem /home mit mehreren tausend Einträgen unangenehm bemerkbar gemacht hätte. Mit aktuellen Linux-Dateisystemen (ext3 mit dir_index und Ähnlichem) ist Letzteres jedoch kein Problem mehr.

Beachten Sie bitte, dass Sie als Administrator die Datei /etc/passwd nicht zwingend direkt von Hand bearbeiten müssen. Es gibt eine Reihe von Programmen, die Ihnen bei der Einrichtung und Pflege der Benutzerkonten helfen.

💡 Grundsätzlich ist es auch möglich, die Benutzerdatenbank an einem anderen Ort als in /etc/passwd zu speichern. Bei Systemen mit Tausenden Benutzern ist eine Speicherung in einer relationalen Datenbank vorzuziehen. In heterogenen Netzen bietet sich dagegen eine gemeinsame Benutzerverwaltung für unterschiedliche Plattformen auf Basis eines LDAP-Verzeichnisses an. Die Details würden allerdings den Rahmen dieses Kurses sprengen.

13.2.2 Die Datei /etc/shadow

Aus Sicherheitsgründen werden bei fast allen aktuellen Linux-Distributionen die Benutzerkennwörter in verschlüsselter Form in der Datei /etc/shadow (engl. shadow passwords, „Schattenkennwörter”) gespeichert. Die Datei ist für normale Benutzer nicht lesbar, nur root darf sie schreiben. Außer root dürfen auch die Mitglieder der Gruppe shadow die Datei lesen. Wenn Sie sich die Datei als normaler Benutzer anzeigen lassen wollen, erhalten Sie eine Fehlermeldung.

💡 Die Verwendung von /etc/shadow ist zwar nicht Pflicht, aber sehr dringend empfohlen. Es kann jedoch Systemkonfigurationen geben, bei denen die durch Schattenkennwörter erreichte Sicherheit zunichte gemacht wird, etwa wenn Benutzerdaten über NIS an andere Rechner exportiert werden (vor allem in heterogenen Unix-Umgebungen).

Für jeden Benutzer ist in dieser Datei genau eine Zeile eingetragen. Das Format ist:

⟨Benutzername⟩:⟨Kennwort⟩:⟨Änderung⟩:⟨Min⟩:⟨Max⟩:⟨Warnung⟩:⟨Frist⟩:⟨Sperre⟩:⟨Reserviert⟩

Zum Beispiel:

root:gaY2L19jxzHj5:10816:0:10000::::
daemon:*:8902:0:10000::::
hugo:GodY6c5pZk1xs:10816:0:10000::::

Im folgenden die Bedeutung der einzelnen Felder:

  • ⟨Benutzername⟩

    Entspricht einem Eintrag in der Datei /etc/passwd. Dieses Feld »verbindet« die beiden Dateien.

  • ⟨Kennwort⟩

    Das verschlüsselte Kennwort des Benutzers. Ein leerer Eintrag bedeutet in der Regel, dass der Benutzer sich ohne Kennwort anmelden kann. Steht hier ein Stern oder ein Ausrufungszeichen, kann der betreffende Benutzer sich nicht anmelden. Es ist auch üblich, Benutzerkonten zu sperren, ohne sie komplett zu löschen, indem man einen Stern oder ein Ausrufungszeichen an den Anfang des zugehörigen Kennworts setzt.

  • ⟨Änderung⟩ Das Datum der letzten Änderung des Kennworts, in Tagen seit dem 1. Januar 1970.

  • ⟨Min⟩

    Minimale Anzahl von Tagen, die seit der letzten Kennwortänderung vergangen sein müssen, damit das Kennwort wieder geändert werden kann.

  • ⟨Max⟩

    Maximale Anzahl von Tagen, die ein Kennwort ohne Änderung gültig bleibt. Nach Ablauf dieser Frist muss der Benutzer sein Kennwort ändern.

  • ⟨Warnung⟩

    Die Anzahl von Tagen vor dem Ablauf der ⟨Max⟩-Frist, an denen der Benutzer eine Warnung erhält, dass er sein Kennwort bald ändern muss, weil die maximale Anzahl abläuft. Die Meldung erscheint in der Regel beim Anmelden.

  • ⟨Frist⟩

    Die Anzahl von Tagen ausgehend vom Ablauf der ⟨Max⟩-Frist, nach der das Konto automatisch gesperrt wird, wenn der Benutzer nicht vorher sein Kennwort ändert. (In der Zeit zwischen dem Ende der ⟨Max⟩-Frist und dem Ende dieser Frist kann der Benutzer sich anmelden, muss aber sofort sein Kennwort ändern.)

  • ⟨Sperre⟩

    Das Datum, an dem das Konto definitiv gesperrt wird, wieder in Tagen seit dem 1. Januar 1970.

Kurz noch ein paar Anmerkungen zum Thema »Verschlüsselung von Kennwörtern«. Man könnte auf den Gedanken kommen, dass die Kennwörter, wenn sie verschlüsselt sind, auch wieder entschlüsselt werden können. Einem cleveren Cracker, dem die Datei /etc/shadow in die Hände fällt, würden so sämtliche Benutzerkonten des Systems offen stehen. Allerdings ist das in Wirklichkeit nicht so, denn die »Verschlüsselung« der Kennwörter ist eine Einbahnstraße: Es ist nicht möglich, aus der »verschlüsselten« Darstellung eines Linux-Kennworts die unverschlüsselte zurückzugewinnen, da das verwendete Verfahren das wirkungsvoll verhindert. Die einzige Möglichkeit, die »Verschlüsselung« zu »knacken«, besteht darin, potenzielle Kennwörter zur Probe zu verschlüsseln und zu schauen, ob dasselbe herauskommt wie das, was in /etc/shadow steht.

💡 Nehmen wir mal an, Sie wählen die Zeichen Ihres Kennworts aus den 95 sichtbaren Zeichen des ASCII (es wird zwischen Groß- und Kleinschreibung unterschieden). Das bedeutet, es gibt 95 verschiedene einstellige Kennwörter, 952 = 9025 zweistellige und so weiter. Bei acht Stellen sind Sie schon bei 6,6 Billiarden (6,6 ⋅ 1015) Möglichkeiten. Angenommen, Sie könnten 10 Millionen Kennwörter in der Sekunde zur Probe verschlüsseln (für das traditionelle Verfahren auf heutiger Hardware absolut nicht unrealistisch). Dann müssten Sie knapp 21 Jahre einkalkulieren, um alle Möglichkeiten durchzuprobieren. Wenn Sie in der glücklichen Lage sind, eine moderne Grafikkarte zu besitzen, ist da durchaus noch ein Faktor 50–100 drin, so dass daraus gut zwei Monate werden. Und dann gibt es ja noch nette Dienste wie Amazons EC2, die Ihnen (oder irgendwelchen Crackern) fast beliebige Rechenleistung auf Abruf zur Verfügung stellen, oder das freundliche Russen-Botnet … Fühlen Sie sich also nicht zu sicher.

💡 Es gibt noch ein paar andere Probleme: Das traditionelle Verfahren (meist »crypt« oder »DES« genannt – letzteres, weil es ähnlich zu, aber nicht identisch mit, dem gleichnamigen Verschlüsselungsverfahren ist2) sollten Sie nicht mehr verwenden, wenn Sie es vermeiden können. Es hat nämlich die unangenehme Eigenschaft, nur die ersten acht Zeichen jedes Kennworts zu bearbeiten, und der clevere Cracker kann inzwischen genug Plattenplatz kaufen, um jedenfalls die gängigsten 50 Millionen (oder so) Kennwörter »auf Vorrat« zu verschlüsseln. Zum »Knacken« muss er so nur noch in seinem Vorrat nach der verschlüsselten Form suchen, was sehr schnell geht, und kann dann einfach den Klartext ablesen.

💡 Um das Ganze noch etwas aufwendiger zu machen, wird beim Verschlüsseln eines neu eingegebenen Kennworts traditionell noch ein zufälliges Element addiert (das sogenannte salt), das dafür sorgt, dass eine von 4096 Möglichkeiten für das verschlüsselte Kennwort gewählt wird. Der Hauptzweck des salt besteht darin, »Zufallstreffer« zu vermeiden, die sich ergeben, wenn Benutzer 𝑋 aus irgendwelchen Gründen einen Blick auf den Inhalt von /etc/ shadow wirft und feststellt, dass sein verschlüsseltes Kennwort genauso aussieht wie das von Benutzer 𝑌 (so dass er sich mit seinem Klartextkennwort auch als Benutzer 𝑌 anmelden kann). Als angenehmer Nebeneffekt wird der Plattenplatz für das Cracker-Wörterbuch aus dem vorigen Absatz um den Faktor 4096 in die Höhe getrieben.

💡 Die gängige Methode zur Kennwortverschlüsselung basiert heute auf dem MD5-Algorithmus, erlaubt beliebig lange Kennwörter und verwendet ein 48-Bit-salt statt den traditionellen 12 Bit. Netterweise ist das Verfahren auch wesentlich langsamer zu berechnen als »crypt«, was für den üblichen Zweck – die Prüfung beim Anmelden – ohne Bedeutung ist (man kann immer noch ein paar hundert Kennwörter pro Sekunde verschlüsseln), aber die cleveren Cracker schon behindert. (Sie sollten sich übrigens nicht davon irre machen lassen, dass Kryptografen das MD5-Verfahren als solches heutzutage wegen seiner Unsicherheit verpönen. Für die Anwendung zur Kennwortverschlüsselung ist das ziemlich irrelevant.)

⚠️ Von den verschiedenen Parametern zur Kennwortverwaltung sollten Sie sich nicht zu viel versprechen. Sie werden zwar von der Login-Prozedur auf der Textkonsole befolgt, aber ob sie an anderen Stellen im System (etwa beim grafischen Anmeldebildschirm) genauso beachtet werden, ist systemabhängig. Ebenso bringt es in der Regel nichts, den Anwendern in kurzen Abständen neue Kennwörter aufzuzwingen – meist ergibt sich dann eine Folge der Form susi1, susi2, susi3, … oder sie alternieren zwischen zwei Kennwörtern. Eine Mindestfrist gar, die verstreichen muss, bevor ein Benutzer sein Kennwort ändern kann, ist geradezu gefährlich, weil sie einem Cracker möglicherweise ein »Zeitfenster« für unerlaubte Zugriffe einräumt, selbst wenn der Benutzer weiß, dass sein Kennwort kompromittiert wurde.

Das Problem, mit dem Sie als Administrator zu kämpfen haben, ist in der Regel nicht, dass Leute versuchen, die Kennwörter auf Ihrem System mit »roher Gewalt« zu knacken. Viel erfolgversprechender ist in der Regel sogenanntes social engineering. Um Ihr Kennwort zu erraten, beginnt der clevere Cracker natürlich nicht mit a, b, und so weiter, sondern mit den Vornamen Ihres Ehegesponses, Ihrer Kinder, Ihrem Autokennzeichen, dem Geburtsdatum Ihres Hundes et cetera. (Wir wollen Ihnen natürlich in keiner Weise unterstellen, dass Sie so ein dummes Kennwort verwenden. Nein nein, Sie doch ganz bestimmt nicht! Bei Ihrem Chef sind wir uns da allerdings schon nicht mehr ganz so sicher …) Und dann gibt es da natürlich noch das altgediente Mittel des Telefonanrufs: »Hallo, hier ist die IT-Abteilung. Wir müssen unsere Systemsicherheitsmechanismen testen und brauchen dazu ganz dringend Ihren Benutzernamen und Ihr Kennwort.«

Es gibt diverse Mittel und Wege, Linux-Kennwörter sicherer zu machen. Neben dem oben genannten verbesserten Verfahren, das die meisten Linux-Systeme heute standardmäßig anwenden, gehören dazu Ansätze wie (zu) simple Kennwörter schon bei der Vergabe anzumeckern oder proaktiv Software laufen zu lassen, die schwache verschlüsselte Kennwörter zu identifizieren versucht, so wie das clevere Cracker auch machen würden (Vorsicht: Machen Sie so was in der Firma nur mit der schriftlichen (!) Rückendeckung Ihres Chefs!). Andere Methoden vermeiden Kennwörter komplett zugunsten von ständig wechselnden magischen Zahlen (Stichwort: SecurID) oder Smartcards. All das würde in dieser Schulungsunterlage zu weit führen, und wir verweisen Sie darum auf die Unterlage LinuxSicherheit.

13.2.3 Die Datei /etc/group

Gruppeninformationen hinterlegt Linux standardmäßig in der Datei /etc/group. Diese Datei enthält für jede Gruppe auf dem System einen einzeiligen Eintrag, der ähnlich wie die Einträge in /etc/passwd aus Feldern besteht, die durch einen Doppelpunkt »:« voneinander getrennt sind. /etc/group enthält genauer gesagt vier Felder pro Zeile:

⟨Gruppenname⟩:⟨Kennwort⟩:⟨GID⟩:⟨Mitglieder⟩

Deren Bedeutung ergibt sich wie folgt:

  • ⟨Gruppenname⟩

    Der textuelle Name der Gruppe, für die Verwendung in Verzeichnislisten usw.

  • ⟨Kennwort⟩

    Ein optionales Kennwort für diese Gruppe. Dadurch können auch Benutzer, die nicht über /etc/shadow oder /etc/group Mitglied der Gruppe sind, mithilfe des Befehls newgrp die Gruppenzugehörigkeit annehmen. Ein „*” als ungültiges Zeichen verhindert einen Gruppenwechsel von normalen Benutzern in die betreffende Gruppe. Ein „x” verweist auf die separate Kennwortdatei „/etc/gshadow”.

  • ⟨GID⟩

    Die numerische Gruppenkennung für die Gruppe „Mitglieder” ist eine durch Kommas getrennte Liste mit Benutzernamen. Enthalten sind alle Benutzer, die diese Gruppe als sekundäre Gruppe haben und somit zu dieser Gruppe gehören, im GID-Feld der Datei /etc/passwd jedoch einen anderen Wert stehen haben. (Benutzer mit dieser Gruppe als primäre Gruppe dürfen hier auch aufgeführt sein, was jedoch unnötig ist.)

Eine /etc/group-Datei könnte zum Beispiel so aussehen:

root:x:0:root bin:x:1:root,daemon 
users:x:100: 
projekt1:x:101:hugo,susi 
projekt2:x:102:emil

Die Einträge für die Gruppen „root” und „bin” sind administrative Gruppen, die sich mit den imaginären Benutzerkonten auf dem System vergleichen lassen. Den Gruppen sind viele Dateien auf dem System zugeordnet. Die anderen Gruppen enthalten Benutzerkonten.

Ähnlich wie bei den UIDs werden auch die GIDs von einer bestimmten Zahl, typischerweise 100, an aufwärts gezählt. Damit ein Eintrag gültig ist, müssen mindestens das erste und dritte Feld (Gruppenname und GID) vorhanden sein. Durch einen solchen Eintrag wird einer Gruppennummer, die in der Kennwortdatei einem Benutzer zugeordnet wurde, ein Gruppenname zugewiesen.

Die Felder für Kennwort und/oder Benutzerliste müssen nur für solche Gruppen ausgefüllt werden, die Benutzern als sekundäre Gruppe zugeordnet sind. Benutzer, die in der Mitgliederliste eingetragen sind, werden nicht nach einem Kennwort gefragt, wenn sie mit dem Kommando newgrp die aktuelle GID wechseln wollen. Wenn im zweiten Feld des Gruppeneintrags ein verschlüsseltes Kennwort eingetragen ist, können sich Anwender ohne Eintrag in der Mitgliederliste mit dem Kennwort legitimieren, um die Gruppenzugehörigkeit anzunehmen.

💡 In der Praxis werden Gruppenkennwörter jedoch so gut wie nie verwendet, da der Verwaltungsaufwand den Nutzen kaum rechtfertigt.

Zum einen ist es bequemer, den jeweiligen Benutzern die betreffende Gruppe direkt als sekundäre Gruppe zuzuordnen (seit dem Linux-Kernel 2.6 gibt es keine Beschränkung für die Anzahl der sekundären Gruppen mehr). Zum anderen folgt aus einem einzelnen Kennwort, das alle Gruppenmitglieder kennen müssen, nicht wirklich viel Sicherheit.

💡 Wenn Sie sichergehen wollen, dann sorgen Sie dafür, dass in allen Gruppenkennwort-Feldern ein Stern („*”) steht.

13.2.4 Die Datei /etc/gshadow

Wie bei der Kennwortdatei gibt es auch für die Gruppendatei eine Erweiterung durch das Schattenkennwortsystem. Die Gruppenkennwörter, die sonst in der Datei /etc/group analog zu /etc/passwd verschlüsselt, aber für alle Benutzer lesbar abgelegt sind, werden dann in der separaten Datei /etc/gshadow gespeichert. In dieser Datei werden auch zusätzliche Informationen zur Gruppe festgehalten, beispielsweise die Namen der zum Ein- und Austragen von Mitgliedern autorisierten Gruppenverwalter.

13.2.5 Das Kommando getent

Selbstverständlich können Sie die Dateien /etc/passwd, /etc/shadow und /etc/group mit Programmen wie cat, less oder grep lesen und verarbeiten (für /etc/shadow müssen Sie allerdings root sein). Dabei gibt es jedoch einige praktische Probleme:

  • Eventuell bekommen Sie nicht die ganze Wahrheit zu sehen. Es ist möglich, dass die Benutzerdatenbank (oder Teile davon) auf einem LDAP-Server, in einer SQL-Datenbank oder einem Windows-Domänencontroller gespeichert ist und Sie in /etc/passwd nichts Interessantes finden.

  • Wenn Sie gezielt nach einem Benutzereintrag suchen wollen und „falsche Positive” ausschließen möchten, ist das mit grep schon etwas umständlich zu tippen.

Mit dem Kommando getent können Sie die verschiedenen Datenbanken für Benutzer- und Gruppeninformationen gezielt abfragen. Mit

$ getent passwd

wird etwas angezeigt, das wie /etc/passwd aussieht, aber aus allen Quellen für Benutzerdaten zusammengesetzt ist, die auf dem Rechner aktuell konfiguriert sind. Mit getent passwd hugo erhalten Sie den Benutzereintrag für den Benutzer hugo, egal wo er tatsächlich gespeichert ist. Anstelle von „passwd” können Sie auch „shadow”, „group” oder „gshadow” angeben, um die entsprechende Datenbank zu konsultieren. (Natürlich können Sie mit getent auf shadow und gshadow nur zugreifen, wenn Sie root sind.)

💡 Der Begriff „Datenbank” ist hier zu verstehen als „Gesamtheit aller Quellen, aus denen die C-Bibliothek sich Informationen zu diesem Thema (etwa Benutzer) zusammensucht”. Wenn Sie wissen möchten, woher diese Informationen stammen, lesen Sie nsswitch.conf(5) und studieren Sie die Datei /etc/nsswitch.conf auf Ihrem System.

💡 Sie dürfen auch mehrere Benutzer- oder Gruppennamen angeben. In diesem Fall werden die Informationen für alle genannten Benutzer oder Gruppen ausgegeben:

$ getent passwd hugo susi fritz

Übungen

✏️ 13.5 [1] Welchen Wert sehen Sie in der zweiten Spalte der Datei /etc/passwd? Warum steht dort dieser Wert?

✏️ 13.6 [2] Schalten Sie auf eine Textkonsole um (zum Beispiel mit der Tastenkombination Alt + F1) und versuchen Sie, sich anzumelden, indem Sie Ihren Benutzernamen ausschließlich in Großbuchstaben eingeben. Was passiert?

✏️ 13.7 [2] Wie können Sie prüfen, ob für jeden Eintrag in der passwd-Datenbank auch ein entsprechender Eintrag in der shadow-Datenbank vorhanden ist? (pwconv betrachtet nur die Dateien /etc/passwd und /etc/shadow und schreibt außerdem /etc/shadow neu, was wir hier nicht möchten.)

13.3 Benutzerkonten und Gruppeninformationen ver

Nach Abschluss der Installation einer neuen Linux-Distribution gibt es zunächst nur das Root-Konto für den Administrator und die Pseudbenutzer. Alle weiteren Benutzerkonten müssen erst eingerichtet werden (wobei die meisten Distributionen den Installierenden heutzutage sanft dazu nötigen, zumindest einen „gewöhnlichen” Benutzer anzulegen).

Als Administrator sind Sie dafür verantwortlich, die Konten für alle Benutzer (real und imaginär) auf Ihrem System anzulegen und zu verwalten. Um Ihnen diese Aufgabe zu erleichtern, bringt Linux einige Werkzeuge zur Benutzerverwaltung mit. Damit ist die Benutzerverwaltung in den meisten Fällen eine problemlose und einfach zu erledigende Angelegenheit. Es ist jedoch wichtig, dass Sie die Zusammenhänge verstehen.

13.3.1 Benutzerkonten einrichten

Die Einrichtung eines neuen Benutzerkontos erfolgt in mehreren Schritten und ist im Prinzip immer gleich.

  1. Sie müssen Einträge in der Kennwortdatei /etc/passwd und gegebenenfalls in der Datei /etc/shadow anlegen.

  2. Gegebenenfalls ist ein Eintrag (oder mehrere) in der Gruppendatei /etc/group nötig.

  3. Erzeugen Sie das Heimatverzeichnis, kopieren Sie eine Grundausstattung an Dateien hinein und übereignen Sie alles dem neuen Benutzer.

  4. Wenn nötig, müssen Sie den neuen Benutzer noch in weitere Listen eintragen, beispielsweise für Plattenkontingente, die Zugriffsberechtigung auf Datenbanken und spezielle Applikationen.

Alle Dateien, die beim Einrichten eines neuen Kontos bearbeitet werden, sind normale Textdateien. Sie können jeden Schritt ohne Weiteres von Hand bzw. mit Hilfe eines Texteditors durchführen. Da dies jedoch eine ebenso langweilige wie aufwendige Tätigkeit ist, sollten Sie das System nutzen. Linux hält hierfür das Programm useradd bereit.

Im einfachsten Fall übergeben Sie dem Programm lediglich den Namen des neuen Benutzers. Optional können Sie auch noch diverse andere Benutzerparameter setzen. Für nicht angegebene Parameter (typischerweise die UID) werden automatisch „vernünftige” Standardwerte gewählt. Auf Wunsch kann auch das Heimatverzeichnis des Benutzers erzeugt und mit einer Grundausstattung an Dateien versehen werden. Diese entnimmt das Programm dem Verzeichnis /etc/skel. Die Syntax von useradd ist:

useradd [⟨Optionen⟩] ⟨Benutzername⟩

Folgende Optionen stehen dabei unter anderem zur Verfügung:

  • -c ⟨Kommentar⟩ Eintrag in in das GECOS-Feld

  • -d ⟨Heimatverzeichnis⟩ Fehlt diese Angabe, wird /home/⟨Benutzername⟩ angenommen

  • -e ⟨Datum⟩ Datum, an dem der Zugang automatisch gesperrt wird (Format: »JJJJMM-TT«)

  • -g ⟨Gruppe⟩ Primäre Gruppe des neuen Benutzers, als Name oder GID. Die Gruppe muss existieren.

  • -G ⟨Gruppe⟩[,⟨Gruppe⟩]… Weitere Gruppen, als Namen oder GIDs. Die Gruppen müssen existieren.

  • -s ⟨Shell⟩ Login-Shell des

  • -u ⟨UID⟩ Numerische Benutzerkennung des neuen Benutzers. Die UID darf noch nicht anderweitig vergeben sein, es sei denn, die Option »-o« wurde angegeben.

  • -m Legt das Heimatverzeichnis an und kopiert die Datei-Grundausstattung hinein. Diese Grundausstattung kommt aus /etc/skel, es sei denn, mit »-k« wurde ein anderes Verzeichnis benannt.

Mit dem Kommando

# useradd -c ""Hugo Schulz"" -m -d /home/hugo -g entw > -k /etc/skel.entw hugo

wird für den Benutzer Hugo Schulz ein Benutzerkonto namens „hugo” angelegt und der Gruppe „entw” zugeordnet. Sein Heimatverzeichnis wird als /home/hugo angelegt und die Dateien aus /etc/skel.entw als Grundausstattung dorthin kopiert.

💡 Mit der Option -D (bei den SUSE-Distributionen --show-defaults) können Sie Vorgabewerte für einige Aspekte neuer Benutzerkonten festlegen. Ohne Zusatzoptionen werden die Werte nur angezeigt:

# useradd -D
GROUP=100
HOME=/home INACTIVE=-1 EXPIRE=
SHELL=/bin/sh SKEL=/etc/skel CREATE_MAIL_SPOOL=no

Sie können diese Werte mit den Optionen -g, -b, -f, -e und -s ändern.

# useradd -D -s /usr/bin/zsh zsh als Standard-Shell

Die beiden letzten Werte in der Liste lassen sich nicht ändern.

💡 useradd ist ein relativ niedrig ansetzendes Werkzeug. Als erfahrener Administrator werden Sie im „wirklichen Leben” neue Benutzerkonten wahrscheinlich nicht mit useradd, sondern über ein Shellskript anlegen, das Ihre örtlichen Richtlinien berücksichtigt (damit Sie nicht immer selbst daran denken müssen). Dieses Shellskript müssen Sie leider selbst erstellen – es sei denn, Sie benutzen Debian GNU/Linux oder eine davon abgeleitete Distribution (siehe unten).

Vorsicht: Zwar bringt jede ernstzunehmende Linux-Distribution ein Programm namens „useradd” mit, doch die Implementierungen unterscheiden sich im Detail.

Die Red-Hat-Distributionen enthalten eine ziemlich „gewöhnliche” Version von useradd ohne besondere Extras, die die oben besprochenen Eigenschaften mitbringt.

Das useradd der SUSE-Distributionen ist darauf ausgelegt, Benutzer wahlweise in einem LDAP-Verzeichnis statt in /etc/passwd anzulegen. (Aus diesem Grund wird die Option -D anderweitig verwendet, sodass sie nicht wie bei den anderen Distributionen zum Abfragen oder Setzen von Standardwerten zur Verfügung steht.) Die Details hierzu würden hier zu weit führen.

Bei Debian GNU/Linux und Ubuntu existiert useradd zwar, die offizielle Methode zum Anlegen neuer Benutzerkonten ist jedoch ein Programm namens adduser (zum Glück nicht verwirrend). Der Vorteil von adduser besteht darin, dass es die Spielregeln von Debian GNU/Linux einhält und dass es außerdem ermöglicht, beim Anlegen von Benutzerkonten auch noch beliebige andere Aktionen für das neue Konto auszuführen. Beispielsweise könnte automatisch ein Verzeichnis im Dokumentbaum eines Web-Servers angelegt werden, in dem der neue Benutzer (und nur dieser) Dateien veröffentlichen kann. Oder der Benutzer könnte automatisch zum Zugriff auf einen Datenbankserver autorisiert werden. Die Details stehen in adduser(8) und adduser.conf(5).

Nach dem Anlegen mit „useradd” ist das neue Konto noch nicht zugänglich, da der Systemverwalter zunächst ein Kennwort eintragen muss. Wie das funktioniert, erklären wir als Nächstes.

13.3.2 Das Kommando passwd

Mit dem Befehl „passwd” können Sie Benutzerkennwörter vergeben. Wenn Sie als root angemeldet sind, wird folgende Abfrage angezeigt:

# passwd hugo

nach einem neuen Kennwort für den Benutzer hugo (Sie müssen es zweimal angeben, da keine Kontrollausgabe erfolgt).

Das Kommando „passwd” steht auch normalen Benutzern zur Verfügung, damit sie ihr eigenes Kennwort ändern können. Das Ändern der Kennwörter anderer Benutzer ist hingegen root vorbehalten:

$ passwd
Ändern des Passworts für hugo (aktuelles) UNIX-Passwort: geheim123
Geben Sie ein neues UNIX-Passwort ein: 321mieheg
Geben Sie das neue UNIX-Passwort erneut ein: 321mieheg
passwd: Passwort erfolgreich geändert

Normale Benutzer müssen ihr aktuelles Kennwort angeben, bevor sie ein neues setzen dürfen. Das soll Spaßvögeln das Leben schwer machen, die an Ihrem Computer herumspielen, während Sie mal ganz dringend weg mussten und die Bildschirmsperre nicht aktiviert haben.

Passwd dient nebenbei auch zur Verwaltung verschiedener Einstellungen in /etc/shadow. So können Sie sich beispielsweise den „Kennwortstatus” eines Benutzers anzeigen lassen, indem Sie den Befehl passwd mit der Option -S aufrufen:

# passwd -S franz
franz LK 10/15/99 0 99999 7 0

Das erste Feld ist dabei der Benutzername, dann folgt der Kennwortstatus: „PS” oder „P” bedeutet, dass ein Kennwort gesetzt ist, „LK” oder „L” bedeutet, dass das Konto gesperrt ist, und „NP” bedeutet, dass das Konto kein Kennwort hat. Die übrigen Felder beinhalten das Datum der letzten Kennwortänderung, die Mindest- und Höchstfrist in Tagen für das Ändern des Kennworts, die Warnfrist vor dem Ablauf des Kennworts und die „Gnadenfrist” für die komplette Sperrung des Benutzerkontos nach Ablauf des Kennworts. (Siehe hierzu auch Abschnitt 13.2.2.)

Einige dieser Einstellungen können Sie über die Optionen von passwd ändern. Hier sind ein paar Beispiele:

# passwd -l hugo # Zugang sperren
# passwd -u hugo # Zugang freigeben
# passwd -n 7 hugo # Kennwortänderung höchstens alle 7 Tage
# passwd -x 30 hugo # Kennwortänderung spätestens alle 30 Tage
# passwd -w 3 hugo # 3 Tage Warnfrist vor Kennwortablauf

🔑 Das Sperren und Freigeben per -l und -u funktioniert, indem vor das verschlüsselte Kennwort in /etc/shadow ein „!” gesetzt wird. Da bei der Kennwortverschlüsselung kein Ausrufezeichen entsteht, ist es unmöglich, beim Anmelden etwas einzugeben, das mit dem verschlüsselten Kennwort in der Benutzerdatenbank übereinstimmt. Somit ist der Zugang über die normale Anmeldeprozedur gesperrt. Sobald das „!” entfernt wird, gilt das ursprüngliche Kennwort wieder. (Genial, oder?) Allerdings sollten Sie beachten, dass sich Benutzer möglicherweise auch auf andere Arten Zugang zum System verschaffen können, die ohne das verschlüsselte Kennwort in der Benutzerdatenbank auskommen, etwa über die Secure Shell mit Public-Key-Authentisierung.

Um die übrigen Einstellungen in /etc/shadow zu ändern, müssen Sie das Kommando chage verwenden:

# chage -E 2009-12-01 hugo # Sperrung ab 1.12.2009
# chage -E -1 hugo # Verfallsdatum aufheben
# chage -I 7 hugo # Gnadenfrist 1 Woche nach Kennwortablauf
# chage -m 7 hugo # Entspricht passwd -n (Grr.)
# chage -M 7 hugo # Entspricht passwd -x (Grr, grr.)
# chage -W 3 hugo # Entspricht passwd -w (Grr, grr, grr.)

(chage kann alle Parameter ändern, die passwd ändern kann, und noch einige mehr.)

💡 Wenn Sie sich die Optionen nicht merken können, rufen Sie chage einfach mit dem Namen eines Benutzerkontos auf. Das Programm präsentiert Ihnen dann nacheinander die aktuellen Werte, die Sie bestätigen oder ändern können.

Ein bestehendes Kennwort im Klartext können Sie selbst als Administrator nicht mehr auslesen. Auch ein Blick in die Datei /etc/shadow hilft in diesem Fall nicht, denn hier werden alle Kennwörter bereits verschlüsselt abgelegt. Sollte ein Benutzer sein Kennwort vergessen haben, reicht es in der Regel, dessen Kennwort mit dem Befehl passwd zu ändern.

💡 Sollten Sie das Root-Kennwort vergessen haben und gerade nicht als Root angemeldet sein, bleibt Ihnen noch die Möglichkeit, Linux in eine Shell zu booten oder von einer Rettungsdiskette bzw. -CD zu booten. Anschließend können Sie das Kennwort-Feld des root-Eintrags in /etc/passwd mit einem Editor löschen.

Übungen

✏️ 13.8 [3] Ändern Sie das Kennwort des Benutzers „hugo”. Wie verändert sich dadurch die Datei /etc/shadow? Fragen Sie anschließend den Status dieses Kennworts ab.

✏️ 13.9 [!2] Der Benutzer trottel hat sein Kennwort vergessen. Wie können Sie ihm helfen?

✏️ 13.10 [!3] Stellen Sie die Bedingungen für das Kennwort des Benutzers „hugo” so ein, dass er sein Kennwort frühestens nach einer Woche und spätestens nach zwei Wochen ändern muss. Zwei Tage vor Ablauf dieser Zweiwochenfrist soll er eine Warnung erhalten. Kontrollieren Sie anschließend die Einstellungen!

13.3.3 Benutzerkonten löschen

Um ein Benutzerkonto vollständig zu löschen, müssen Sie den entsprechenden Eintrag aus den Dateien /etc/passwd und /etc/shadow entfernen. Darüber hinaus müssen Sie alle Verweise auf diesen Benutzer in der Datei /etc/group löschen sowie das Heimatverzeichnis und alle Dateien des Benutzers entfernen. Wenn der Benutzer beispielsweise eine Mailbox für eingehende Nachrichten im Verzeichnis /var/mail hat, sollte auch diese entfernt werden.

Auch für diese Aktionen existiert ein passendes Kommando. Der Befehl userdel löscht ein Benutzerkonto komplett. Die Syntax lautet:

userdel [-r] ⟨Benutzername⟩

Die Option -r sorgt dafür, dass das Heimatverzeichnis des Benutzers mitsamt Inhalt sowie seine Mailbox in /var/mail entfernt wird. Andere Dateien des Benutzers, etwa crontab-Dateien, müssen von Hand gelöscht werden. Eine schnelle Methode, um die Dateien eines bestimmten Benutzers zu finden und zu löschen, ist der folgende Befehl:

find / -uid ⟨UID⟩ -delete

Ohne die Option -r werden nur die Benutzerdaten aus der Benutzerdatenbank gelöscht; das Heimatverzeichnis bleibt stehen.

13.3.4 Benutzerkonten und Gruppenzuordnung ändern

Traditionell werden Benutzerkonten und -gruppen durch das Editieren der Dateien /etc/passwd und /etc/group geändert. Viele Systeme enthalten auch Befehle wie usermod und groupmod für denselben Zweck. Diese sollten Sie im Zweifelsfall verwenden, da sie sicherer funktionieren und in den meisten Fällen auch bequemer einzusetzen sind.

Das Programm usermod akzeptiert im Wesentlichen dieselben Optionen wie useradd, ändert jedoch existierende Benutzerkonten, statt neue anzulegen. Beispielsweise können Sie mit

usermod -g ⟨Gruppe⟩ ⟨Benutzername⟩

die primäre Gruppe eines Benutzers ändern.

Achtung! Wenn Sie die UID eines bestehenden Benutzerkontos ändern möchten, können Sie das UID-Feld in /etc/passwd natürlich auch direkt editieren. Allerdings sollten Sie gleichzeitig mit chown die Dateiberechtigungen der Dateien dieses Benutzers auf die neue UID übertragen: „chown -R tux /home/tux” vergibt die Eigenrechte an allen Dateien im Heimatverzeichnis von tux wieder an tux, nachdem Sie die UID für dieses Konto geändert haben. Wenn „ls l” eine numerische UID statt eines alphanumerischen Namens ausgibt, weist dies darauf hin, dass mit der UID dieser Dateien kein Benutzername verbunden ist. Mit chown können Sie das beheben.

13.3.5 Die Benutzerdatenbank direkt ändern — vipw

Mit dem Kommando vipw wird ein Editor (vi oder ein anderer) aufgerufen, um die Datei /etc/passwd zu ändern. Gleichzeitig wird die Datei gesperrt, sodass während dieser Änderung niemand z. B. mit dem Befehl passwd ebenfalls eine Änderung vornehmen kann (die dann verloren gehen würde). Mit der Option -s wird die Datei /etc/shadow bearbeitet.

💡 Welcher Editor konkret aufgerufen wird, bestimmen die Werte der Umgebungsvariablen VISUAL bzw. EDITOR. Existiert keine der beiden, wird vi gestartet. Übungen

✏️ 13.11 [!2] Legen Sie den Benutzer „test” an. Wechseln Sie zu diesem Benutzerkonto und legen Sie mit dem Befehl touch einige Dateien an, einige davon in einem anderen Ordner als dem Heimatverzeichnis (zum Beispiel /tmp). Wechseln Sie anschließend wieder zu root und ändern Sie die UID von „test”. Was sehen Sie, wenn Sie mit ls die Dateien des Benutzers test auflisten?

✏️ 13.12 [!2] Legen Sie über das entsprechende grafische Tool einen Benutzer namens „test1” an, über das Kommando „useradd” einen weiteren namens „test2” und von Hand einen dritten namens „test3”. Betrachten Sie anschließend die Konfigurationsdateien. Können Sie problemlos unter allen drei Konten arbeiten? Legen Sie unter jedem Konto eine Datei an.

✏️ 13.13 [!2] Löschen Sie das Konto des Benutzers „test2” und stellen Sie sicher, dass sich auf dem System keine Dateien mehr befinden, die diesem Benutzer gehören!

✏️ 13.14 [2] Ändern Sie die UID des Benutzers „test1”. Was müssen Sie außerdem tun?

✏️ 13.15 [2] Ändern Sie das Heimatverzeichnis für den Benutzer „test1” von „/home/test1” in „/home/user/test1”.

13.3.6 Anlegen, Ändern und Löschen von Gruppen

Genau wie Benutzerkonten können Sie Gruppen auf verschiedene Arten anlegen. Die Methode „von Hand” ist wesentlich weniger aufwendig als das manuelle Erstellen neuer Benutzerkonten. Da Gruppen kein Heimatverzeichnis besitzen, genügt es normalerweise, die Datei /etc/group mit einem beliebigen Texteditor zu öffnen und eine entsprechende neue Zeile einzufügen (siehe unten für vigr). Bei Verwendung von Gruppenkennwörtern muss zusätzlich ein Eintrag in /etc/gshadow vorgenommen werden.

Übrigens spricht nichts dagegen, dass auch Benutzergruppen ein eigenes Verzeichnis erhalten. Dort können die Gruppenmitglieder die Ergebnisse ihrer Zusammenarbeit ablegen. Die Vorgehensweise ähnelt dabei dem Anlegen von Benutzerheimatverzeichnissen, allerdings müssen keine Grundausstattungen an Konfigurationsdateien kopiert werden.

Zur Gruppenverwaltung gibt es die Programme groupadd, groupmod und groupdel, auf die Sie zurückgreifen sollten, statt /etc/group und /etc/gshadow direkt zu editieren. Mit groupadd können Sie per Kommandozeilenparameter bzw. Voreinstellungen einfach neue Gruppen im System erzeugen:

groupadd [-g ⟨GID⟩] ⟨Gruppenname⟩

Mit der Option -g kann eine bestimmte Gruppennummer vorgegeben werden. Wie bereits erwähnt, handelt es sich dabei um eine positive ganze Zahl. Die Werte bis 99 sind in der Regel Systemgruppen vorbehalten. Ohne Angabe wird die nächste freie GID verwendet.

Bereits bestehende Gruppen können Sie mit dem Befehl groupmod bearbeiten, ohne direkt in die Datei /etc/group schreiben zu müssen:

groupmod [-g ⟨GID⟩] [-n ⟨Name⟩] ⟨Gruppenname⟩

Mit der Option „-g ⟨GID⟩” wird die GID der angegebenen Gruppe geändert. Danach müssen nicht aufgelöste Gruppenzugehörigkeiten von Dateien manuell angepasst werden. Mit der Option „-n ⟨Name⟩” kann der angegebenen Gruppe ein neuer Gruppenname zugewiesen werden. Die GID bleibt dabei unverändert und es sind keine manuellen Anpassungen erforderlich.

Zum Entfernen der Gruppeneinträge existiert ebenfalls ein Hilfsprogramm. Dieses heißt konsequenterweise groupdel:

groupdel ⟨Gruppenname⟩

Wie beim manuellen Entfernen von Gruppeneinträgen empfiehlt es sich auch hier, anschließend alle Dateien des Verzeichnisbaums zu überprüfen und verwaiste Gruppenzugehörigkeiten mit dem Befehl „chgrp” anzupassen. Primäre Gruppen von einzelnen Benutzern dürfen nicht entfernt werden. Entweder muss der betroffene Benutzer vor dem Entfernen der Gruppe ausgetragen oder einer anderen primären Gruppe zugewiesen werden.

Das Kommando „gpasswd” dient in erster Linie zur Manipulation von Gruppenkennwörtern, analog zum Kommando „passwd”. Allerdings kann der Systemadministrator die Verwaltung der Mitgliederliste einer Gruppe an einen oder mehrere Gruppenadministratoren delegieren. Gruppenadministratoren verwenden dafür ebenfalls das gpasswd-Kommando:

gpasswd -a ⟨Benutzer⟩ ⟨Gruppe⟩

fügt den ⟨Benutzer⟩ der ⟨Gruppe⟩ hinzu, und

gpasswd -d ⟨Benutzer⟩ ⟨Gruppe⟩

entfernt ihn wieder daraus. Mit

gpasswd -A ⟨Benutzer⟩,… ⟨Gruppe⟩

kann der Systemadministrator Benutzer benennen, die als Gruppenadministratoren fungieren sollen.

In den SUSE-Distributionen ist das Programm gpasswd seit einiger Zeit nicht mehr enthalten.

Stattdessen gibt es modifizierte Versionen der Programme zur Benutzer- und Gruppenverwaltung, die mit einem LDAP-Verzeichnis umgehen können.

Als Systemverwalter können Sie die Gruppendatenbank direkt mit dem Kommando vigr ändern. Es funktioniert analog zu vipw, d. h., es wird ein Editor aufgerufen, mit dem Sie „exklusiven“ Zugriff auf /etc/group haben. Mit „vigr -s” erhalten Sie entsprechend Zugriff auf /etc/gshadow.

Übungen

✏️ 13.16 [2] Wozu werden Gruppen gebraucht? Nennen Sie mögliche Beispiele!

✏️ 13.17 [1] Können Sie bitte ein Verzeichnis anlegen, auf das alle Mitglieder der Gruppe Zugriff haben?

✏️ 13.18 [!2] Erstellen Sie eine zusätzliche Gruppe namens „test”. Legen Sie fest, dass nur test1 Mitglied dieser Gruppe sein soll. Setzen Sie anschließend ein Gruppenkennwort. Melden Sie sich anschließend als test1 und test2 an und wechseln Sie jeweils in die neue Gruppe.

13. 4 Kommandos in diesem Kapitel

Kommando Beschreibung manpage
adduser Komfortables Kommando zum Anlegen neuer Benutzerkonten (Debian) adduser(8)
chage Setzt Kennwort-Attribute wie Ablaufdatum und Änderungsfristen chage(1)
chfn Erlaubt Benutzern das Ändern des GECOS-Felds in der Benutzerdatenbank chfn(1)
getent Ruft Einträge aus administrativen Datenbanken ab getent(1)
gpasswd Erlaubt Verwaltung von Gruppenmitgliederlisten durch Gruppenadministratoren und das Setzen des Gruppenkennworts gpasswd(1)
groupadd Fügt Gruppen in die Gruppendatenbank ein groupadd(8) groupdel Löscht Gruppen aus der Gruppendatenbank groupdel(8)
groupmod Ändert Gruppeneinträge in der Gruppendatenbank groupmod(8)
groups Gibt die Gruppen aus, in denen ein Benutzer Mitglied ist groups(1)
id Gibt UID und GIDs eines Benutzers aus id(1)
last Zeige zuletzt angemeldete Benutzer an last(1)
useradd Fügt neue Benutzerkonten hinzu useradd(8)
userdel Entfernt Benutzerkonten userdel(8)
usermod Modifiziert die Benutzerdatenbank usermod(8)
vigr Erlaubt das exklusive Ändern von /etc/group bzw. /etc/gshadow vipw(8)

13.5 Zusammenfassung

  • Der Zugriff auf das System wird über Benutzerkonten geregelt.

  • Jedes Benutzerkonto hat eine numerische UID und mindestens einen zugeordneten textuellen Benutzernamen.

  • Benutzer können in Gruppen zusammengefasst werden. Gruppen haben Namen und numerische GIDs.

  • „Pseudobenutzer” und „-gruppen” dienen zur weiteren Strukturierung der Zugriffsrechte.

  • Die zentrale Benutzerdatenbank steht normalerweise in der Datei /etc/passwd.

  • Die verschlüsselten Kennwörter der Benutzer sowie andere Kennwortparameter sind in der Datei /etc/shadow gespeichert, die nicht mehr für alle Benutzer lesbar ist.

  • Gruppeninformationen stehen in den Dateien /etc/group und /etc/gshadow.

  • Kennwörter werden mit dem Programm „passwd” verwaltet.

  • Zur Konfiguration der Kennwortparameter in /etc/shadow dient das Programm chage.

  • Benutzerinformationen können mit dem Programm vipw oder besser mit den dafür vorgesehenen Werkzeugen useradd, usermod und userdel geändert werden.

  • Gruppeninformationen können über die Programme groupadd, groupmod, groupdel und gpasswd manipuliert werden.

[^1] Was dann natürlich wieder etwas gefährlich ist, da Programme, die auf demselben Bildschirm laufen, miteinander kommunizieren können.


  1. Die Ausnahme besteht darin, dass der Eigentümer eines Verzeichnisses verfügen kann, dass neue Dateien und Verzeichnisse in diesem Verzeichnis der Gruppe zugeordnet werden, der auch das Verzeichnis selbst zugeordnet ist. Aber das nur der Vollständigkeit halber. 

  2. Wenn Sie es genau wissen müssen: Das Klartext-Kennwort fungiert als Schlüssel (!) zur Verschlüsselung einer konstanten Zeichenkette (typischerweise einem Vektor von Nullbytes). Ein DES-Schlüssel hat 56 Bit, das sind gerade 8 Zeichen zu je 7 Bit (denn das höchstwertige Bit im Zeichen wird ignoriert). Dieser Prozess wird insgesamt fünfundzwanzigmal wiederholt, wobei immer die Ausgabe als neue Eingabe dient. Genau genommen ist das verwendete Verfahren auch nicht wirklich DES, sondern an ein paar Stellen abgewandelt, damit es weniger leicht möglich ist, aus kommerziell erhältlichen DESVerschlüsselungs-Chips einen Spezialcomputer zum Knacken von Kennwörtern zu bauen.