8.2 Benutzer anlegen, ändern und löschen
Kommen wir nun zur praktischen Benutzerverwaltung und somit zu Programmen, mit denen man neue Nutzer anlegen kann.
Solche Programme kümmern sich im Normalfall um Feinheiten wie um die Wahl einer noch freien UID.
8.2.1 Benutzer anlegen
Zum Anlegen neuer Benutzer gibt es im Wesentlichen zwei distributionsunabhängige Hilfsprogramme: useradd und adduser. Natürlich hat auch jede Distribution noch ihr eigenes Administrationstool, mit dem sich auch weitere Benutzer anlegen lassen. Schließlich wird während der Installation auf jeden Fall das Administratorkonto »root« sowie im Regelfall noch mindestens ein Benutzerkonto konfiguriert.
Die beiden Programme funktionieren nun so, wie man es erwarten würde: useradd verhält sich nämlich vollkommen nach der Unix-Philosophie. Alle Informationen müssen nämlich vom Bediener – im Regelfall kann nur der Administrator root neue Benutzer anlegen – per Parameter an das Programm übergeben werden.
Viele Möglichkeiten
Ruft man useradd ohne Option auf, werden einem die verfügbaren Parameter angezeigt:
# useradd usage: useradd name [-u uid [-o]] [-g group,..] [-G group] [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ]
Listing 8.4 useradd ohne Argument
Man kann über die Kommandozeile also entweder einen neuen Benutzer anhand seines Benutzernamens anlegen oder auch die Voreinstellungen (default, »-D«) entsprechend ändern. Gibt man nur den Benutzernamen an, wird folgender Eintrag in der /etc/passwd angelegt:
# useradd veronika
# grep veronika /etc/passwd
veronika:x:1002:100::/home/veronika:
# grep veronika /etc/shadow
veronika:!:12895:0:99999:7:::
# ls /home/veronika
ls: /home/veronika: No such file or directory
Listing 8.5 Anlegen eines Benutzers mit useradd
Konservative Voreinstellungen
Wie man sieht, verhält sich useradd wirklich streng konservativ nach der Unix-Philosophie: Der Benutzer wird ohne gültiges Passwort und ohne extra angegebene Login-Shell <Ist das Feld in der /etc/passwd leer, wird der Standardwert /bin/sh benutzt.> mit der nächsten freien UID angelegt, und das Homeverzeichnis wird nicht erstellt. <Natürlich kann man über verschiedene Kommandozeilenoptionen, wie im Listing zu sehen, auch einen funktionierenden Account erstellen.> Auch bleibt der Befehl im Erfolgsfall stumm – typisch Unix.
Möchte man das Standardverhalten nun ändern und einen Benutzer nicht zur Gruppe users – die eigentlich auf allen System die GroupID 100 hat --, sondern zu einer anderen Gruppe hinzufügen, so kann man den Switch »-D« nutzen. Die Konfiguration wird dann schließlich in der Datei /etc/default/useradd gespeichert, einem typischen Verzeichnis für solche Konfigurationen.
Im Verzeichnis /etc/default sind sinnvolle Vorbelegungen für sehr viele einzelne Programme oder Systemteile gespeichert. Die Konfigurationsdateien heißen dabei in der Regel wie das Programm selbst.
Freundlicheres Frontend
Im Regelfall möchte man jedoch eine intuitivere Möglichkeit haben, um Benutzer anzulegen. Und hier kommt das Programm adduser ins Spiel, ein Frontend für useradd. Bei adduser wird ein neuer Benutzer auch ohne weitere Kommandozeilenoptionen fertig angelegt. Dazu wird der Administrator jedoch während der Erstellung des Benutzers nach wichtigen Daten gefragt: <Das widerspricht auf den ersten Blick natürlich der Unix-Philosophie.
Wenn man aber sieht, dass dieses Tool nur ein vereinfachendes Frontend und damit eine Alternative für den klassischen Weg ist, wird alles wieder konsistent. Schließlich hat man die Wahl.>
# adduser vkhaeva Adding user `vkhaeva'... Adding new group `vkhaeva' (1001). Adding new user `vkhaeva' (1001) with group `vkhaeva'. Creating home directory `/home/vkhaeva'. Copying files from `/etc/skel' Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for vkhaeva Enter the new value, or press ENTER for the default Full Name []: Veronika Khaeva Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [y/N] y
Listing 8.6 Den Benutzer 'vkhaeva' anlegen
Der auffälligste Unterschied nach der Nutzung beider Programme besteht nun darin, dass man bei adduser im Gegensatz zu useradd auch ohne eine lange Liste von Kommandozeilenoptionen einen funktionierenden Account bekommt. Die wichtigsten Unterschiede wollen wir im Folgenden betrachten:
- Eigene Gruppe
- Der neu erstellte Benutzer bekommt eine eigene Gruppe mit demselben Namen wie der Benutzer. Zwar kann man auch bei useradd mit dem »-g«-Parameter eine beliebige Gruppe angeben, der der Benutzer dann hinzugefügt wird, jedoch muss diese Gruppe bereits existieren. Da man Benutzer natürlich auch mehreren Gruppen hinzufügen kann, ist eine exklusive Gruppe für jeden neuen Benutzer erst mal ein sicherer Ansatz.
- Ein eigenes Homeverzeichnis
- Bei useradd wurde zumindest ohne Angabe des Parameters »-d« zwar ein Homeverzeichnis in die
- /etc/passwd eingetragen, es wurde aber nicht angelegt.
Vorlage für das Homeverzeichnis
- Bei adduser jedoch wird auch standardmäßig die Vorlage für neue Homeverzeichnisse – das Verzeichnis
- /etc/skel – an die entsprechende Stelle kopiert und mit den Benutzer- und Gruppenrechten des neuen Users versehen. Wenn Sie als Administrator den Inhalt eines neuen Homeverzeichnisses verändern möchten, um vielleicht angepasste Konfigurationen oder kleine Hilfedateien unterzubringen, müssen Sie also das Verzeichnis
- /etc/skel anpassen.
- Ein funktionsfertiges Passwort
- Während der Erstellung des Benutzerkontos wird man aufgefordert, das Passwort für das neue Benutzerkonto einzugeben.
- Da Passwörter unter Unix/Linux üblicherweise nicht angezeigt werden, <Schließlich lässt zum Beispiel die Anzahl der »Sternchen« einen Rückschluss auf die Länge des Passwortes zu.> wird man aufgefordert, die Eingabe zu wiederholen. Bei useradd dagegen kann man das Passwort über den »-p«-Parameter setzen, wobei hier aber schon das verschlüsselte Passwort als Eingabe erwartet wird. <Das Passwort muss wie von der Bibliotheksfunktion crypt() verschlüsselt sein.>
- Die Benutzerinformationen
- Wie unschwer zu sehen ist, wird man bei adduser aufgefordert, diverse Daten über den Benutzer einzugeben. Diese werden dann, durch Kommata getrennt, im frei verwendbaren Feld der /etc/passwd gespeichert. Bei useradd muss man dazu den Parameter »-c«, gefolgt vom gewünschten Kommentar, angeben.
- Die Shell
- Zu guter Letzt einer der wichtigsten Punkte: die Shell. Bei useradd wurde ohne den »-s«-Parameter keine Shell eingetragen und somit die Default-Shell /bin/sh genutzt. Bei adduser jedoch wird eine – für gewöhnlich »bessere« – Shell in die /etc/passwd eingetragen.
Sehen wir uns also abschließend noch den von adduser in der Datei /etc/passwd angelegten Eintrag an:
# grep vkhaeva /etc/passwd vkhaeva:x:1001:1001:Veronika Khaeva,,,:/home/vkhaeva: /bin/bash
Listing 8.7 Der neue Eintrag in der /etc/passwd
Standardeinstellung ändern
Die Einstellungen für sinnvolle Defaultwerte (beispielsweise für die Standard-Shell) kann man wie bei useradd auch in einer Konfigurationsdatei – der /etc/adduser.conf – vornehmen. Diese Datei ist sehr gut dokumentiert, und außerdem gibt es noch eine Manpage zur Syntax. Daher wollen wir uns auch nur einen Ausschnitt dieser Datei ansehen, um einen Eindruck von den vorhandenen Optionen und Konfigurationsmöglichkeiten zu bekommen:
… # The USERGROUPS variable can be either "yes" or "no". # If "yes" each created user will be given their own # group to use as a default, and their home directories # will be g+s. If "no", each created user will be # placed in the group whose gid is USERS_GID. USERGROUPS=yes # If USERGROUPS is "no", then USERS_GID should be the # GID of the group 'users' (or the equivalent group) on # your system. USERS_GID=100 …
Listing 8.8 Ein Auszug aus der /etc/adduser.conf
In diesem Abschnitt wird das Verhalten bezüglich der Benutzergruppen geregelt: Ist die Variable USERGROUPS auf »yes« gesetzt, so bekommt jeder neue Benutzer eine eigene Gruppe – es passiert also genau das, was wir in unserem adduser-Beispiel gesehen haben. Setzt man die Variable auf »no«, erreicht man ein ähnliches Verhalten wie bei useradd, da der neue Benutzer dann der Gruppe zugewiesen wird, die in USERS_GID festgelegt ist.
Unterschiede der Distributionen
Nachdem wir also die Repräsentation der Benutzer im System über die IDs im Prozesskontrollblock und die Informationen in der /etc/passwd besprochen und die distributionsunabhängigen Programme useradd und adduser zum Anlegen neuer Benutzer erklärt haben, wollen wir noch kurz ein Wort über distributionsabhängige Möglichkeiten, neue Benutzer anzulegen, verlieren.
Abbildung 8.1 Neuen Benutzer unter SuSEs YaST2 anlegen
Prinzipiell werden Sie bei grafischen Administrationsfrontends wie YaST2 der SuSE-Distribution mit denselben Fragen nach Benutzernamen, realem Namen und Passwort wie bei adduser behelligt. Oft sehen auch die Homeverzeichnisse »besonders« aus, zum Beispiel, wenn es ein /Documents- oder ein /public_html-Verzeichnis gibt. Wenn Sie also diese Voreinstellung ändern wollen, wissen Sie nun, dass Sie im /etc/skel-Verzeichnis nachgucken müssen.
8.2.2 Benutzer ändern
Der nächste interessante Gliederungspunkt ist das Ändern von Benutzerdaten. Auch wenn es vielleicht nicht offensichtlich ist – das Ändern dieser Daten ist oft wichtig. Vor allem in Mehrbenutzersystemen müssen manchmal Accounts deaktiviert oder Benutzer zum regelmäßigen Ändern des Passworts angehalten werden.
Das Passwort ändern
Diese vielleicht häufigste Änderung an den Benutzerdaten führt man als einfacher Benutzer in der Regel mit dem passwd-Programm selbst durch:
jploetner@workstation:~$ passwd
Changing password for jploetner
(current) UNIX password:
Enter new UNIX password:
passwd: password updated successfully
jploetner@workstation:~$
Listing 8.9 Ein neues Passwort mit passwd setzen
Dieses Programm fragt nach dem alten Passwort und zweimal nach dem neuen, da das Passwort, wie eigentlich üblich, während der Eingabe nicht angezeigt wird. Nun gibt es aber auch die Situation, in der der Administrator das Passwort für einen Benutzer neu setzen muss – vielleicht weil dieser es vergessen hat. Dazu ruft der Administrator passwd mit dem Benutzernamen als Argument auf:
# passwd jploetner
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Listing 8.10 Der Admin ändert das Passwort für einen Benutzeraccount.
Dabei wird root natürlich nicht nach dem Passwort gefragt: Erstens muss er es nicht wissen, <Schließlich kann root auf die /etc/shadow auch schreibend zugreifen und so das Passwort, wenn auch in verschlüsselter Form, leicht selbst neu setzen.> und zweitens geht das alte Passwort den Admin eigentlich nichts an.
Die naheliegendste Möglichkeit für weitergehende Änderungen an den Benutzerkonten ist nun das direkte Editieren der
/etc/passwd beziehungsweise der /etc/shadow. Soll ein Account zum Beispiel auf diese Art deaktiviert werden, so besteht eine Möglichkeit darin, einfach ein Ausrufezeichen vor das verschlüsselte Passwort in der /etc/shadow zu setzen. Ein Ausrufezeichen ist nämlich ein Zeichen, das bei der Verschlüsselung eines Passworts nicht entstehen kann. Daher wird nun also das richtige wie auch jedes andere denkbare Passwort in seiner verschlüsselten Form nicht mit dem verschlüsselten Passwort in der /etc/shadow übereinstimmen und das Login somit fehlschlagen.
usermod
Ein anderer, vielleicht weniger umständlicher Weg ist die Benutzung des Programms usermod. Mit diesem Programm kann man alle nötigen Felder der Dateien setzen und verändern. Alle möglichen Optionen bekommt man wie bei useradd durch Eingabe des Befehls ohne Argumente oder eben auf der Manpage:
# usermod usage: usermod [-u uid [-o]] [-g group] [-G group,...] [-d home [-m]] [-s shell] [-c comment] [-l new_name] [-f inactive] [-e expire ] [-p passwd] [-L|-U] name
Listing 8.11 Die Optionen von usermod
Um den Benutzer zu identifizieren, den man ändern will, muss man also den Login- beziehungsweise Benutzernamen angeben. Im Folgenden kann man dann UID, GID, weitere Gruppenzugehörigkeiten, das Homeverzeichnis, die Shell, den Kommentar, den Benutzernamen selbst sowie natürlich das Passwort – das hier wieder nicht im Klartext, sondern bereits verschlüsselt angegeben werden muss – ändern.
Aber auch die Inaktivitätseinstellungen für Accounts können mit diesem Programm verändert werden. Da diese Einstellungsmöglichkeiten nun recht oft in Mehrbenutzersystemen Verwendung finden, wollen wir uns im Folgenden daher gezielt diese Optionen einmal näher ansehen:
- -L
- Mit dieser Option wird ein Account mit sofortiger Wirkung auf »inaktiv« gesetzt. Der entsprechende Benutzer kann sich mit seinem Passwort in Zukunft nicht mehr einloggen, da – wie bereits vorgeschlagen – diese Option dazu führt, dass ein Ausrufezeichen vor das verschlüsselte Passwort in der /etc/shadow gesetzt wird.
- -U
- Diese Option reaktiviert einen vorher mittels »usermod -L username« ausgeschalteten Account.
Nur die shadow
- -e Ablaufdatum
- Mit diesem Parameter können Sie ein Ablaufdatum festlegen, ab dem der Account deaktiviert ist. Das Ablaufdatum müssen Sie dabei in der Form »JJJJ-MM-TT« angeben. Intern wird natürlich nur das entsprechende Feld in der /etc/shadow gesetzt:
# grep vkhaeva /etc/shadow vkhaeva:$1$fy...dssKXM.9aLU.1:12897:0:99999:7::: # usermod -e 2005-04-28 vkhaeva # grep vkhaeva /etc/shadow vkhaeva:$1$fy..dsKXM.9aLU.1:12897:0:99999:7::12901:Listing 8.12 Das Ablaufdatum für einen Account setzen
- Das Datum wird dabei also offensichtlich durch usermod von der für einen Benutzer leicht lesbaren Form in die etwas umständliche Notation der »Tage ab dem 1. Januar 1970« <also ab dem Beginn der »Unix-Zeit«> konvertiert.
- -f Inaktivität
- Mit diesem Parameter können Sie nun die Anzahl der Tage nach Ablauf des Passworts angeben, nach denen der Account schließlich deaktiviert wird. Geben Sie hier »0« an, wird der Account sofort nach Ablauf des Passworts deaktiviert; eine »-1« schaltet dieses Feature dagegen ab.
Wie Sie sehen, kann mit usermod die Handhabung der Konfigurationsdateien zur Benutzerverwaltung mitunter deutlich vereinfacht werden. Außerdem ist dieses Tool auch unter anderen Unix-Varianten vorhanden und erleichtert so vielleicht den Umstieg, da /etc/passwd und /etc/shadow unter Umständen etwas anders aufgebaut oder auch benannt sein können.
8.2.3 Benutzer löschen
Dateien nicht vergessen
Natürlich gibt es auch entsprechende Programme, die einem beim Löschen eines nicht mehr benötigten Benutzers helfen.
Besonders interessant in diesem Fall ist die Hilfe von bestimmten Programmen, wenn es um das Löschen der Dateien des Benutzers geht: Schließlich hat ein User vielleicht nicht nur sein Homeverzeichnis, sondern auch noch ein E-Mail-Verzeichnis unterhalb von /var/mail sowie andere Dateien oder Verzeichnisse, auf die er noch Rechte besitzt.
Betrachten wir dazu jedoch erst einmal folgendes Beispiel: Eine Datei »test.txt« gehöre einem Benutzer »andreas« mit UID »1003«, der aber ohne Rücksicht auf seine Dateien gelöscht wurde. Das folgende Beispiel zeigt den Effekt auf die Datei:
# ls -l test.txt
-rw-rw---- 1 1003 1003 0 2005-04-17 21:25 test.txt
Unbekannte Benutzer
Man kann unschwer erkennen, dass statt dem Benutzer- und Gruppennamen im langen Dateilisting von ls nun nur noch die UID und die – in diesem Fall mit der UID identische – GID angezeigt werden. Schließlich wird im System intern nur die UID beziehungsweise GID zur Identifikation eines Benutzers herangezogen. Bei unserem Problem konnte also die im Dateikopf – der Inode – gespeicherte UID/GID nicht mehr in einen Benutzernamen übersetzt werden und musste daher »pur« angezeigt werden.
Damit es in solchen Fällen nicht zu Verwechslungen mit eventuell existierenden Benutzernamen kommt, müssen Benutzernamen immer mit einem Buchstaben beginnen.
Sehen wir uns jetzt an, welche Programme uns zum Löschen eines Benutzers zur Verfügung stehen. Der viel gepriesenen Logik und Konsistenz von Unix und damit auch von Linux folgend müssten wir die zwei Programme userdel und deluser zur Verfügung haben – und so ist es auch. <Wie Sie sicherlich schon richtig bemerkt haben, ist einzig und allein bei usermod kein moduser-Äquivalent geläufig.>
Die Basis bildet wieder einmal userdel: Gibt man außer dem Benutzernamen keine weiteren Parameter an, so wird der Benutzer einfach aus der /etc/passwd und der /etc/shadow gelöscht. Seine Dateien im Home- und Mail-Verzeichnis werden jedoch nur gelöscht, wenn man zusätzlich die »-r«-Option auf der Kommandozeile angibt.
deluser
Dagegen bietet wie gewohnt das deluser-Frontend einige Optionen mehr. Ohne weitere Parameter wird natürlich wieder nur der User selbst, aber nicht dessen Dateien gelöscht. Die Parameter jedoch sind etwas anders und erlauben ein differenzierteres Vorgehen als bei userdel:
- --remove-home
- Mit dieser Option wird das Homeverzeichnis des zu löschenden Benutzers entfernt.
- --remove-all-files
- Diese Option löscht dagegen wirklich alle Dateien des Benutzers – also nicht nur das Homeverzeichnis und die Maildateien. Mit dieser Option ist der Parameter »--remove-home« unnötig.
- --backup
- Interessanterweise kann man die zu löschenden Dateien auch sichern lassen. Das Backup wird schließlich in Form einer komprimierten Datei ins aktuelle Verzeichnis abgelegt.
Natürlich werden wir uns diese Vorgehensweise gleich an einem Beispiel veranschaulichen:
# deluser --remove-all-files --backup vkhaeva
Looking for files to backup/remove...
Backing up files to be removed to . ...
/bin/tar: Removing leading `/' from member names
Removing files...
Removing user `vkhaeva'...
done.
# ls
vkhaeva.tar.bz2
Listing 8.13 Einen Benutzer und alle seine Dateien löschen
Mit diesem Beispiel wollen wir uns von der puren Benutzerverwaltung verabschieden und uns den Gruppen zuwenden.