Benutzerauthentifizierung mit PAM

Programme, die Benutzern Zugriffsrechte jeglicher Art einräumen, müssen die Benutzer authentifizieren können. Wenn Sie sich bei einem System anmelden, geben Sie Ihren Namen und Ihr Passwort an. Der Anmeldeprozess verwendet diese nun, um die Anmeldung zu authentifizieren — d.h., um zu überprüfen, ob Sie auch tatsächlich derjenige sind, für den Sie sich ausgeben. Neben der Verwendung von Passwörtern gibt es auch andere Formen der Authentifizierung. Für die Speicherung von Passwörtern gibt es verschiedene Varianten.

PAM steht für Pluggable Authentication Modules (einfügbare Authentifizierungsmodule). Damit kann der Systemadministrator die Authentifizierungsregelungen festlegen, ohne dass die Authentifizierungsprogramme neu kompiliert werden müssen. Bei PAM bearbeiten Sie eine Konfigurationsdatei und bestimmen so, wie die Module in die Programme eingefügt werden.

Die wenigsten Benutzer von Red Hat Linux werden diese Konfigurationsdatei jemals verändern müssen. Wenn Sie mit RPM Programme installieren, die eine Authentifizierung vornehmen müssen, so nehmen diese die für die normale Passwortauthentifizierung notwendigen Änderungen automatisch vor. Wenn Sie jedoch eine benutzerdefinierte Konfiguration vornehmen möchten, müssen Sie den Inhalt der Konfigurationsdatei verstehen.

PAM-Module

Der PAM-Standard definiert vier verschiedene Modultypen.

Diese Module können gestapelt werden, so dass mehrere Module verwendet werden können. Zum Beispiel verwendet rlogin in der Regel mindestens zwei Authentifizierungsmethoden: Wenn die rhosts-Authentifizierung erfolgreich ist, kann die Verbindung sofort zugelassen werden. Wenn die Authentifizierung nicht erfolgreich ist, wird zur Standardauthentifizierung mit Passwort übergegangen.

Es können jederzeit neue Module hinzugefügt werden. PAM-kompatible Anwendungen können dann so angepasst werden, dass auf diese Module zugegriffen werden kann. Falls Sie z.B. über ein Rechensystem für Einmal-Passwörter verfügen und festlegen können, dass es von einem bestimmten Modul unterstützt werden soll (weitere Informationen zum Schreiben von Modulen finden Sie im System unter /usr/share/doc/pam*), sind PAM-kompatible Programme in der Lage, das neue Modul zu verwenden und mit dem neuen Rechensystem für Einmal-Passwörter zu arbeiten, ohne dass es neu kompiliert oder anderweitig modifiziert werden müsste.

Dienste

Jedes Programm, das PAM verwendet, definiert seinen eigenen "Dienste"-Namen. Das Programm login definiert den Dienstetyp login, ftpd definiert den Dienstetyp ftp usw. Generell ist der Dienstetyp der Name des Programms, das zum Zugriff auf den Dienst verwendet wird, und nicht das Programm, das den Dienst bereitstellt (falls es diese Unterscheidung gibt).

Die Konfigurationsdateien

Alle PAM-Anwendungen werden im Verzeichnis /etc/pam.d konfiguriert. (In früheren PAM-Versionen wurde dafür die Datei /etc/pam.conf verwendet. Wenn das Programm keinen Eintrag in /etc/pam.d/ findet, wird die Datei pam.conf eingelesen. Sie sollte aber nicht mehr verwendet werden.) Jede Anwendung (genau genommen jeder Dienst) hat eine eigene Datei, die wie folgt aussieht:

#%PAM-1.0
auth      required  /lib/security/pam_securetty.so
auth      required  /lib/security/pam_unix.so shadow nullok
auth      required  /lib/security/pam_nologin.so
account   required  /lib/security/pam_unix.so
password  required  /lib/security/pam_cracklib.so
password  required  /lib/security/pam_unix.so shadow nullok use_authtok
session   required  /lib/security/pam_unix.so
        

