Kapitel 4. Authentifizierung

Inhaltsverzeichnis

4.1. Normale Unix-Authentifizierung
4.2. Verwalten von Konten- und Passwortinformationen
4.3. Ein gutes Passwort
4.4. Verschlüsselte Passwörter erstellen
4.5. PAM und NSS
4.5.1. Konfigurationsdateien, auf die PAM und NSS zugreifen
4.5.2. Modernes zentralisiertes Systemmanagement
4.5.3. "Warum unterstützt GNU su nicht die wheel-Gruppe"
4.5.4. Schärfere Passwortregeln
4.6. Andere Möglichkeiten zur Zugriffskontrolle
4.6.1. sudo
4.6.2. PolicyKit
4.6.3. SELinux
4.6.4. Den Zugriff auf einige Server-Dienste einschränken
4.7. Sicherheit der Authentifizierung
4.7.1. Sicheres Passwort im Internet
4.7.2. Secure Shell (sichere Shell)
4.7.3. Zusätzliche Sicherheitsmaßnahmen für das Internet
4.7.4. Sichern des root-Passworts

Wenn eine Person (oder ein Programm) Zugriff auf das System erlangen möchte, wird über die Authentifizierung bestätigt, dass der Identität vertraut werden kann.

[Warnung] Warnung

Konfigurationsfehler von PAM können Sie aus Ihrem eigenen System aussperren. Sie müssen eine Rettungs-CD zur Hand haben oder eine alternative Boot-Partition einrichten. Um das System wiederherzustellen, booten Sie das System damit und korrigieren Sie alles Nötige von dort.

Die normale Unix-Authentifizierung wird über das Modul pam_unix(8) von PAM (Pluggable Authentication Modules) bereitgestellt. Dessen drei wichtige Konfigurationsdateien, die durch ":" getrennte Einträge enthalten, sind:


"/etc/passwd" enthält Folgendes:

 ...
benutzer1:x:1000:1000:Name von Benutzer1,,,:/home/benutzer1:/bin/bash
benutzer2:x:1001:1001:Name von Benutzer2,,,:/home/benutzer2:/bin/bash
 ...

Wie in passwd(5) beschrieben, haben die durch ":" separierten Einträge dieser Datei folgende Bedeutungen:

  • Benutzername (Login-Name)

  • Eintrag zur Passwortspezifikation

  • Nummerische Benutzer-ID

  • Nummerische Gruppen-ID

  • Benutzername oder Kommentarfeld

  • Home-Verzeichnis des Benutzers

  • Optionale Angabe des Befehlsinterpreters für den Benutzer

Der zweite Eintrag von "/etc/passwd" wurde früher für das verschlüsselte Passwort benutzt. Seit der Einführung von "/etc/shadow" enthält er die Passwortspezifikation.


"/etc/shadow" enthält Folgendes:

 ...
benutzer1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7:::
benutzer2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7:::
 ...

Wie in shadow(5) beschrieben, haben die durch ":" separierten Einträge dieser Datei folgende Bedeutungen:

  • Benutzername (Login-Name)

  • Verschlüsseltes Passwort (das "$1$" am Anfang zeigt die Verwendung der MD5-Verschlüsselung an; "*" steht für "kein Login".)

  • Datum der letzten Passwort Änderung, ausgedrückt als Anzahl der Tage seit dem 1. Januar 1970

  • Anzahl der Tage, die der Benutzer vor der erneuten Änderung des Passworts warten muss

  • Anzahl der Tage, nach denen der Benutzer das Passwort ändern muss

  • Anzahl der Tage vor dem Verfall des Passworts, während derer der Benutzer vor dem Passwortverfall gewarnt wird

  • Anzahl der Tage, während derer das Passwort noch akzeptiert wird, obwohl es abgelaufen ist

  • Datum, an dem das Konto abläuft, ausgedrückt als Anzahl der Tage seit dem 1. Januar 1970

"/etc/group" enthält Folgendes:

gruppe1:x:20:benutzer1,benutzer2

Wie in group(5) beschrieben, haben die durch ":" separierten Einträge dieser Datei folgende Bedeutungen:

  • Gruppenname

  • Verschlüsseltes Passwort (nicht wirklich benutzt)

  • Nummerische Gruppen-ID

  • Durch "," getrennte Liste von Benutzernamen

