Bei der Anmeldung am System greifen Programme wie
login
oder gdm3
über eine Bibliothek namens
PAM
auf die Benutzer- und Gruppen-Datenbanken zu. In größeren
Netzwerken verwaltet man diese Datenbanken gerne zentral in einem
LDAP-Verzeichnis und realisiert
SSO über Kerberos.
Traditionell verwaltet Unix Benutzer in der Textdatei
/etc/passwd
. Ursprünglich wurde dort auch
ein Streuwert des Passworts gespeichert. Da alle Benutzer die
Datei lesen können, steht in dieser Spalte nur noch
ein x
oder ein !
für gesperrte Konten.
Das Paket base-passwd
reserviert die kleinen
Nummern für traditionell fest zugeordnete Rollen. Daemonen erhalten
UIDs
ab 100 und Menschen ab 1000.
passwd | posixAccount | Beispiel | Beschreibung |
---|---|---|---|
pw_user | uid | phrank | Benutzername |
pw_passwd | userPassword | x | Streuwert des Passworts |
pw_uid | uidNumber | 1000 | Numerische Identifikation des Benutzers |
pw_gid | gidNumber | 1000 | Numerische Identifikation der primäre Gruppe |
pw_gecos | cn | Frank Hoffmann | Vor- und Nachname |
pw_dir | homeDirectory | /home/phrank | Benutzerverzeichnis |
pw_shell | loginShell | /bin/bash | Befehlsinterpreter |
Die Textdatei /etc/group
listet Gruppen und
deren Mitglieder auf. Normalerweise ist die Zuordnung
festgelegt. Der Administrator kanne einer Gruppe aber auch ein
Passwort geben, mit dem Nicht-Mitglieder für die Dauer einer
Sitzung der Gruppe beitreten können. Die Streuwerte der Passwörter
selbst sind dann in /etc/gshadow
ausgelagert.
group | posixGroup | Beispiel | Beschreibung |
---|---|---|---|
gr_name | cn | sudo | Gruppenname |
gr_passwd | userPassword | x | Streuwert des Passworts |
gr_gid | gidNumber | 27 | Numerische Gruppen-ID |
gr_mem | memberUid | phrank | Benutzerliste |
Um Einbrechern das knacken von Passwörtern zu erschweren,
werden die Streuwerte der Passwörter in der nur vom Administrator
lesbaren Datei /etc/shadow
gespeichert oder von
einem Dienst wie Kerberos verwaltet.
spwd | shadowAccount | Beispiel | Beschreibung |
---|---|---|---|
sp_namp | uid | phrank | Benutzername |
sp_pwdp | userPassword | $6$9Ah… | Streuwert des Passworts |
sp_lastchg | shadowLastChange | 17370 | Epochen-Tag der letzten Änderung |
sp_min | shadowMin | 0 | Nächste Änderung frühestens |
sp_max | shadowMax | 99999 | Nächste Änderung spätestens |
sp_warn | shadowWarning | 7 | Tage bis Ablaufwarnung |
sp_inact | shadowInactive | Tage bis Kontosperrung | |
sp_expire | shadowExpire | Datum der Kontosperrung | |
sp_flag | shadowFlag | Reserviert |
Mit diesen Mitteln lassen sich häufige Änderungen des Passworts erzwingen und Konten zu einem Stichtag sperren, zum Beispiel, wenn ein Mitarbeiter die Firma verlässt. Zeiteinheiten werden in Tagen seit Beginn der Unix-Epoche berechnet.
Schema | Salz | Streuwert | Algorithmus | POSIX | GNU | BSD |
2 | 8 | DES | ☑ | ☑ | ☑ | |
_ | ? | ? | BSD | ☐ | ☐ | ☑ |
1 | 16 | 22 | MD5 | ☐ | ☑ | ☑ |
2 | 16 | ? | bcrypt | ☐ | ☐ | ☑ |
3 | ? | NTHASH | ☐ | ☐ | ☑ | |
5 | 16 | 43 | SHA-256 | ☐ | ☑ | ☑ |
6 | 16 | 86 | SHA-512 | ☐ | ☑ | ☑ |
sha1 | 40000 | 38 | PBKDF | ☐ | ☐ | ☑ |
Der NSS
assoziiert die verfügbaren Datenbanken mit einer oder mehreren Quellen
(Services). Im einfachsten Fall sind es
die oben beschriebenen Textdateien, es können aber auch zentralisierte
Dienste angezapft werden. Die Implementierung befindet sich in einer
Bibliothek namens /lib/x86_64-linux-gnu/libnss_Service.so
.
Datenbank | Datei | Beschreibung | |
---|---|---|---|
passwd | /etc/passwd | Benutzerliste | |
group | /etc/group | Gruppen-Mitglieder | |
shadow | /etc/shadow | Streuwerte der Passwörter der Benutzer | |
gshadow | /etc/gshadow | Streuwerte der Passwörter von Gruppen | |
aliases | /etc/aliases | Generische Elektropost-Adressen | |
hosts | /etc/hosts | Netzwerk-Adressen zu Hostnamen | |
networks | /etc/networks | Registrierte Netzwerke | |
services | /etc/services | Namen zu Portnummern | |
protocols | /etc/protocols | Transport-Protokolle | |
ethers | /etc/ethers | Statische MAC- Adressen. | |
rpc | /etc/rpc | Portmapper Daemon | |
publickey | /etc/publickey | Schlüssel für Sun-RPC | |
netgroup | /etc/netgroup | NIS Netzgruppen |
Für die Datenbanken passwd
, group
und
shadow
stehen folgende Service-Module zur Verfügung:
files
compat
nis, nisplus
hesiod
sss
ldap
winbind
systemd
root
) und dynamisch in Unit-Dateien angelete Benutzer (DynamicUser=User
)mymachines
systemd-nspwan
)Abfragen der konfigurierten Datenbanken:
getent passwd User phrank:x:1000:1000:Frank,,,:/home/phrank:/bin/bash
Jedes Programm, das Benutzer via
PAM
authentifizieren möchte, legt unter /etc/pam.d
eine Datei ab, die regelt, wann welche Module befragt werden.
Die Konfiguration hat 4 Spalten:
type
auth
: Passwort prüfenaccount
: Zugangsberechtigung prüfensession
: Sitzung initialisierenpassword
: Passwort ändernflag
required
: Alle Module müssen erfolgreich seinsufficient
: Mindestens ein Modul muss erfolgreich seinoptional
: Modul darf auch fehlschlagenrequisite
: Abbruch beim ersten Fehlerpath
args
debug
: Alles protokollierenno_warn
: Fehler nicht protokollierenuse_first_pass
: Passwort wiederverwendentry_first_pass
: Wiederverwenden oder neues Passwort anfordernDie Module selbst liegen unter /lib/x86_64-linux-gnu/security/pam_Module.so
.
Modul | Konfiguration | Beschreibung | |
---|---|---|---|
pam_permit.so | Gelingt immer | ||
pam_deny.so | Versagt immer | ||
pam_unix.so | /etc/nsswitch.conf | Zugriff auf Benutzer- und Passwort-Datenbank | |
pam_krb5.so | /etc/krb5.conf | Prüft Kerberos-Passwort und erzeugt TGT | |
pam_ldap.so | /etc/ldap/ldap.conf | Prüft userPassword im LDAP-Verzeichnis | |
pam_winbind.so | /etc/samba/smb.conf | Verwendet Samba oder Active Directory | |
pam_sss.so | /etc/sssd.conf | Verwendet System Security Services Daemon | |
pam_ssh.so | ~/.ssh/id_rsa | Startet den ssh-agent | |
pam_gnome_keyring.so | Startet den gnome-keyring-daemon | ||
pam_env.so | /etc/environment | Setzt Umgebungsvariablen | |
pam_mount.so | /etc/security/pam_mount.conf | Bindet verschlüsseltes Dateisystem ein | |
pam_encfs.so | /etc/security/pam_encfs.conf | Bindet verschlüsseltes Verzeichnis ein | |
pam_mkhomedir.so | /etc/skel | Erzeugt das Benutzerverzeichnis dynamisch |
pam-auth-update(8)
schaltet interaktiv einzelne Module an- oder aus.
Benutzer in der Gruppe sudo
dürfen das gleichnamige
Kommando verwenden, um nach Eingabe ihres Passworts Befehle mit
Administrator-Rechten ausführen.
adduser User sudo
Keine gute Idee ist es, ganz auf die Eingabe des Passworts zu verzichten. Das ginge so:
/etc/sudoers# Superuser is omnipotent root ALL=(ALL:ALL) ALL # Members of the sudo group may gain root privileges %sudo ALL=(ALL:ALL) ALL # This user does not need a password. Don't do this! User ALL=NOPASSWD: ALL
Dem Administrator stehen folgende Werkzeuge zur Verfügung:
adduser
/etc/adduser.conf
an oder ordnet Benutzer
weiteren Gruppen zu.useradd
usermod
userdel
-r
auch das Benutzerverzeichnis und das Postfach.Der Benutzer selbst kann nur bestimmte Attribute seines Kontos ändern:
passwd
chsh
chfn