Die erste Zeile ist ein Kommentar. (Kommentarzeilen beginnen immer mit dem Zeichen #.) Die Zeilen zwei bis vier stapeln drei Module für die Anmeldeautorisierung. Wenn der Benutzer sich als Root anzumelden versucht, stellt Zeile zwei sicher, dass das Terminal, an dem er sich anmeldet, in der Datei /etc/securetty aufgeführt ist, falls solch eine Datei existiert. Zeile drei sorgt dafür, dass der Benutzer nach dem Passwort gefragt wird und dass dieses überprüft wird. Zeile vier prüft, ob die Datei /etc/nologin existiert. Falls ja, wird der Inhalt der Datei auf dem Bildschirm angezeigt und eine Anmeldung des Benutzers verhindert, es sei denn, er ist Root.

Beachten Sie, dass alle drei Module überprüft werden, auch wenn schon beim ersten Modul Fehler auftreten. Hierbei handelt es sich um eine Sicherheitsfunktion — sie wurde entwickelt, um zu verhindern, dass Benutzer erfahren, weshalb ihre Authentifizierung nicht zugelassen wurde. Der Grund dafür ist: Wenn ein Benutzer weiß, weshalb seine Authentifizierung abgelehnt wurde, ist es für ihn einfacher, die Authentifizierung zu knacken. Sie können diese Einstellung ändern, indem Sie statt required requisite eintragen. Wenn ein requisite-Modul eine Fehlermeldung liefert, bricht PAM sofort ab, ohne weitere Module aufzurufen.

Die fünfte Zeile veranlasst die Prüfung des Benutzeraccounts. Wenn z.B. Shadow-Passwörter aktiviert worden sind, überprüft das Modul pam_unix.so, ob der Account abgelaufen ist oder ob der Benutzer keine Passwortänderung vorgenommen hat und die Nachfrist für eine Änderung abgelaufen ist.

Die sechste Zeile unterzieht das gerade geänderte Passwort einer Reihe von Prüfungen, um sicherzustellen, dass es z.B. nicht auf einfache Weise durch ein wörterbuchbasiertes Tool zum Knacken von Passwörtern herausgefunden werden kann.

Die siebte Zeile (evtl. umgebrochen) gibt an, dass das Programm login bei einer Änderung des Passworts hierfür das Modul pam_unix.so verwenden soll. (Zu einer Änderung des Passwortes kommt es nur dann, wenn ein auth-Modul festgelegt hat, dass das Passwort geändert werden muss — wenn z.B. ein Shadow-Passwort abgelaufen ist.)

Die achte und letzte Zeile gibt an, dass das Modul pam_unix.so für die Verwaltung der Sitzung verwendet werden soll. Gegenwärtig hat dieses Modul keine Funktion. Es kann durch ein beliebiges notwendiges Modul ersetzt (oder durch Stapeln ergänzt) werden.

Beachten Sie, dass die Reihenfolge der Zeilen in diesen Dateien wichtig ist. Während die Reihenfolge beim Aufrufen von required-Modulen keine große Rolle spielt, ist dies bei den anderen verfügbaren Steuer-Flags sehr wohl der Fall. Das Flag optional wird nur selten verwendet (bei Red Hat Linux Systemen niemals standardmäßig). Bei sufficient und requisite ist die Reihenfolge wichtig.

Hier ein Blick auf die auth-Konfigurationsdatei für rlogin:

auth       sufficient   /lib/security/pam_rhosts_auth.so
auth       required     /lib/security/pam_securetty.so
auth       required     /lib/security/pam_stack.so service=system-auth
auth       required     /lib/security/pam_nologin.so
        

Erstens meldet PAM (sobald pam_rhosts_auth.so den Benutzer authentifiziert) unverzüglich die erfolgreiche Ausführung an rlogin, ohne das Passwort zu überprüfen. Eine gescheiterte Authentifizierung des Benutzers durch pam_rhosts_auth.so wird ignoriert.

Zweitens verhindert pam_securetty.so, dass Root-Anmeldungen auf unsicheren Terminals vorgenommen werden können. Damit werden praktisch alle Root-Anmeldungen über rlogin verhindert. Entfernen Sie diese Zeile, falls Sie entsprechende Anmeldungen zulassen möchten (nur empfehlenswert, wenn entweder keine Verbindung zum Internet besteht oder eine gute Firewall vorhanden ist).

Drittens (falls pam_rhosts_auth.so den Benutzer nicht authentifizieren konnte) führt das Modul pam_stack.so eine normale Passwortauthentifizierung durch.

Schließlich prüft pam_nologin.so /etc/nologin wie oben beschrieben.

Beachten Sie: Wenn nach einem negativen Ausgang der securetty-Überprüfung nicht nach dem Passwort gefragt werden soll, ändern Sie das Modul pam_securetty.so von required in requisite.

Shadow-Passwörter

Das Modul pam_unix.so erkennt automatisch, dass Sie Shadow-Passwörter verwenden und nimmt alle notwendigen Anpassungen vor. Weitere Informationen finden Sie in Abschnitt namens Shadow-Dienstprogramme.

Rexec und PAM

Aus Sicherheitsgründen ist in Red Hat Linux 7.0 rexec nicht aktiviert. Wenn Sie rexec aktivieren möchten, müssen Sie die Kommentarzeichen am Beginn einer Zeile in der Datei /etc/pam.d/rexec entfernen. Hier eine Beispieldatei (beachten Sie, dass Ihre Datei etwas anders aussehen kann):

#%PAM-1.0
auth       required     /lib/security/pam_securetty.so
auth       required     /lib/security/pam_stack.so service=system-auth
auth       required     /lib/security/pam_nologin.so
account    required     /lib/security/pam_stack.so service=system-auth
        

Um rexec zu aktivieren, müssen Sie die Kommentarzeichen in der Zeile entfernen, die auf das Modul pam_nologin.so verweist.

#%PAM-1.0
auth       required     /lib/security/pam_securetty.so
auth       required     /lib/security/pam_stack.so service=system-auth
#auth       required     /lib/security/pam_nologin.so
account    required     /lib/security/pam_stack.so service=system-auth
        

Wenn Sie die Datei wie beschrieben bearbeitet haben, ist rexec aktiviert.

AnmerkungBitte beachten
 

Wenn die Datei /etc/pam.d/rexec eine Zeile enthält, die auf das Modul pam_securetty.so verweist, können Sie rexec als Root nicht ausführen. Wenn das jedoch möglich sein soll, müssen Sie die Kommentarzeichen in der Zeile entfernen, die auf das Modul pam_securetty.so verweist.

AnmerkungBitte beachten
 

Die meisten Konfigurationsdateien wurden neu geschrieben, um das Vornehmen von systemweiten Änderungen zu vereinfachen. Auf diese Weise müssen erforderliche Konfigurationsänderungen nur noch an einer Stelle im System vorgenommen werden. Zu dieser Änderung kommt es, weil die Datei pam_stack es ermöglicht, einen bestimmten Dienst aus dem Stapel heraus aufzurufen, während der Stapel für einen anderen Dienst definiert ist. Weitere Informationen finden Sie in der man-Seite pam_stack.

Weitere Informationen

Bei diesem Abschnitt handelt es sich lediglich um eine Einführung in PAM. Weiterführende Informationen finden Sie im Verzeichnis /usr/share/doc/pam*, das den System Administrators' Guide (Leitfaden für den Systemadministrator), das Module Writers' Manual (Handbuch für Modulentwickler), das Application Developers' Manual (Handbuch für den Anwendungsentwickler) und den PAM-Standard DCE-RFC 86.0 enthält.