[Anmerkung] Anmerkung

"/etc/gshadow" bietet für "/etc/group" ähnliche Funktionalität wie "/etc/shadow", diese wird aber nicht wirklich genutzt.

[Anmerkung] Anmerkung

Die aktuelle Gruppenmitgliedschaft eines Benutzers kann dynamisch angepasst werden, wenn eine Zeile mit "auth optional pam_group.so" zu "/etc/pam.d/common-auth" hinzugefügt wird und wenn dies in "/etc/security/group.conf" gesetzt ist. Lesen Sie dazu pam_group(8).

[Anmerkung] Anmerkung

Das base-passwd-Paket enthält eine verbindliche Liste von Benutzern und Gruppen: "/usr/share/doc/base-passwd/users-and-groups.html".

Hier einige erwähnenswerte Befehle zur Verwaltung von Konteninformationen:


Sie benötigen für einige Funktionen root-Privilegien. Lesen Sie crypt(3) für Informationen zur Passwort- und Datenverschlüsselung.

[Anmerkung] Anmerkung

Auf Systemen, die mit PAM und NSS eingerichtet sind, wie der Debian-alioth-Maschine, wird der Inhalt der lokalen Dateien "/etc/passwd", "/etc/group" und "/etc/shadow" auf dem System möglicherweise nicht aktiv verwendet. Obige Befehle sind aber auch in solchen Umgebungen gültig.

Bei der Erstellung eines Kontos während der Systeminstallation oder mit dem passwd(1)-Befehl sollten Sie ein gutes Passwort auswählen, das aus mindestens sechs bis acht Zeichen besteht und ein oder mehrere Zeichen aus folgenden Gruppen enthält (gemäß passwd(1)):

  • Kleinbuchstaben

  • Ziffern zwischen 0 und 9

  • Satzzeichen

[Warnung] Warnung

Wählen Sie keine Wörter für das Passwort, die erraten werden könnten: Kontoname, Sozialversicherungsnummer, Telefonnummer, Adresse, Geburtstag, Name von Familienmitgliedern oder Haustieren, Wörter, die in Lexika auftauchen, einfache Zeichenfolgen wie "12345" oder "qwerty", … alle diese sind eine schlechte Wahl für ein Passwort.

Es gibt mehrere unabhängige Werkzeuge, um verschlüsselte Passwörter mit Salz zu erzeugen:


Moderne Unix-ähnliche Systeme wie Debian stellen dem lokalen Systemadministrator die Mechanismen PAM (Pluggable Authentication Modules) und NSS (Name Service Switch) zur Systemkonfiguration bereit. Deren Funktionen können wie folgt zusammengefasst werden:

  • PAM bietet flexible Authentifizierungsmechanismen, die von Anwendungen genutzt werden, und integriert daher auch den Austausch von Passwortdaten.

  • NSS besitzt einen flexiblen Name-Service-Mechanismus, der oft von der C-Standard-Bibliothek genutzt wird, um die Benutzer- und Gruppennamen für Programme wie ls(1) und id(1) einzuholen.

Diese PAM- und NSS-Systeme müssen konsistent konfiguriert sein.

Hier einige erwähnenswerte Pakete von PAM- und NSS-Systemen:


  • Der "Linux-PAM System Administrators' Guide" in libpam-doc ist zum Erlernen der PAM-Konfiguration unerlässlich.

  • Zum Erlernen der NSS-Konfiguration ist der Abschnitt "System Databases and Name Service Switch" in glibc-doc-reference unerlässlich.

[Anmerkung] Anmerkung

Eine ausführlichere und aktuellere Liste bekommen Sie mit dem Befehl "aptitude search 'libpam-|libnss-'". Die Abkürzung NSS kann auch "Network Security Service" bedeuten, was etwas anderes ist als "Name Service Switch".

[Anmerkung] Anmerkung

PAM ist der grundlegendste Weg, um Umgebungsvariablen für jegliche Programme mit dem systemweiten Standardwert vorzubelegen.

Hier einige erwähnenswerte Konfigurationsdateien, die von PAM und NSS genutzt werden:


