PAM

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page PAM and the translation is 79% complete.
Outdated translations are marked like this.

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.
Hinweis
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:

DATEI /etc/pam.d/someserviceBeispiel-PAM-Konfigurationsdatei für einen Dienst namens "someservice"
# 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:

  1. Überprüfen Sie, ob die Protokollierung funktioniert
  2. Überprüfen Sie die notwendigen Konfigurationsaktualisierungen in /etc/ssh und /etc/pam.d
  3. News Items prüfen, ob bahnbrechende Änderungen eingeführt wurden, z.B. PAM-bezogene News Items
  4. 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
  5. Neustart des SSH-Servers, falls er aktualisiert wurde
  6. 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