PAM ################ 1. Was ist PAM? PAM steht für Pluggable Authentification Module. Es ist ein Framework, das die Authentifikation von Benutzern am System übernimmt. Es bildet eine zentrale Schnittstelle für alle Authentifikationsmechanismen. Wozu dient diese zentrale Schnittstelle? Nun, die Authentifizierung eines Benutzers erfolgt normalerweise mit Hilfe eines Benutzernamens und eines Passwortes. Dabei muß jede Anwendung die Anmelderoutinen selber stellen, d.h. jedes Programm muß gegebenenfalls auf die Datei /etc/passwd zugreifen und den Benutzer identifizieren. Daß dieses Verfahren sehr fehlerträchtig ist, muß nicht extra erwähnt werden. Ein weiterer Nachteil ergibt sich, wenn man den Authentifizierungsmechanismus ändern will. Die Anwendungen müßten angepaßt, bzw. neu kompiliert werden. Das PAM-Framework bietet als zentrale Schnittstelle eine einfach zu administrierende Alternative. Es besteht aus einem Set von Shared Libaries. Die Libaries bilden Module, die, abhängig vom Sicherheitsbedürfnis, der Umgebung, usw. hintereinander geschaltet werden können. Dabei ist es generell möglich (und eine der Stärken vom PAM), die Mechanismen für jede einzelne Anwendung separat zu spezifizieren. 2. Die Nutzung von PAM Die im folgenden gegebenen Beispiele sind Linux-spezifisch. Wenn Sie ein anderes System verwenden, werfen Sie bitte einen Blick auf die mitgelieferte Dokumentation. 2.1 die Konfiguration Die Konfiguration erfolgt im wesentlichen über das Verzeichnis /etc/pam.d . Bei älteren PAM-Versionen liegt die Konfiguration in der zentralen Datei /etc/pam.conf. In dem Verzeichnis /etc/pam.d besitzt jede PAM-fähige Applikation eine eigene Konfigurationsdatei, die im allgemeinen den gleichen Namen wie die Anwendung trägt. Der Aufbau der Datei folgt dem Muster: Modultyp Control-Flag Modulpfad Argumente Dabei können für einen einzelnen Dienst typischerweise mehrere Module angegeben werden. Diese werden einfach in separate Zeilen untereinander geschrieben. Die Abarbeitung erfolgt dann sequentiell von oben nach unten. Das Verfahren wird auch als "Module-Stacking" bezeichnet. Beispiele für die Konfiguration folgen weiter unten. Im folgenden wird zunächst einzelnd auf die Komponenten der Konfiguration eingegangen. 2.1.1 Modultyp PAM definiert vier verschiedene Moduletypen: auth: realisiert die eigentliche Authorisierung, d.h. es wird z.B. nach Passwörtern gefragt. Außerdem werden Berechtigungen wie die Gruppenzugehörigkeit gesetzt. account: das Modul stellt sicher, daß der Account des Users gültig ist. password: dieses Modul wird verwand, um neue Passwörter zu setzen. session: das Modul ermöglicht unter anderem das Logging. 2.1.2 Control-Flag Es gibt vier verschiedene Control-Flags, die die Umstände näher beschreiben, in denen das Modul arbeitet. required: ein so gekennzeichnetes Modul muß durchlaufen werden. Wurde es nicht erfolgreich bearbeitet, werden die anderen Module trotzdem durchlaufen. requisite: tritt bei einem entsprechenden Modul ein Fehler auf, wird die weitere Bearbeitung abgebrochen. Eine Fehlermeldung wird generiert. sufficient: wird ein sufficient-Modul erfolgreich bearbeitet, werden nachfolgende Module ignoriert. optional: das Modul muß nicht zwingend erfolgreich durchlaufen werden. Ist es jedoch das Einzige, wird im Fehlerfall eine Fehlermeldung an die Anwendung zurückgeliefert. 2.1.3 Modulpfad In dem Feld Modulpfad muß PAM der genaue Standort der Bibliothek mitgeteilt werden. Die Shared-Libaries liegen normalerweise im Verzeichnis /lib/security . 2.1.4 Argumente Argumente geben dem Administrator die Möglichkeit, zusätzliche Parameter an die Module zu geben. Eine Auswahl der häufigsten sind: debug: gibt zusätzliche Informationen aus use_first_pass: das Passwort des vorigen Modules wird verwand no_warn: es werden keine Warnmeldungen generiert. 2.2 Beispiele und die Module In diesem Abschnitt gibt es einige Beispiele, an denen die verwendeten Module und deren Argumente erläutert werden. 2.2.1 /etc/pam.d/login Die login-Konfigurationsdatei spiegelt die Einstellungen zu dem login-Kommando wider, mit dem sich die Benutzer am System anmelden. [root@linuxbox]# cat /etc/pam.d/login (0) #%PAM-1.0 (1) auth required /lib/security/pam_securetty.so (2) auth required /lib/security/pam_pwdb.so (3) auth required /lib/security/pam_nologin.so (4) account required /lib/security/pam_pwdb.so (5) password required /lib/security/pam_cracklib.so (6) password required /lib/security/pam_pwdb.so use_authtok \ md5 shadow (7) session required /lib/security/pam_pwdb.so (8) session required /lib/security/pam_console.so (9) session required /lib/security/pam_limits.so Die Zeilennummerierung ist hier nur der Übersichtlichkeit wegen eingeführt. Sie steht natürlich nicht in der Datei. Die Bedeutung der Zeilen im Einzelnen: Zeile 1: das pam_securetty-Modul prüft, ob sich root auf dieser Konsole einloggen darf. Vorraussetzung dafür ist, daß die Datei /etc/securetty existiert. Diese Datei gibt an, auf welchen Konsolen root sich einloggen darf. Steht die tty nicht in der Datei, darf er sich nicht einwählen. Zeile 2: das pam_pwdb-Modul taucht in dem Beispiel sehr häufig auf. Das Module hat viele verschiedene Aufgaben. In Verbindung mit dem Modultyp auth sorgt es dafür, daß der Benutzer nach seinem Kennwort gefragt wird. Zeile 3: pam_nologin überprüft, ob die Datei /etc/nologin existiert. Tut sie das, daß sich kein Benutzer in das System einloggen. Der Zugang wird nur dem Superuser gewährt. Zeile 4: hier tritt das pam_pwdb-Modul in dem Modultyp account auf. Das bewirkt, daß die Gültigkeit des Benutzerkontos überprüft wird. Zeile 5: das pam_cracklib-Modul testet das eingegebene Passwort auf seine Stärke. Dazu wird der Passwort-Checker cracklib benutzt. Interessant ist die Funktion vor allem mit der folgenden Zeile. Zeile 6: pam_pwdb mit dem Modultyp password ermöglicht dem Benutzer, ein neues Passwort anzugeben. Etwa wenn das Alte ungültig geworden ist, weil die Lebensdauer abgelaufen ist. In diesem Fall werden nur Kennwörter aktzeptiert, die den cracklib-Test bestanden haben. Die cracklib-Bibliothek testet ein neues Paßwort auf eine Wortliste. Findet sich das Wort in der Liste, wird es abgelehnt. Die Optionen besagen hier: use_authtok: das Passwort des zuvor aufgerufenen Modules wird verwand md5: bei der Verschlüsselung kommt der MD5-Algorithmus zur Anwendung shadow: das password-shadowing wird benutzt Zeile 7: auch hier kommt wieder das pam_pwdb-Modul zum Einsatz. Als Modultyp session sorgt es für einen Eintrag in den Logfiles. Zeile 8: pam_console ermöglicht root den Benutzern direkt eim Einloggen auf der Konsole Nachrichten zukommen zu lassen. Zeile 9: das pam_limits-Modul setzt die in der Datei /etc/security/limits.conf gesetzten Limits durch. Damit können einzelnen Users gezielt bestimmt Systemressourcen zugewiesen werden, bzw. diese können eingeschränkt werden. 3. Fazit Das PAM-Framework ist ein leistungsfähiges und vielseitiges Instrument, mit dem sich die Sicherheit eines Linuxsystems deutlich verbessern läßt. Ein deutlicher Pluspunkt sind außerdem die Erweiterbarkeit und die zentrale Konfiguration. Mit der Vielzahl der verfügbaren Module ist es möglich, die Einstellungen des Systems genaustens auf die eigenen Wünsche einzustellen. Ein Blick lohnt sich daher auf jeden Fall auch auf die folgenden weiterführenden Seiten: 3.1 Links und weitere Dokumentationen Hauptanlaufstelle sollte die Seite http://www.kernel.org/pub/linux/libs/pam sein. Hier finden sich zahlreiche Dokumentationen.