1. Index
  2. Debian
  3. Desktop
  4. Heimserver
  5. Webserver

Benutzer authentifizieren

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.

Benutzer-Datenbank

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.

C-Datenstruktur passwd und LDAP Objektklasse posixAccount
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

Gruppen-Datenbank

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.

C-Datenstruktur group und LDAP Objektklasse posixGroup
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

Passwort-Datenbank

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.

C-Datenstruktur spwd und LDAP Objektklasse shadowAccount
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
sha140000 38 PBKDF

Name Service Switch

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.

Datenbanken für den Name Service Switch
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
Klassische Textdateien
compat
Textdateien mit Auswertung der NIS+ Syntax für Netgroups
nis, nisplus
Network Information System (Sun Yellow Pages)
hesiod
Namensdienst aus dem Project Athena (MIT)
sss
System Security Services Daemon (Redhat FreeIPA)
ldap
Lightweight Directory Access Protocol
winbind
Windows Internet Name Service (Samba oder Microsoft Active Directory)
systemd
Administrator (root) und dynamisch in Unit-Dateien angelete Benutzer (DynamicUser=User)
mymachines
Container mit User-Namespacing (systemd-nspwan)

Abfragen der konfigurierten Datenbanken:

getent passwd User
phrank:x:1000:1000:Frank,,,:/home/phrank:/bin/bash

Pluggeable Authentication Modules

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
Rolle des Moduls:
flag
Optionalität des Moduls:
path
Name des Moduls (siehe unten)
args
Zusätzliche Argumente, zum Beispiel:

Die 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.

Administrator werden

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

Werkzeug

Dem Administrator stehen folgende Werkzeuge zur Verfügung:

adduser
Legt ein neues Benutzerkonto mit Standardwerten aus /etc/adduser.conf an oder ordnet Benutzer weiteren Gruppen zu.
useradd
Erzeugt nur den Eintrag in der Passwortdatenbank.
usermod
Ändert einzelne Attribute eines existierenden Benutzerkontos.
userdel
Löscht ein Benutzerkonto, mit -r auch das Benutzerverzeichnis und das Postfach.

Der Benutzer selbst kann nur bestimmte Attribute seines Kontos ändern:

passwd
Ändert das eigene Passwort
chsh
Ändert die Login-Shell
chfn
Ändert Vor- und Nachname im Gecos Feld

Literatur

  1. Debian Wiki: SystemGroups
  2. Freedesktop: nss-systemd(2)
  3. Debian Wiki: Authenticating Linux with Active Directory
  4. James Y. Knigh: Setting up a Linux system to do single-sign-on with Active Directory