Benutzerkonten müssen in Linux angelegt, manipuliert und gelöscht werden. Fangen wir ganz simpel damit an einen User anzulegen, ihn dann zu verändern, dann zu sperren, dann wieder freizugeben und letztendlich wieder zu löschen.
Userdaten wie UserID, Home-Verzeichnis etc müssen irgendwo im System hinterlegt sein. Benutzername und Passwörter befanden früher mal in der /etc/passwd, was zu Sicherheitsproblemen führte. Man entschied sich das zu ändern und lagerte die verschlüsselten Passwörter in /etc/shadow aus. Diese Datei ist nur noch von Root lesbar.
Die Datei /etc/passwd genauer betrachtet:
User:x:1000:1000:username,,,:/home/username:/bin/bash
Wie man sieht sind die einzelnen Elemente mit Doppelpunkten getrennt. Im Detail schaut das wie folgt aus:
Genau so wie es mit der passwd ist, ist auch die Datei /etc/group gestaltet. Hier ein Auszug und im Detail wie oben erklärt:
gruppenname:x:1000:
Benutzer anlegen:
Für das Anlegen eines Benutzers benötigt man ein einfaches Useradd. Hier hat man schon die Möglichkeit verschiedene Optionen anzugeben. Beispielsweise kann man dem System anweisen das Homeverzeichnis des Users gleich anzulegen oder/und die Shell festzulegen. Es lassen sich auch gleich User- bzw. Gruppen-ID festlegen und vieles mehr.
useradd -m hannes
Hier wird einfach der User "hannes" angelegt. Die Option -m sorgt dafür, dass gleich das Home-Verzeichnis mit angelegt wird. Im Standart ist das /home/. Möchte man das Home-Verzeichnis dieses Users woanders haben, so ist die Option -b oder -d zu nutzen.
useradd -c "Hannes Hahn" -b /samba/ -s /bin/false -uid 1017 -gid 1017 -p hannes
Ich lege hier fest, dass der User "hannes" heißt und in den Comments seinen vollständigen Namen stehen hat. Weiter sage ich, dass das User-Homedir nicht in /home/ sondern in /sambahomes/ angelegt werden soll. Der User bekommt keine Login-Shell zur lokalen Anmeldung und bekommt die User-ID 10117 sowie der Gruppe zugewiesen, die die ID 10117 hat. Zum Schluss sorgt die Option -p dafür, dass direkt nach einem Passwort für den User gefragt wird.
Benutzer manipulieren:
Darunter ist zu verstehen, dass beispielsweise das Passwort, Home-Directory oder die GID des Users geändert wird.
Passwort ändern:
passwd hannes
Man wird nun aufgefordert zwei mal das neue Passwort einzugeben.
GID ändern:
usermod -g sambausers hannes
Die Stammgruppe des Benutzers wird auf sambausers
geändert.
GID hinzufügen:
usermod -aG sambausers hannes
Der Benutzer Hannes wird der Gruppe sambausers
zusätzlich hinzugefügt. Er ist also nicht nur Mitglied der Gruppe mit der ID 10117, sondern auch der Gruppe sambausers
.
Benutzer löschen:
userdel hannes
Der Benutzer hannes wird gelöscht. Allerdings nur aus der /etc/passwd sowie /etc/shadow. Das Problem ist dabei, dass das User-Home und seine Mails erhalten bleiben. Ist das nicht gewünscht, so muss die Option -r hinzugefügt werden.
userdel -r hannes
Nun wird auch das User-Home und Mails gelöscht. Es könnte aber sein, dass der User noch eingelogt ist, was das Löschen erschwert.
userdel -r -f hannes
Die Option -f (force) sorgt dafür, dass ein noch eingelogter User gelöscht werden kann.
Benutzer sperren/entsperren:
Damit ein Benutzer vorrübergehend gesperrt wird bzw. nachher wieder entsperrt wird, kann der Befehl usermod benutzt werden. Folgender Befehl sperrt den Benutzer "hannes". Der dann nachfolgende Befehl entsperrt "hannes" wieder.
usermod -L hannes
usermod -U hannes
Was genau passiert? In der Datei /etc/shadow ist für jeden Benutzer eine Zeile angelegt. Vor dem Hash-Wert des Passwortes wird dann einfach ein Ausrufezeichen gesetzt, was dem System sagt, dass dieser Benutzer gesperrt ist. Ein erneuter Login ist nicht möglich, jedoch bleibt die gerade bestehende Sitzung bestehen. Der Benutzer wird nicht getrennt.
Gesperrter User: hannes:!$6$I1L......MLS.85wrsmNw.1ZsrtR.ta.r0:17706:0:99999:7:::
Entsperrter User: hannes:$6$I1L......MLS.85wrsmNw.1ZsrtR.ta.r0:17706:0:99999:7:::
Die Datei /etc/shadow
Wie oben bereits angedeutet speichert Linux hier das Benutzerpasswort. Aber nicht nur das. In dieser Datei befinden sich auch Informationen darüber wie alt ein Passwort bereits ist und wann es geändert werden muss und einiges mehr. Hier die Aufschlüsselung:
hannes:!$6$I1L3....rsmNw.1ZsrtR.ta.r0:17706:0:1000:7:4:1:
Ich habe es farblich abgesetzt, um die Felder besser zu beschreiben.
Zu Demonstrationszwecken habe ich natürlich alle Felder gefüllt, dass sie einen Wert enthalten anhand dessen ich zeigen kann was sie bedeuten. Im Standart schaut so eine Zeile aber so aus wie in den Beispielen "gesperrter/entsperrter User".
Apropos Standart
Dieser lässt sich natürlich ändern. In der Datei /etc/login.defs
sind die nötigen Parameter in der Sektion "Password aging controls", die sich je nach Bedarf anpassen lassen. Die interessanten Parameter sind die folgenden:
PASS_MAX_DAYS 99999
(Wie viele Tage ein Passwort gültig ist)PASS_MIN_DAYS 0
(Alle wie viele Tage darf ein Passwort geändert werden darf)PASS_MIN_LEN 12
(Wie lang ein Passwort mindestens sein muss)PASS_WARN_AGE 7
(Anzahl restlicher Tage bevor das Passwort abläuft)
Änderungen in der Datei /etc/login.defs
haben natürlich keine Auswirkung auf bereits bestehende Benutzerkonten. Dazu muss die /etc/shadow vom System neu geschrieben werden. Man kann das natürlich händisch machen, aber bei mehreren hundert Benutzerkonten ist das weniger schön. Der einfachste Weg ist ein pwunconv
auszuführen und danach direkt wieder ein pwconv
, was dafür sorgt, dass die Datei /etc/shadow
neu geschrieben wird - und zwar mit den Änderungen, die in der /etc/login.defs
vorgenommen wurden.
Was genau passiert ist folgendes: Die Passwörter werden mit dem Befehl pwunconv
wie früher in der /etc/passwd zurückgespeichert. Der Befehl pwconv
hingegen generiert die Datei /etc/shadow
neu und löscht die Passwörter aus der /etc/passwd
wieder raus.