Einschränkungen bei der Passwortauswahl sind über die PAM-Module pam_unix(8) und pam_cracklib(8) implementiert. Diese können über deren Argumente konfiguriert werden.

[Tipp] Tipp

PAM-Module verwenden den Anhang ".so" für ihre Dateinamen.

Das moderne zentralisierte Systemmanagement kann mittels dem Lightweight Directory Access Protocol (LDAP)-Server angewendet werden, um viele Unix-ähnliche und nicht-Unix-Systeme über das Netzwerk zu administrieren. Die quelloffene Implementation des Lightweight Directory Access Protocol ist OpenLDAP.

Der LDAP-Server stellt die Konteninformationen auf Debian-Systemen durch die Nutzung von PAM und NSS mit den libpam-ldap- und libnss-ldap-Paketen bereit. Verschiedene Aktionen sind nötig, um dies zu aktivieren. (Ich verwende dieses Setup nicht, daher stammen diese Informationen komplett aus zweiter Hand. Bitte beachten Sie das beim Lesen dieses Abschnitts.)

  • Sie richten einen zentralisierten LDAP-Server ein, indem Sie ein Programm wie den komplett eigenständigen LDAP-Daemon slapd(8) laufen lassen.

  • Sie ändern die PAM-Konfigurationsdateien im Verzeichnis "/etc/pam.d/", um "pam_ldap.so" statt dem Standard "pam_unix.so" zu verwenden.

    • Debian nutzt "/etc/pam_ldap.conf" als Konfigurationsdatei für libpam-ldap und "/etc/pam_ldap.secret" als Datei zur Speicherung des root-Passworts.

  • Sie ändern die NSS-Konfiguration in der Datei "/etc/nsswitch.conf", um "ldap" statt dem Standard ("compat" oder "file") zu verwenden.

    • Debian nutzt "/etc/libnss-ldap.conf" als Konfigurationsdatei für libnss-ldap.

  • Sie müssen es so einrichten, dass libpam-ldap SSL- (oder TLS-)Verbindungen verwendet, um die Passwortsicherheit zu gewährleisten.

  • Sie müssen es so einrichten, dass libnss-ldap SSL- (oder TLS-)Verbindungen verwendet, um die Unversehrtheit der Daten auf Kosten des LDAP-Netzwerk-Overheads sicherzustellen.

  • Sie sollten nscd(8) lokal ausführen, um alle Antworten auf LDAP-Anfragen zwischenzuspeichern; dies reduziert den LDAP-Netzwerkverkehr.

Lesen Sie die Dokumentation in pam_ldap.conf(5) und "/usr/share/doc/libpam-doc/html/" aus dem libpam-doc-Paket sowie "info libc 'Name Service Switch'", bereitgestellt durch das Paket glibc-doc.

Ähnlich zu diesem Verfahren können Sie auch alternative zentralisierte Systeme mit anderen Methoden einrichten:

[Anmerkung] Anmerkung

Abschnitt 9.3.15, „Alt-SysRq key“ enthält Informationen, wie Sie die Kernel-Funktion Secure attention key (SAK) einschränken.

Das Programm sudo(8) wurde entwickelt, um einem Systemadministrator die Möglichkeit zu geben, Benutzern eingeschränkte root-Privilegien zu geben sowie um die Aktivitäten rund um das root-Konto zu protokollieren. sudo benötigt nur das Passwort eines normalen Benutzers. Installieren Sie das sudo-Paket und aktivieren Sie es, indem Sie passende Optionen in "/etc/sudoers" setzen. Konfigurationsbeispiele finden Sie unter "/usr/share/doc/sudo/examples/sudoers" und in Abschnitt 1.1.12, „sudo-Konfiguration“.

Die Art, wie ich sudo auf meinem Einzelbenutzersystem verwende (lesen Sie Abschnitt 1.1.12, „sudo-Konfiguration“), soll mich selbst vor meiner eigenen Dummheit schützen. Ich persönlich denke, dass die Verwendung von sudo eine bessere Alternative zur dauerhaften Nutzung des root-Kontos ist. Der folgende Befehl ändert zum Beispiel den Eigentümer von "<irgendeine_datei>" in "<mein_name>":

