ICT-Infrastruktur für Bildungsaufgaben
4. Benutzerverwaltung
Thomas Leitner <thomas.leitner@univie.ac.at>
Fakultät für Mathematik, Universität Wien Sommersemester 2013
Letzte Änderung: 2013-09-20 20:46:17 +0200
Inhalt
Allgemeines
Merkmale von Benutzer und Gruppen Lokale Benutzer und Gruppen PAM und NSS
Befehle für die Benutzer- und Gruppenverwaltung
Allgemeines 1
Unter Linux gibt es ein einfaches Benutzer- bzw. Berechtigungskonzept:
Es gibt einen speziellen Benutzer, üblicherweise root genannt, der alles darf.
Daneben gibt es noch viele „normale“ Benutzer, die grundsätzlich die gleichen Rechte haben.
Ein Benutzer ist auch immer einer oder mehreren Gruppen zugeordnet, die bestimmte Rechte hat.
Allerdings gibt es eine Vielzahl an Möglichkeiten, wie man bestimmten Benutzern mehr erlauben kann:
durch Zuordnung zu bestimmten Gruppen über den sudo-Befehl
durch Zuordnung sogenannter Fähigkeiten (Capabilities; seit Linux 2.2)
Wichtig ist auch immer der Unterschied Authentifikation (wer bin ich?) und Autorisation (was darf ich)!
Allgemeines 2
Wie generell bei der Systemadministration ist es auch bei der Benutzerverwaltung wichtig, möglichst alles zu automatisieren:
Anlegen von Benutzern (kann in manchen Umgebungen aus vielen Schritten bestehen, z.B. Anlegen eines Benutzerkontos in einem LDAP-Verzeichnis, Erstellen des Home-Verzeichnisses und eines Windows-Profil-Verzeichnisses auf einem Dateiserver, Eintragen des Benutzers in Mailing-Listen, …)
Löschen von Benutzern (Benutzerkonto und sämtliche Daten löschen; zur Sicherheit ein Backup der Daten machen) Regelmäßiges Entfernen von „Karteileichen“ aus dem System
Benutzer 1
Jeder Benutzer besitzt bestimmte Merkmale:
Name: Ein eindeutiger Loginname für den Benutzer.
UID (User ID): Eine eindeutige Nummer für den Benutzer (>=0).
GID (Group ID): Die Nummer der primären Gruppe des Benutzers.
GECOS-Feld: Enthält den realen Namen sowie eventuell zusätzliche Informationen über den Benutzer (z.B. Raumnummer, Telefonnummer). Der Name stammt von frühen Unix-Maschinen mit dem Namen GECOS (General Comprehensive Operating System), die dieses Feld für zusätzliche Informationen benutzten.
Home-Verzeichnis: Das Verzeichnis, in dem der Benutzer alle seine Daten abspeichern kann bzw. in dem seine Konfigurationsdateien liegen (üblicherweise
/home/BENUTZER_NAME
).Login-Shell: Der Pfad des Programms, das beim Einloggen des Benutzers ausgeführt werden soll.
Benutzer 2
Der Loginname darf nur aus Kleinbuchstaben, Ziffern und dem Unterstrich bestehen und muss mit einem Buchstaben beginnen.
Die Loginnamen dienen lediglich der Darstellung gegenüber Benutzern des Systems, intern (auf Prozess- oder Dateisystemebene) werden immer die numerischen Werte (UID, GID) verwendet.
Die Anzahl der möglichen UIDs/GIDs seit Linux 2.6 ist 4294967296 (i.e. 2^32).
Der spezielle Benutzer, root, muss die UID 0 haben (ist natürlich standardmäßig der Fall).
Das Home-Verzeichnis eines Benutzers muss nicht unbedingt existieren. Als Ersatz wird dann das Root-Verzeichnis (/) verwendet. Da ein normaler Benutzer nicht die Berechtigung hat, im Root-Verzeichnis Dateien anzulegen/zu verändern, funktionieren dann aber einige Sachen nicht richtig (z.B. funktioniert das Einloggen auf der graphischen Oberfläche nicht).
Die Informationen im GECOS-Feld werden von einigen Applikationen ausgewertet (z.B. vom Programm finger), sind aber nicht direkt für das System wichtig.
Gruppen
Wie Benutzer haben auch Gruppen bestimmte Merkmale:
Name: Ein eindeutiger Gruppenname.
GID: Eine eindeutige Nummer für die Gruppe.
Gruppenmitglieder: Eine Liste der Benutzer, die in dieser Gruppe Mitglied sein sollen.
Jeder Benutzer hat eine primäre Gruppe: Das ist die Gruppe, die direkt bei den Merkmalen des Benutzers angegeben ist.
Zusätzlich kann ein Benutzer Mitglied in beliebigen anderen Gruppen sein, das sind dann die sekundären Gruppen des Benutzers. Temporär kann ein Benutzer mittels des Befehls
newgrp
seine primäre Gruppe ändern.Die primäre Gruppe wird z.B. beim Anlegen von neuen Dateien oder beim Starten von Prozessen verwendet (jeder Datei/jedem Prozess ist ja sowohl eine UID als auch eine GID zugeordnet, um Berechtigungen zu prüfen).
Lokale Benutzer/Gruppen
Wenn man nichts anderes einstellt, werden Benutzer und Gruppen lokal am System definiert. Dazu werden die folgenden Dateien verwendet:
/etc/passwd
: Benutzerdaten/etc/group
: Gruppendaten/etc/shadow
: Passwörter und Passwortrichtlinien für Benutzer/etc/gshadow
: Passwörter für GruppenWichtig: Diese Dateien sollten nur mit den Befehlen vipw bzw. vigr editiert werden, um Datenkorruption vorzubeugen. Schleicht sich nämlich ein Fehler ein, so kann es sein, dass man nicht mehr einloggen kann!
Lokale Benutzer - /etc/passwd 1
In der Passwortdatei
/etc/passwd
sind die Benutzer mit ihren Merkmalen gespeichert. Diese Datei muss von allen Benutzer gelesen werden können. Im Gegensatz zu ihrem Namen sollte das Passwort in der Passwortdatei nicht gespeichert werden!Jede Zeile beschreibt einen Benutzter, die einzelnen Werte sind mit Doppelpunkten von einander getrennt.
Eine typische Zeile sieht zum Beispiel so aus (
man 5 passwd
):root:x:0:0:root:/root:/bin/bash / | \ \ \ \ \
Benutzername | \ GID GECOS \ Login-Shell Passwort UID Home-Verzeichnis Lokale Benutzer - /etc/passwd 2
Es sind also alle oben genannten Merkmale eines Benutzers vorhanden und zusätzlich noch ein Passwort-Feld. Folgende Werte darf das Passwort-Feld besitzen:
Kein Wert: Der Benutzer kann sich ohne Passwort einloggen. Allerdings kann es sein, dass manche Applikationen dann den Zugriff vollständig verbieten. D.h. man sollte hier immer etwas eintragen!
x
: Steht im Passwort-Feld ein kleines „x“, dann bedeutet das, dass das verschlüsselte Passwort in der Datei/etc/shadow
zu finden ist. In diesem Fall muss es eine entsprechende Zeile in dieser Datei geben!Jeder andere Wert wird als verschlüsseltes Passwort interpretiert.
Lokale Passwörter - /etc/shadow 1
Da die Passwortdatei
/etc/passwd
von allen Benutzer gelesen werden können soll, ist es nicht ratsam, darin die Passwörter zu speichern. Daher gibt es die Möglichkeit, beim Passwort-Feld ein „x“ einzugeben, was für das System bedeutet, dass das eigentlich Passwort in der Shadowdatei/etc/shadow
gespeichert ist.Diese Datei hat die gleiche Syntax wie
/etc/passwd
, die Felder haben aber eine andere Bedeutung. Hier wieder eine typische Zeile (siehe auchman 5 shadow
):root:*:15779:0:99999:7: : : | | | | | | | | \
| | | | | | | \ Reserviertes Feld
| | | | | | \ Ablaufdatum des Kontos
| | | | | | \ Ablaufdatum des Kontos
| | | | | \ Passwortänderungszeitraum nach Passwortablauf (Tage) | | | | \ Warnzeitraum vor Passwortablauf (Tage)
| | | \ Maximales Passwortalter (Tage) | | \ Minimales Passwortalter (Tage) | \ Datum der letzten Passwortänderung \ verschlüsseltes Passwort
Benutzername
Lokale Passwörter - /etc/shadow 2
Die Datumsangaben erfolgen immer als Anzahl der Tage seit 1. Jänner 1970.
Das Feld für das verschlüsselte Passwort kann folgende Werte enthalten:
Kein Wert: Gleicher Effekt wie leeres Passwort-Feld in
/etc/passwd
.Verschlüsseltes Passwort: Erkennt man daran, dass der Wert mit
$ID$
anfängt (ID
gibt denVerschlüsselungsalgorithmus an).
!...
: Fängt das Passwort-Feld mit einem Rufzeichen an, so ist das Konto gesperrt.Andere Werte (z.B.
*
) zeigen ein ungültiges Passwort an; der Benutzer kann also nicht mit einem Passwort einloggen (aber eventuell mit anderen Methoden).Lokale Gruppen - /etc/group
In dieser Datei sind eie Gruppen mit ihren Merkmalen gespeichert. Wie bei den Benutzer wird pro Zeile eine Gruppe definiert.
Eine typische Zeile sieht so aus:
adm:x:4:thomas,admin / | | \
Gruppenname / \ Liste von Gruppenmitgliedern Passwort GID
In der Datei
/etc/gshadow
könnten verschlüsselte Passwörter für Gruppen gesetzt werden. Es ist allerdings sehr unüblich, Passwörter für Gruppen zu vergeben.Authentifikation/Autorisation mit PAM 1
Die Authentifikation (und ein Teil der Autorisation) erfolgt unter Linux fast immer über PAM (Pluggable Authentication Modules for Linux, siehe auch
man 7 pam
).Es gibt vier unterschiedliche Bereiche innerhalb vom PAM:
account: Methoden zur Überprüfung des Kontos (Ist das Passwort abgelaufen? Darf der Benutzer auf das Service zugreifen?)
auth: Methoden zur Authentifizierung des Benutzer (z.B. über ein Passwort, eine ID-Karte oder einen Fingerabdruckscanner) password: Methoden zur Änderung der Authentifikation (z.B. ändern des Passworts)
session: Methoden, die es erlauben, vor und nach Erteilung des Zugriffs bestimmte Dinge zu tun (z.B. Loggen, wenn sich ein Benutzer an- bzw. abmeldet)
Die Konfiguration erfolgt durch Dateien im Verzeichnis
/etc/pam.d/
. Unter Ubuntu sind die Standardeinstellungen in den Dateiencommon-account
,common-auth
,common-password
undcommon-session
zu finden.Authentifikation/Autorisation mit PAM 2
Einige PAM-Module kurz im Überblick (eine Liste aller Module bekommt man über
apt-cache search libpam
):pam_unix: Das Standard-Unix-Modul. Es erlaubt die Authentifikation und Autorisation über die Passwort- und über die Shadowdatei.
pam_env: Setzen/Löschen von Umgebungsvariablen (verwendet die Datei
/etc/security/pam_env.conf
zurKonfiguration).
pam_limits: Aktiviert Beschränkungen in Bezug auf Systemressourcen (z.B. CPU-Zeit; verwendet die Datei
/etc/security/limits.conf
zur Konfiguration).pam_group: Dynamisches Zuweisung von Gruppen zu Benutzern (verwendet die Datei
/etc/security/group.conf
zur Konfiguration).pam_cap: Zuweisen von „Fähigkeiten“ (verwendet die Datei
/etc/security/capabilities.conf
zurKonfiguration).
pam_ldap: Authentifikation über einen LDAP-Verzeichnis-Server (z.B. OpenLDAP oder Microsoft Active Directory). Dieses Modul sollte man immer gemeinsam mit dem nss_ldap-Modul für den Name Service Switch verwenden.
Name Service Switch (NSS)
Der Name Service Switch (NSS) dient unter Linux dazu, verschiedene Quellen für Namensdienste zu konfigurieren. Unter Namensdienste fallen zum Beispiel Benutzerdaten, Gruppendaten, Passwortdaten und Host-Namen.
Konfiguriert wird der NSS über die Datei
/etc/nsswitch.conf
. Hier ein Ausschnitt aus dieser:passwd: compat group: compat shadow: compat
hosts: files dns mdns4
In den ersten drei Zeilen wird für die Dienste passwd, group und shadow (i.e. Benutzer-, Gruppen- und Passwortdaten) das compat-Modul verwendet (d.h. die Daten werden von den oben besprochenen Dateien gelesen werden).
Die Auflösung der Host-Namen erfolgt zuerst durch die lokale Datei
/etc/hosts
, dann über das DNS-System und zum Schluss über einen Multicast DNS-Klienten.Eine Auflistung aller vorhandenen Module bekommt man über
apt-cache search libnss
.Allgemeine Befehle - getent
Allgemeine Befehle - id, groups
Befehle für Benutzerverwaltung - useradd
getent - Zeigt Datensätze aus einer Administrationsdatenbank an.
Die folgenden, über NSS konfigurierbaren Datenbanken können ausgelesen werden:
passwd
,group
,hosts
,services
,protocols
undnetworks
.Der Befehl ist besonders nützlich, wenn nicht nur lokale (d.h. am System definierte) Daten vorhanden sind, sondern auch externe Daten (z.B. aus einem LDAP-Verzeichnis).
$ getent passwd | head -n 3 root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh
$ getent group root root:x:0:
$ getent hosts
127.0.0.1 localhost 127.0.1.1 praxis
127.0.0.1 ip6-localhost ip6-loopback
»
»
»
id - Zeigt Benutzer- und Gruppeninformationen an.
Verwendet den aktuellen Benutzer oder den via Parameter angegebenen.
$ id
uid=1000(praxis) gid=1000(praxis) Gruppen=1000(praxis),4(adm),24(cdrom),27(sudo), 30(dip),46(plugdev),111(lpadmin),112(sambashare)
$ id root
uid=0(root) gid=0(root) Gruppen=0(root) groups - Zeigt die Gruppen eines Benutzers an.
Verwendet den aktuellen Benutzer oder den via Parameter angegebenen.
$ groups
praxis adm cdrom sudo dip plugdev lpadmin sambashare
$ groups root praxis root : root
praxis : praxis adm cdrom sudo dip plugdev lpadmin sambashare
»
»
»
»
useradd - Legt ein neues Benutzerkonto an.
Standardwerte für einige Optionen sind in
/etc/default/useradd
und/etc/login.defs
hinterlegt.Optionen:
-d Home-Verzeichnis
→ Home-Verzeichnis-m
→ Home-Verzeichnis anlegen, Daten von Skeleton-Verzeichnis kopieren-k Verzeichnis
→ Verzeichnis als Skeleton-Verzeichnis verwenden-g GID
→ primäre Gruppe (GID oder Name)-G Gruppe[,Gruppe...]
→ sekundäre Gruppen-e Ablaufdatum
→ Ablaufdatum des Kontos»
»
Unter Ubuntu (Debian) gibt es auch das Programm adduser, das ein freundlicheres Frontend für useradd und verwandte Befehle ist.
Befehle für Benutzerverwaltung - usermod
Befehle für Benutzerverwaltung - userdel
Befehle für Benutzerverwaltung - chsh, chfn
Befehle für Benutzerverwaltung - chage
-e Ablaufdatum
→ Ablaufdatum des Kontos-s Shell
→ Login-Shell$ useradd -d /home/leitnert -k /etc/skel_lehrer -m -g lehrer leitnert
$ getent passwd leitnert
leitnert:x:1001:1002::/home/leitnert:/bin/sh
»
usermod - Modifiziert ein Benutzerkonto.
Optionen:
-L
→ Benutzerpasswort sperren-U
→ Benutzerpasswort entsperren-g GID
→ primäre Gruppe ändern-G Gruppe[,Gruppe...]
→ sekundäre Gruppen setzen-l NeuerName
→ Benutzernamen ändern-u UID
→ UID ändern (Dateien im Home-Verzeichnis bekommen die neue UID automatisch gesetzt)-s Shell
→ Login-Shell ändern.Aufpassen beim Ändern des Namens und der UID: Der Benutzer sollte nicht eingeloggt sein!
$ getent passwd leitnert
leitnert:x:1001:1002::/home/leitnert:/bin/sh
$ usermod -s /bin/bash -g adm leitnert
$ getent passwd leitnert
leitnert:x:1001:4::/home/leitnert:/bin/bash
»
»
»
userdel - Löscht ein Benutzerkonto.
Optionen:
-r
→ lösche das Home-Verzeichnis des Benutzers.$ find /home/leitnert /home/leitnert
$ userdel -r leitnert
$ getent passwd leitnert
$ find /home/leitnert
find: "/home/leitnert": Datei oder Verzeichnis nicht gefunden
»
»
chsh - Ändert die Login-Shell.
Kann ein Benutzer selbst ausführen.
Die Datei
/etc/shells
wird konsultiert und nur die darin aufgelisteten Programme kann ein Benutzer als Login-Shell setzen.Vor dem Ändern muss man sich authentifizieren.
chfn - Ändert die Informationen im GECOS-Feld.
Kann ein Benutzer selbst ausführen.
Vor dem Ändern muss man sich authentifizieren.
Was genau der Benutzer ändern darf, ist über den Schlüssel CHFN_RESTRICT in der Datei
/etc/login.defs
festgelegt.
»
»
»
»
»
»
chage - Ändert Passwortablaufinformation oder zeigt sie an.
Alle zusätzlichen Informationen, die in der Shadowdatei gespeichert werden, können geändert werden.
Optionen (Auszug):
-d Datum
→ Ändert das Datum der letzten Passwortänderung-E Datum
→ Ändert das Ablaufdatum-l
→ Zeigt die Passwortablaufinformationen an Ein normaler Benutzer kann nur die Option-l
verwenden.$ chage -l praxis
Last password change : Mär 17, 2013 Password expires : never
Password inactive : never
Account expires : Mär 20, 2013 Minimum number of days between password change : 0
»
»
»
»
Befehle für Benutzerverwaltung - passwd
Befehle für Gruppenverwaltung - groupadd, groupmod, groupdel
Copyright und Lizenz
Copyright: Thomas Leitner thomas.leitner@univie.ac.at Lizenz: Creative Commons CC BY-NC-SA
„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/
Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
$ chage -d 2013-03-01 praxis
$ chage -l praxis | head -n 1
Last password change : Mär 01, 2013
passwd - Ändert das Passwort eines Benutzers.
Der Administrator kann ohne Wissen des Passworts das Passwort eines Benutzers ändern. Er muss sich auch nicht an die Passwortrichtlinien halten.
Ähnlich zum Befehl chage können auch Passwortablaufinformationen geändert werden.
$ passwd praxis
Ändern des Passworts für praxis.
(aktuelles) UNIX-Passwort: -->Aktuelles Passwort eingeben<--
Geben Sie ein neues UNIX-Passwort ein: -->Kurzes Passwort eingeben<-- Geben Sie das neue UNIX-Passwort erneut ein: -->Kurzes Passwort eingeben<-- Sie müssen ein längeres Passwort auswählen.
Geben Sie ein neues UNIX-Passwort ein: -->Langes Passwort eingeben<-- Geben Sie das neue UNIX-Passwort erneut ein: -->Langes Passwort eingeben<-- passwd: password updated successfully
$ passwd -l praxis
passwd: password expiry information changed.
$ passwd -S praxis
praxis L 03/01/2013 0 99999 7 -1
$ passwd -u praxis
passwd: password expiry information changed.
$ passwd -S praxis
praxis P 03/01/2013 0 99999 7 -1
»
»
»
groupadd - Legt eine neue Gruppe an.
Optionen:
-g GID
→ die GID der Gruppe.$ groupadd lehrer
$ getent group lehrer lehrer:x:1002:
groupmod - Ändert Gruppeninformationen.
Optionen:
-g GID
→ ändert die GID,-n Name
→ ändert den Gruppennamen.$ groupmod -g 1515 -n teachers lehrer
$ getent group teachers teachers:x:1515:
groupdel - Löscht eine Gruppe.
$ groupdel teachers
$ groupdel praxis
groupdel: cannot remove the primary group of user 'praxis'
»
»
»
»
»