PAM
PAM oder Pluggable Authentication Modules (anknüpfbare Zugangs Module) ist ein modularer Ansatz für Autorisation. Es ermöglicht (Drittanbieter-) Diensten, ein Authentifizierungsmodul für ihren Dienst bereitzustellen, das dann auf PAM-fähigen Systemen verwendet werden kann. Dienste, die PAM zur Authentifizierung verwenden, können diese Module sofort verwenden, ohne dass eine Neuerstellung erforderlich ist.
Einleitung
Die Authentifizierungsverwaltung (Teil der Zugriffsverwaltung) auf einem Linux-Server kann über PAM (Pluggable Authentication Modules) abgewickelt werden. Mit PAM müssen Dienste keine Authentifizierungsdienste selbst bereitstellen. Sie verlassen sich stattdessen auf die im System verfügbaren PAM-Module. Jeder Dienst kann eine andere PAM-Konfiguration verwenden, wenn er möchte, obwohl die Authentifizierung meistens von Diensten ähnlich gehandhabt wird. Durch den Aufruf von PAM-Modulen können Dienste die Zwei-Faktor-Authentifizierung sofort unterstützen, sofortige zentralisierte Authentifizierungs-Repositorys verwenden und vieles mehr.
PAM bietet eine flexible, modulare Architektur für die folgenden Dienste:
- Authentifizierungsverwaltung - Überprüfung ob ein Benutzer, der versucht, ein Benutzerkonto zu authentifizieren, tatsächlich der Benutzer ist.
- Kontenverwaltung - Überprüfung ob das Kennwort des Benutzers abgelaufen ist oder ob der Benutzer auf diesen Dienst zugreifen darf.
- Sitzungsverwaltung - Ausführen bestimmter Aufgaben beim Anmelden oder Abmelden eines Benutzers (Überwachung, Einhängen von Dateisystemen usw.).
- Passwortverwaltung - Eine Schnittstelle für das Zurücksetzen von Passwörtern und dergleichen.
PAM bietet keine Dienstleistungen für Berechtigungen an. In der Regel erfolgen Berechtigungen innerhalb einer Anwendung. Einige Anwendungen unterstützen gruppenbasierte Berechtigungen (wenn Sie Mitglied einer Gruppe sind, können Sie die entsprechenden Berechtigungen erhalten). Ein verbreiteter (aber nicht so häufiger als PAM) Ansatz ist die Unterstützung von NSS (Name Service Switch). NSS ähnelt PAM in seinen Gestaltungsprinzipien. Tatsächlich werden Berechtigungen auf Linux-Systemen über die NSS-Bibliotheken abgewickelt.
Prinzipien hinter PAM
Bei der Arbeit mit PAM entdecken die Systemadministratoren schnell die Prinzipien, nach denen PAM arbeitet.
Die erste ist "Backend-Unabhängigkeit". Anwendungen, die PAM-fähig sind, müssen keine Logik für den Umgang mit Back-Ends enthalten, wie Datenbanken, LDAP-Dienste, Kennwortdateien, WS-Security-fähige Web-Services oder andere noch nicht erfundene Back-Ends. Durch die Verwendung von PAM trennen Anwendungen die Back-End-Integrationslogik von ihrer eigenen. Sie müssen lediglich PAM-Funktionen aufrufen.
Ein anderes Prinzip ist "Konfigurationsunabhängigkeit". Administratoren müssen nicht lernen, wie sie Dutzende verschiedener Anwendungen für die Interaktion mit einem LDAP-Server für die Authentifizierung konfigurieren. Stattdessen verwenden sie dieselbe Konfigurationsstruktur, die von PAM bereitgestellt wird.
Das abschließende Prinzip, das Teil des PAM-Namens ist, ist seine steckbare Architektur. Wenn neue Backends integriert werden müssen, muss der Administrator nur die Bibliothek für dieses Backend installieren (indem er im rechten Verzeichnis des Systems abgelegt wird) und dieses Modul konfigurieren (die meisten Module verwenden eine einzelne Konfigurationsdatei). Ab diesem Zeitpunkt ist das Modul für Anwendungen einsetzbar. Administratoren können die Authentifizierung für die Verwendung dieses Back-End konfigurieren und müssen die Anwendung normalerweise nur neu starten.
Wie PAM funktioniert
Anwendungen, die PAM mit der PAM-Bibliothek (libpam) verwenden möchten, rufen die erforderlichen Funktionen auf, die die oben genannten Dienste widerspiegeln. Ansonsten muss die Anwendung keine spezifischen Funktionen für diese Dienste implementieren, da dies alles von PAM gehandhabt wird. Wenn sich ein Benutzer beispielsweise gegenüber einer Webanwendung authentifizieren möchte, ruft diese Webanwendung PAM auf (Weitergabe der Benutzer-ID und möglicherweise eines Kennworts oder einer Anforderung) und überprüft die PAM-Rückgabe, um festzustellen, ob der Benutzer authentifiziert ist und Zugriff auf die Anwendung hat. Es ist PAMs Aufgabe, grundsätzlich herauszufinden, wogegen sie die Authentifizierung durchführen soll (z. B. eine zentrale Datenbank oder ein LDAP-Server).
Die Stärke von PAM besteht darin, dass jeder PAM-Module für die Integration in jeden PAM-fähigen Dienst oder jede Anwendung erstellen kann. Wenn ein Unternehmen einen neuen Dienst für die Authentifizierung freigibt, muss es lediglich ein PAM-Modul bereitstellen, das mit seinem Dienst interagiert. Anschließend kann jede Software, die PAM verwendet, sofort mit diesem Dienst arbeiten. Es ist nicht erforderlich, diese Softwaretitel neu zu erstellen oder zu verbessern.
Konfiguration
Ein weiterer wichtiger Aspekt von PAM ist, dass es die Verkettung mehrerer Module unterstützt. Schauen wir uns eine PAM-Konfigurationsdatei für einen unbenannten Dienst an:
# Authentication
auth required pam_env.so
auth required pam_ldap.so
# Account management
account required pam_ldap.so
# Password management
password required pam_ldap.so
# Session management
session optional pam_loginuid.so
session required pam_selinux.so close
session required pam_env.so
session required pam_log.so level=audit
session required pam_selinux.so open multiple
session optional pam_mail.so
Wir sehen, dass die Konfigurationsdatei in den vier von PAM unterstützten Servicedomänen strukturiert ist: Authentifizierung, Kontenverwaltung, Kennwortverwaltung, und Sitzungsverwaltung.
Jeder der Abschnitte in der Konfigurationsdatei ruft ein oder mehrere PAM-Module auf. Beispielsweise setzt pam_env.so die Umgebungsvariable, die von nachfolgenden Modulen verwendet werden kann. Der vom PAM-Modul bereitgestellte Rückkehrcode zusammen mit der Steueranweisung (im obigen Beispiel erforderlich oder optional) ermöglicht PAM die Entscheidung, wie weiter verfahren werden soll.
Steueranweisungen
PAM unterstützt die folgenden Steueranweisungen.
Control | Description |
---|---|
required
|
Das bereitgestellte PAM-Modul muss erfolgreich sein, damit der gesamte Dienst (z. B. Authentifizierung) erfolgreich ist. Wenn ein PAM-Modul ausfällt, werden noch andere PAM-Module aufgerufen (obwohl bereits sicher ist, dass der Dienst selbst abgelehnt wird). |
requisite
|
Das bereitgestellte PAM-Modul muss erfolgreich sein, damit der gesamte Dienst erfolgreich ist. Im Gegensatz zu required wird die Kontrolle sofort zurückgegeben, wenn das PAM-Modul ausfällt, und der Dienst selbst wird abgelehnt. |
sufficient
|
Wenn das bereitgestellte PAM-Modul erfolgreich ist, wird der gesamte Dienst gewährt. Der Rest der PAM-Module wird nicht geprüft. Wenn jedoch das PAM-Modul ausfällt, wird der Rest der PAM-Module behandelt, und der Ausfall dieses bestimmten PAM-Moduls wird ignoriert. |
optional
|
Der Erfolg oder Misserfolg dieses bestimmten PAM-Moduls ist nur wichtig, wenn es das einzige Modul im Stack ist. |
include
|
Schließt den Inhalt der Konfigurationsdatei eines anderen PAM-Moduls ein, das dem angegebenen Typ entspricht |
| required
| The provided PAM module must succeed in order for the entire service (such as authentication) to succeed. If a PAM module fails, other PAM modules are still called upon (even though it is already certain that the service itself will be denied).
|-
| requisite
| The provided PAM module must succeed in order for the entire service to succeed. Unlike required, if the PAM module fails, control is immediately handed back and the service itself is denied.
|-
| sufficient
| If the provided PAM module succeeds, then the entire service is granted. The remainder of the PAM modules is not checked. If however the PAM module fails, then the remainder of the PAM modules is handled and the failure of this particular PAM module is ignored.
|-
| optional
| The success or failure of this particular PAM module is only important if it is the only module in the stack.
|-
| include
| Includes the contents of another PAM module's configuration file which matches the given type.
|-
|}
Durch die Verkettung von Modulen können mehrere Authentifizierungen durchgeführt, mehrere Aufgaben beim Erstellen einer Sitzung ausgeführt werden und vieles mehr.
Verwalten der PAM-Konfigurationsdateien
Da die PAM-Konfigurationsdateien die Authentifizierungsschritte in einer Anwendung steuern, ist es äußerst wichtig, die Konfigurationsdateien sicher zu verwalten. Diese werden im Allgemeinen in /etc/pam.d/ gespeichert.
In größeren Unternehmen oder sicherheitsrelevanten Systemen sollte jede Änderung der PAM-Konfigurationsdateien ordnungsgemäß geprüft werden.
Dasselbe gilt für den Ort, an dem die PAM-Module selbst gespeichert werden (/lib/security oder /lib64/security).
PAM und Gentoo
Anwendungen, die PAM bedingt unterstützen, verwenden das USE-Flag pam
. Es ist möglich, Gentoo-Systeme ohne PAM auszuführen (durch Setzen von USE="-pam"
), in der Standardeinstellung ist jedoch die PAM-Unterstützung aktiviert.
Bei der Aktualisierung von entfernten Systemen kann es vorkommen, dass das System unzugänglich bleibt. Um dies nach einem Upgrade zu vermeiden, während Sie noch auf dem Rechner angemeldet sind:
- Überprüfen Sie, ob die Protokollierung funktioniert
- Überprüfen Sie die notwendigen Konfigurationsaktualisierungen in /etc/ssh und /etc/pam.d
- News Items prüfen, ob bahnbrechende Änderungen eingeführt wurden, z.B. PAM-bezogene News Items
- Prüfen, ob das Ändern von Passwörtern einwandfrei funktioniert, z.B. passwd für root/einen beliebigen Benutzer und abbrechen, bevor das Passwort tatsächlich geändert wird
- Neustart des SSH-Servers, falls er aktualisiert wurde
- Prüfen, ob eine neue Anmeldung am entfernten Rechner funktioniert
Was passieren könnte:
- ohne Logging können Fehler bei den Prüfungen nicht analysiert werden
- passwd bricht wegen PAM-Modul-Fehlern ab
- SSH verweigert die Anmeldung wegen PAM-Fehlkonfiguration/Modulfehler, z.B. einfache Verbindung geschlossen
- Passwortrichtlinien geändert, z.B. Verbot von root ohne Passwort
Beispiel für das Parsen der Systemkonfiguration
In diesem Forum Post in 2021 von GDH-gentoo, wird die Konfiguration eines Systems Schritt für Schritt nachverfolgt, um herauszufinden, welcher Dienst das Verzeichnis {{|c/run/user/<uid>}} bei einer Benutzeranmeldung erstellt.
Siehe auch
- PAM (Sicherheitshandbuch) — Although the default PAM settings in Gentoo are reasonable, there is always room for improvement.
- PAM/U2F — provides two-factor authentication through a FIDO U2F USB device, allowing users to authenticate at a press of a button against their system.
- PAM securetty — restricting root authentication with PAM.
- PAM ssh agent module Artikel, in dem erläutert wird, wie ein benutzerdefiniertes PAM-Modul installiert und konfiguriert wird, das sich über die SSH-Public-Key-Infrastruktur authentifiziert
- Google Authenticator — describes an easy way to setup two-factor authentication on Gentoo.
- YubiKey — a hardware security device that can be used to safely store cryptographic keys, OTP tokens, and challenge response seeds
- Cracklib für den veralteten Vorgänger von sys-libs/passwdqc
Externe Ressourcen
- Working with PAM, ein Abschnitt im Gentoo Entwicklerhandbuch