$ sudo chown <mein_name> <irgendeine_datei>

Wenn Sie das root-Passwort kennen (was bei Benutzern, die sich ihr Debian-System selbst installieren, immer der Fall ist), können Sie natürlich jeden Befehl von jeglichem Benutzerkonto aus ausführen, indem Sie "su -c" verwenden.

PolicyKit ist eine Komponente des Betriebssystems zur Kontrolle von systemweiten Privilegien auf Unix-ähnlichen Systemen.

Neuere GUI-Anwendungen sind nicht dafür entwickelt, als privilegierte Prozesse zu laufen. Sie kommunizieren mit privilegierten Prozessen über PolicyKit, um administrative Operationen durchführen zu können.

Auf Debian-Systemen beschränkt PolicyKit solche Operationen auf Benutzerkonten, die der sudo-Gruppe angehören.

Lesen Sie dazu polkit(8).

Security-Enhanced Linux (SELinux) ist ein Rahmenwerk, das die Privilegien gegenüber dem gewöhnlichen Unix-ähnlichen Sicherheitsmodell (welches auf Mandatory access control (MAC)-Regeln beruht) verschärft. Unter bestimmten Bedingungen kann dabei die Leistungsfähigkeit des root-Kontos eingeschränkt sein.

Aus Gründen der Systemsicherheit ist es eine gute Idee, so viele Server-Programme wie möglich zu deaktivieren. Dies ist besonders für Netzwerk-Server kritisch. Ungenutzte Server, die entweder direkt als Daemon oder über den Super-Server aktiviert sind, müssen als Sicherheitsrisiko angesehen werden.

Viele Programme, wie sshd(8), verwenden PAM-basierte Zugriffskontrollen. Es gibt viele Möglichkeiten, um den Zugriff auf Server-Dienste einzuschränken:

Lesen Sie dazu Abschnitt 3.2.3, „Ein Beispiel für die Runlevel-Verwaltung“, Abschnitt 3.2.4, „Die Standardparameter für jedes init-Skript“, Abschnitt 4.5.1, „Konfigurationsdateien, auf die PAM und NSS zugreifen“, Abschnitt 3.2.8, „Initialisierung der Netzwerkdienste“ und Abschnitt 5.9, „Die Netfilter-Infrastruktur“.

[Tipp] Tipp

Sun-RPC-Dienste müssen aktiviert sein für NFS und andere RPC-basierte Programme.

[Tipp] Tipp

Falls Sie Probleme mit dem Zugriff von außen auf ein aktuelles Debian-System haben, kommentieren Sie blockierende Konfigurationselemente wie "ALL: PARANOID" in "/etc/hosts.deny" aus, falls solche existieren. (Aber sie müssen vorsichtig sein bezüglich der Sicherheitsrisiken, die durch solche Aktionen entstehen.)

[Anmerkung] Anmerkung

Die Informationen hier sind für Ihre Sicherheitsbedürfnisse möglicherweise nicht passend, aber sie sollten für den Anfang eine gute Basis sein.

Viele beliebte Transport-Layer-Dienste kommunizieren Nachrichten inklusive der Passwort-Authentifizierung im Klartext. Es ist eine sehr schlechte Idee, Passwörter im Klartext über das wilde Internet zu übertragen, wo es abgehört werden kann. Sie können diese Dienste über "Transport Layer Security" (TLS) oder seinen Vorgänger "Secure Sockets Layer" (SSL) betreiben, um die vollständige Kommunikation inklusive des Passworts über die Verschlüsselung zu schützen.


Die Verschlüsselung kostet CPU-Zeit. Als CPU-freundliche Alternative können Sie die Kommunikation im Klartext lassen und nur das Passwort verschlüsseln; verwenden Sie dazu ein sicheres Authentifizierunsprotokoll wie "Authenticated Post Office Protocol" (APOP) für POP oder "Challenge-Response Authentication Mechanism MD5" (CRAM-MD5) für SMTP und IMAP. (Um E-Mail-Nachrichten über das Internet von Ihrem Mail-Client-Programm zum Mail-Server zu übertragen, ist es derzeit verbreitet, den neuen Message-Submission-Port 587 zu nutzen statt dem traditionellen SMTP-Port 25, um zu vermeiden, dass Port 25 vom Netzwerk-Provider geblockt wird, während Sie sich über CRAM-MD5 authentifizieren.)

Das Secure-Shell-(SSH-)Programm bietet sichere verschlüsselte Kommunikation zwischen zwei nicht vertrauenswürdigen Rechnern über ein unsicheres Netzwerk mittels sicherer Authentifizierung. Es besteht aus dem OpenSSH-Client (ssh(1)) und dem OpenSSH-Daemon (sshd(8)). Dieses SSH kann genutzt werden, um mittels der Port-Forwarding-Funktionalität (Port-Weiterleitung) eine unsichere Protokoll-Kommunikation wie POP oder X gesichert durch das Internet zu tunneln.

Der Client versucht, sich selbst über eine Host-basierte Authentifizierung gegenüber dem Server zu identifizieren; dazu können verschiedene Verfahren angewandt werden: Public Key Authentication (über einen öffentlichen Schlüssel), Challenge-Response Authentication (es wird eine Aufgabe gestellt, für die die andere Seite die Lösung liefern muss) oder Passwort-Authentifizierung. Die Nutzung der Public Key Authentication ermöglicht eine Anmeldung aus der Ferne ohne Passwort. Lesen Sie dazu Abschnitt 6.9, „The remote access server and utility (SSH)“.

Um zu verhindern, dass Leute auf Ihre Maschine mit root-Privilegien zugreifen, müssen Sie folgende Aktionen durchführen:

  • Physikalischen Zugriff auf die Festplatte unterbinden

  • Das BIOS abriegeln und verhindern, dass von Wechseldatenträgern gebootet wird

  • Ein Passwort für interaktive Sitzungen von GRUB vergeben

  • Das Editieren des GRUB-Menüs verhindern

Mit physikalischem Zugriff auf die Festplatte ist das Zurücksetzen des Passworts relativ leicht; dies erfordert folgende Schritte:

  1. Bauen Sie die Festplatte in einen PC ein, der von CD gebootet werden kann.

  2. Booten Sie das System mit einer Rettungs-CD (Debian Boot-Disk, Knoppix-CD, GRUB-CD, …).

  3. Binden Sie die root-Partition mit Lese-/Schreibberechtigung ein.

  4. Editieren Sie "/etc/passwd" auf der root-Partition und verändern Sie den zweiten Eintrag für das root-Konto, so dass dieser leer ist.

Wenn Sie beim Booten Schreibzugriff auf den GRUB-Menüeintrag für grub-rescue-pc haben (lesen Sie dazu Abschnitt 3.1.2, „Stufe 2: der Bootloader“), ist es mit folgenden Schritten sogar noch einfacher:

  1. Booten Sie das System, nachdem Sie die Kernel-Parameter etwa wie folgt geändert haben: "root=/dev/hda6 rw init=/bin/sh".

  2. Editieren Sie "/etc/passwd" und verändern Sie den zweiten Eintrag für das root-Konto, so dass dieser leer ist.

  3. Starten Sie das System neu.

Die root-Shell des Systems ist jetzt ohne Passwort zugänglich.

[Anmerkung] Anmerkung

Sobald jemand Zugriff auf die root-Shell hat, kann er auf alles auf dem System zugreifen und jegliche Passwörter auf dem System zurücksetzen. Mehr noch, er könnte die Passwörter für alle Benutzerkonten kompromittieren, indem Brute-Force-Werkzeuge zum Knacken von Passwörtern wie john oder crack eingesetzt werden (Näheres in Abschnitt 9.4.11, „System security and integrity check“). Diese geknackten Passwörter könnten dann dazu verwendet werden, um andere Systeme zu kompromittieren.

Die einzige vernünftige Software-Lösung, um all diese Bedenken auszuräumen, ist die Verwendung einer Software-verschlüsselten root-Partition (oder "/etc"-Partition) mittels dm-crypt und initramfs (lesen Sie dazu Abschnitt 9.8, „Data encryption tips“). Sie benötigen dann allerdings immer ein Passwort, um das System zu booten.