ubuntuusers.de

PAM

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

PAM steht generell für Pluggable Authentication Modules und in diesem Artikel geht es um deren Implementation für Linux (Linux-PAM). PAM wurde spezifiziert mit der Spezifikation P702 von "The Open Group" nach Vorarbeit von SunSoft mit Dokumentation als OSF-RFC 86.0.

Linux-PAM (im folgenden kurz: PAM) ist eine Kollektion von gemeinsam genutzten Modulen mit deren Hilfe der Systemverwalter die Identifizierung und Authentifizierung von Benutzern bei der Anmeldung an das System konfigurieren kann. Dabei können sowohl unterschiedliche Methoden (wie Passwort, Token, biometrische Merkmale) berücksichtigt werden als auch für unterschiedliche Anmeldewege (per Login, FTP, SSH, SMB etc.) unterschiedliche Möglichkeiten vorgesehen werden. Außerdem können bei der Eröffnung einer Benutzersitzung spezielle Aktionen erfolgen.

Installation

Bei allen Ubuntu-Systemen werden die grundlegenden Pakete für PAM bereits bei der Installation des Systems mit installiert[1]:

  • libpam-runtime (Laufzeitunterstützung für die PAM-Bibliothek, main)

  • libpam-systemd (System- und Diensteverwaltung - PAM-Modul, main)

  • libpam-cap (POSIX 1003.1e capabilities (PAM module), main)

  • libpam-modules (Pluggable Authentication Modules für PAM, main)

  • libpam-modules-bin (Pluggable Authentication Modules für PAM - Hilfsprogramme, main)

Befehl zum Installieren der Pakete:

sudo apt-get install libpam-runtime libpam-systemd libpam-cap libpam-modules libpam-modules-bin 

Oder mit apturl installieren, Link: apt://libpam-runtime,libpam-systemd,libpam-cap,libpam-modules,libpam-modules-bin

Bei Desktops mit Gnome oder darauf basierenden Oberflächen wird auch standardmäßig installiert:

  • libpam-gnome-keyring (PAM-Modul zum Entsperren des GNOME-Schlüsselbundes bei der Anmeldung, main)

Befehl zum Installieren der Pakete:

sudo apt-get install libpam-gnome-keyring 

Oder mit apturl installieren, Link: apt://libpam-gnome-keyring

Wer in das fertig installierte System eingreifen will, beispielsweise durch Berücksichtigung weiterer Authentifizierungsmethoden per Biometrie, Bluetooth, Hardware- oder Software-Tokens etc. oder weil bei der Eröffnung der Benutzersitzung spezifische Aktionen erfolgen solle (z.B. Einbindung weiterer Dateisysteme), benötigt fundierte Kenntnisse über das System. Diesem Personenkreis wird die Installation[1] des Dokumentationspakets empfohlen:

  • libpam-doc (PAM-Dokumentation, main)

Befehl zum Installieren der Pakete:

sudo apt-get install libpam-doc 

Oder mit apturl installieren, Link: apt://libpam-doc

Siehe Dokumentation

In den offiziellen Paketquellen finden sich etliche weitere Pakete mit Modulen für spezielle Zwecke unter den Namen libpam-SCHIESS-MICH-TOT, welche nicht alle hier besprochen werden können.

Funktionsweise

Jedes Mal, wenn sich auf einem Linux-System ein Benutzer lokal oder über das Netzwerk anmeldet, kann die angesprochene Applikation (login, GDM, SDDM, LightDM, SSH, FTP, Samba usw.) die Abwicklung an PAM delegieren. Bei Ubuntu und vielen anderen Distributionen erfolgt das auch tatsächlich so. Die Vorteile dieser Vorgehensweise sind:

  • Die jeweilige Applikation muss den Anmeldevorgang nicht selber implementieren, sondern nur standardisierte Funktionen einer Systembibliothek von PAM aufrufen.

  • Die Systembibliothek von PAM kann unabhängig von der Applikation entwickelt, getestet, geprüft werden – damit ist grundsätzlich ein höherer Qualität- und Sicherheitsstandard möglich als wenn jede Applikation das Rad neu erfinden müsste.

  • Die Einzelheiten des Anmeldeprozesses, beispielsweise zulässige Authentifizierungsmethoden können unabhängig von der Applikation spezifisch für das jeweilige System vom Systemverwalter konfiguriert werden. Dazu bedarf es keines Eingriffs in die jeweilige Applikation, sondern nur textuelle Änderungen in Konfigurationsdateien für PAM.

PAM kennt vier Themen:

  • Authentifizierung: Ist der sich anmeldende Benutzer (mutmaßlich) tatsächlich derjenige, der er behauptet zu sein? Zur Beantwortung diese Frage können verschiedene Authentifizierungsmethoden einzeln oder in Kombination benutzt werden: Passworte (statisches klassisches UNIX-Passwort, Einmal-Passwort, spezielle Protokolle (wie Radius, Kerberos, LDAP, SMB, SMTP, IMAP u.a.), Vorzeigen von Hardware-Schlüsseln (per USB, Bluetooth etc.), biometrische Eigenschaften (z.B. Fingerabdruck) und mehr. Selbstverständlich muss die zur Nutzung dieser Möglichkeiten erforderliche Hardware unabhängig von PAM bereits funktionieren.

  • Benutzerkonto (Account): Darf der Benutzer sich anmelden? Das Benutzerkonto kann zeitweise oder dauerhaft gesperrt sein oder wegen gerade laufender Wartungsarbeiten darf sich momentan niemand anmelden.

  • Session: Sofern der Benutzer identifiziert, erfolgreich authentifiziert und keine Restriktionen des Benutzerkontos einer Anmeldung entgegenstehen, wird dem Benutzer Zugang zum System gewährt und es werden von PAM die für den Aufbau einer Session konfigurierten Aktionen durchgeführt. Dazu können u.a. gehören:

    • Bereitstellung weiterer, für den Benutzer spezifischen Dateisysteme, beispielsweise das eigene, vielleicht verschlüsselte Homeverzeichnis

    • Bereitstellung und Konfiguration einer Programmumgebung, z.B. von Umgebungsvariablen und Wert für umask

    • Start einer Sitzung im Systemd-Login-Manager

    • Öffnen eines Schlüsselbunds mit Anmeldedaten für andere Stellen

    • Start einer Shell

    • Benachrichtigung der aufrufenden Applikation über die erfolgreiche Anmeldung, diese kann weitere Aktionen zur Ausgestaltung der Session ergreifen, beispielsweise einen grafischen Desktop starten.

  • Passwortpflege: Dies gehört eigentlich zu Session, wird aber von PAM traditionell wegen seiner Wichtigkeit als eigenständiges Thema behandelt. Hier werden Methoden gesammelt, mit denen ein authentifizierter Benutzer sein Passwort ändern kann oder zwangsweise nach Ablauf der Gültigkeit ändern muss oder vielleicht auch verschiedene Passworte synchronisieren kann. Dabei können Vorgaben zur Passwortlänge und -komplexität überprüft und durchgesetzt werden.

Dies alles kann für jede Applikation über Textdateien konfiguriert werden. Dafür gibt es zwei Varianten:

  1. Die ältere Methode verwendet ausschließlich die Datei /etc/pam.conf. In dieser stehen Zeilen mit fünf Feldern, voneinander durch Leerraum (Leerzeichen, Tabulator) getrennt:

     <Applikation> <Thema> <Bewertung> <Modul> <Daten für Modul> 

    Bei Ubuntu ist diese Datei leer bis auf Kommentarzeilen, weil Ubuntu die zweite, neuere Methode benutzt und die alte Konfigurationsdatei überhaupt nicht beachtet. Man sollte daher diese Datei auch nicht verändern. Diese alte Konfigurationsmethode wird in diesem Artikel nicht weiter besprochen.

  2. Die neue Methode verwendet für jede Applikation eine eigene Textdatei im Ordner /etc/pam.d/, deren Dateiname mit dem Kampfnamen der Applikation übereinstimmen muss. Beispiele: Für die Applikation SSH-Server ist hier zuständig sshd, für eine Anmeldung am Druckserver CUPS cups, für eine Anmeldung an einer SMB-Freigabe per smbd ist bei PAM die Datei samba zuständig. In diesen Dateien stehen Zeilen mit vier Feldern:

     <Thema> <Bewertung> <Modul> <Daten für Modul> 

    Das Feld <Applikation> fehlt, weil es ja durch den Dateinamen bereits feststeht.

Die wichtigste Konfigurationsdatei für PAM ist /etc/pam.d/other; hier steht, wie sich PAM verhalten soll, wenn eine Applikation, für die PAM nicht konfiguriert wurde, eine Anmeldung auslöst[3][2]:

grep -v -e ^$ -e ^# /etc/pam.d/other 

@include common-auth
@include common-account
@include common-password
@include common-session

Das Schlüsselwort "@include" in der Spalte <Thema> bedeutet, dass eine andere Datei an dieser Stelle textuell eingefügt werden soll. Das führt hier zu folgender effektiver Konfiguration:

grep -v -e ^$ -e ^# /etc/pam.d/common-{account,auth,password,session} 

/etc/pam.d/common-account:account	[success=1 new_authtok_reqd=done default=ignore]	pam_unix.so 
/etc/pam.d/common-account:account	requisite			pam_deny.so
/etc/pam.d/common-account:account	required			pam_permit.so
/etc/pam.d/common-auth:auth	[success=1 default=ignore]	pam_unix.so nullok
/etc/pam.d/common-auth:auth	requisite			pam_deny.so
/etc/pam.d/common-auth:auth	required			pam_permit.so
/etc/pam.d/common-auth:auth	optional			pam_cap.so 
/etc/pam.d/common-password:password	[success=1 default=ignore]	pam_unix.so obscure sha512
/etc/pam.d/common-password:password	requisite			pam_deny.so
/etc/pam.d/common-password:password	required			pam_permit.so
/etc/pam.d/common-password:password	optional	pam_gnome_keyring.so 
/etc/pam.d/common-session:session	[default=1]			pam_permit.so
/etc/pam.d/common-session:session	requisite			pam_deny.so
/etc/pam.d/common-session:session	required			pam_permit.so
/etc/pam.d/common-session:session optional			pam_umask.so
/etc/pam.d/common-session:session	required	pam_unix.so 
/etc/pam.d/common-session:session	optional	pam_systemd.so 

Achtung!

  • Es gibt keinen guten Grund, an dieser Standardkonfiguration etwas zu verändern. Wer es trotzdem tun möchte, sollte sich bewusst sein, dass hier an einer zentralen Stelle für die Sicherheit des Systems gearbeitet wird. Ein kleiner Fehler kann hier sowohl zu einem absolut sicheren System führen, an dem sich aber niemand mehr anmelden kann oder auch zu einem total unsicheren Systems durch unbeabsichtigten Einbau einer Hintertüre.

  • Die Systemdateien /etc/pam.d/common-* werden beispielsweise automatisch über das Paketsystem APT mit dem Programm pam-auth-update gepflegt. Eigene inkompatible Eingriffe können daher bei einer Aktualisierung unerwartete Folgen verursachen.

  • Arbeiten an den Konfigurationsdateien für PAM erfordern besondere Vorsicht, gepaart mit sorgfältig geplanten und durchgeführten Tests zur Sicherheit!

Eine Konfigurationsdatei für eine Applikation kann diese Zeilentypen enthalten:

  1. Kommentarzeilen beginnen mit dem Zeichen # und werden ignoriert.

  2. Leerzeilen enthalten gar nichts und werden auch ignoriert.

  3. Konfigurationszeilen beginnen mit einem Schlüsselwort nach Tabelle 1.

Andere Zeilen als die drei vorstehend genannten sind unzulässig.

Die vier Felder einer Konfigurationszeile können diese Werte enthalten:

  • Das erforderlich erste Feld muss einem der in Tabelle 1 genannten Schlüsselworten entsprechen.

  • Das (außer bei @include) erforderliche dritte Feld muss eines der PAM-Module benennen. PAM-Module werden (für CPUs der Gruppe x86_64) im Ordner /lib/x86_64-linux-gnu/security/ aufbewahrt. Für jedes dort abgelegt Modul gibt es eine eigene Manpage; für das Modul pam_unix.so z.B.:

    man pam_unix 
  • Das optionale vierte Feld enthält Daten für das Modul im dritten Feld.

  • Des erforderliche zweite Feld beschreibt, wie die Rückgabe des Moduls im dritten Feld Einfluss auf die weitere Abarbeitung der Konfiguration und ob das abschließende Ergebnis des Anmeldeversuchs erfolgreich sein kann oder nicht. Mögliche Werte siehe Tabelle 2.

⚓︎

Tabelle 1: Schlüsselworte im ersten Feld
Schlüsselwort Bedeutung
account Die Zeile spezifiziert eine formale Prüfung, ob das betreffende Benutzerkonto momentan gültig ist. Dazu gehört z.B., dass es überhaupt existiert, momentan oder dauerhaft nicht gesperrt ist, überhaupt zur Anmeldung vorgesehen ist.
auth Die Zeile spezifiziert eine Methode, mit der der Benutzer nachweisen kann, dass er tatsächlich der ist, der er zu sein behauptet. Das kann z.B. ein Passwort sein, Vorzeigen eines Gegenstands mit bestimmten technischen Merkmalen ("Hardware-Token") oder ein über eine passende Hardware identifiziertes biometrisches Merkmal.
password Bei einem angeforderten oder erzwungenen Passwortwechsel muss das neue Passwort hinsichtlich Länge, Komplexität, Gültigkeitsdauer etc. hier festgelegten Restriktionen genügen. Man kann z.B. auch die Wiederverwendung eines früheren Passwortes verbieten.
session Hier stehen Maßnahmen, die bei einer erfolgreichen Anmeldung durchgeführt werden und ggf. auch erfolgreich durchgeführt werden müssen, weil anderenfalls die Anmeldung doch nicht erfolgt. Dazu können gehören die Einrichtung eines Homeverzeichnis für den Benutzer, Setzen von Umgebungsvariablen und des Umask-Wertes, Test auf neue E-Mails, Beauftragung eines Display-Managers mit dem Start eines grafischen Desktops usw.
@include DATEI Die Zeilen der genannten DATEI aus dem Ordner /etc/pam.d/ werden an dieser Stelle so berücksichtigt, als wenn sie tatsächlich hier stehen würden.
  • Jedes der vier Themen account, auth, password, session wird zunächst unabhängig von den drei anderen bearbeitet und danach werden die vier einzelnen Ergebnisse zu einem Gesamtergebnis verrechnet, welches dann als erfolgreiche oder abgewiesene Anmeldung an die PAM aufrufende Applikation zurückgemeldet wird.

⚓︎

Tabelle 2: Schlüsselworte im zweiten Feld
Langform
Schlüsselwort
Ergebnis
[success=ok new_authtok_reqd=ok ignore=ignore default=bad]
required
Wenn der PAM-Modul ignore zurückmeldet, dann hat diese Zeile keinen Einfluss auf des Ergebnis.
Wenn der PAM-Modul „Prüfung bestanden“ oder „Passwort muss geändert werden!“ zurückmeldet, kann der Anmeldeversuch (später) erfolgreich sein.
Mit jeder anderer Rückmeldung wird der Anmeldeversuch später nach ggf. weiteren Prüfungen scheitern.
[success=ok new_authtok_reqd=ok ignore=ignore default=die]
requisite
Wenn der PAM-Modul ignore zurückmeldet, dann hat diese Zeile keinen Einfluss auf des Ergebnis.
Wenn der PAM-Modul „Prüfung bestanden“ oder „Passwort muss geändert werden!“ zurückmeldet, kann der Anmeldeversuch (später) erfolgreich sein.
Mit jeder anderer Rückmeldung scheitert der Anmeldeversuch sofort; es werden keine weiteren Prüfungen durchgeführt.
[success=done new_authtok_reqd=done default=ignore]
sufficient
Wenn der PAM-Modul „Prüfung bestanden“ oder „Passwort muss geändert werden!“ zurückmeldet, dann ist der Anmeldeversuch sofort erfolgreich, sofern noch keine negativen Ergebnisse vorliegen; es werden keine weiteren Prüfungen durchgeführt. Mit jeder anderen Rückmeldung hat die Zeile zwar keinen Einfluss auf das Ergebnis, es erfolgen aber ggf. Prüfungen über folgende Zeilen.
[success=ok new_authtok_reqd=ok default=ignore]
optional
Wenn der PAM-Modul „Prüfung bestanden“ oder „Passwort muss geändert werden!“ zurückmeldet, kann der Anmeldeversuch später erfolgreich enden, sofern noch keine negativen Ergebnisse vorliegen; es werden weitere Prüfungen durchgeführt. Mit jeder anderen Rückmeldung hat die Zeile keinen Einfluss auf das Ergebnis, es erfolgen aber ggf. Prüfungen über folgende Zeilen.
include DATEI Die in der angegebenen DATEI enthaltenen Zeilen zum selben Thema werden an dieser Stelle als Text eingebunden und ausgeführt, so als wenn diese tatsächlich hier vorhanden währen. Die Prüfungen im eingebundenen Textblock beeinflussen direkt die Ergebnisse und man kann in den eingebundenen Textblock hinein und heraus springen.
substack DATEI Die in der angegebenen DATEI enthaltenen Zeilen zum selben Thema werden an dieser Stelle quasi als Unterprogramm aufgerufen. Das Unterprogramm kennt nicht die bisherigen Ergebnisse, und Zeilen im Unterprogramm beeinflussen diese auch nicht direkt. Das aufrufende Programm verarbeitet die Rückgabewerte wie die jeder anderen Zeile. Man kann nicht in eine beliebige Zeile des eingebundenen Textblock springen.
[value1=action1 value2=action2 ...] Im allgemeinen Fall besteht die Auswertung aus einer in eckigen Klammern [] eingeschlossenen Liste von Wertepaaren in der Form "value=action", voneinander durch Leerzeichen getrennt. Der Teil value steht für einen möglichen benannten Rückgabewert der PAM-Module, und der Teil action steht für die Reaktion nach Tabelle 3, welche in diesem Fall erfolgen soll.

⚓︎

  • Mögliche Rückgabewerte eines PAM-Moduls sind:

    • Im Erfolgsfall der Wert 0 für success.

    • Bei Misserfolg oder Fehler eine positive Zahl im Bereich 1, 2 … 32 für open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy, authtok_disable_aging, try_again, ignore, abort, authtok_expired, module_unknown, bad_item, conv_again, incomplete.

    • Jeder andere als bereits genannter Rückgabewert wird ebenfalls als Fehler verstanden.

  • Ein PAM-Modul kann sich aber auf eine zweckmäßige Auswahl aus dieser Liste beschränken und muss nicht alle diese Werte realisieren.

  • Als weiterer Wert für value in einer Auswertungsliste ist an letzter Stelle möglich: default. Das steht dann für: „Alle anderen bisher nicht explizit genannten Rückgabewerte.“ Man sollte default=action immer in einer Auswerteliste verwenden, da sonst für nicht genannte Werte irgendwelche Vorgaben wirksam werden könnten.

⚓︎

Tabelle 3: Reaktionen (anzugeben im zweiten Feld)
Reaktion Wirkung
ignore Diese Zeile trägt nicht zum Ergebnis bei.
bad Der Anmeldeversuch wird später scheitern, es werden aber ggf. weitere konfigurierte Prüfungen durchgeführt.
die Der Anmeldeversuch scheitert sofort; es werden keine weiteren Prüfungen durchgeführt.
ok Der Anmeldeversuch kann später erfolgreich enden, sofern noch keine gegensätzlichen Ergebnisse vorliegen und solche sich auch bei weiteren Prüfungen nicht ergeben.
done Sofern noch keine negativen Ergebnisse vorliegen, endet der Anmeldeversuch sofort erfolgreich, sonst wird er wegen der früheren Ergebnisse jetzt abgewiesen, Es erfolgen keine weiteren Prüfungen.
Ganzzahl > 0 Das ist zu lesen als: Überspringe die angegebene Anzahl der nachfolgend konfigurierten Prüfungen. Die Wirkung ist wie bei ok, es werden aber nicht alle weiteren Prüfungen ausgeführt, sondern eben einige übersprungen.
reset Vergiss alle bisherigen Ergebnisse und fahre fort mit der nächsten Prüfung.

Abarbeitung steuern

Die Zeilen in einer Konfigurationsdatei werden ähnlich wie in Skripten nacheinander von oben nach unten abgearbeitet. Sie werden alle abgearbeitet, sofern nicht

  • die Abarbeitung mit einer Aktion die oder done beendet wird, oder

  • mit Sprungbefehlen explizit Zeilen übersprungen werden.

Man kann nur vorwärts springen, d.h. es gibt in diesen Konfigurationsdateien keine Programmschleifen.

Zur Erläuterung dieses verkappten GOTO-Befehls 🇬🇧 wird hier die Authentifizierung mittels common-auth besprochen:

1
2
3
4
auth	[success=1 default=ignore]	pam_unix.so nullok
auth	requisite			pam_deny.so
auth	required			pam_permit.so
auth	optional			pam_cap.so 

Zeile 1 startet das PAM-Modul pam_unix, welches das bei unixartigen Betriebssystemen übliche Authentifizierungsverhalten implementiert. Der Manpage des Moduls kann man die Bedeutung des Parameters nullok entnehmen: Es dürfen sich an dieser Stelle auch Benutzer anmelden, die gar kein Passwort haben. Das Modul überprüft, ob der eingegebene Benutzername in der Datei etc/passwd existiert, und ob das eingegebene Passwort mit dem in der Datei /etc/shadow übereinstimmt. (An Stelle dieser Dateien können über die Datei /etc/nsswitch alternative Methoden definiert sein.)

Wenn die Prüfung fehlschlägt, d.h. wenn der Benutzername unbekannt ist oder das falsche Passwort eingegeben wurde, gibt pam_unix jedenfalls nicht success zurück; das wird wegen der Bewertung default=ignore sofort vergessen und es wird mit der Zeile 2 fortgesetzt. Im Erfolgsfall gilt der sich anmeldende Benutzer aber als (vorläufig, da es widerrufen werden kann) authentifiziert und wegen success=1 wird eine Zeile (also konkret Zeile 2) übersprungen.

In Zeile 2, die ja nur dann ausgeführt wird, wenn keine gültige Benutzer/Passwort-Kombination vorgelegt wurde, wird der PAM-Modul pam_deny aufgerufen, welcher immer einen Fehler zurück meldet. Die Bewertung requisite impliziert das Verhalten, dass bei einem Fehler PAM sofort mit Fehlschlag beendet wird. Somit ist diese Zeile 2 eine verklausulierte Version von: „Du kommst hier nicht rein!“

In Zeile 3, welche ja nur erreicht wird, wenn der Benutzer bereits (vorläufig) erfolgreich authentifiziert wurde, liefert der Aufruf des PAM-Moduls pam_permit immer Erfolg, also nichts, was nicht schon bekannt wäre und macht damit an dieser Stelle effektiv gar nichts. Die Zeile 3 dient lediglich als Sprungziel und könnte auch fehlen.

In Zeile 4 wird schließlich noch das PAM-Modul pam_cap aufgerufen, dessen segensreiche Wirkung in seiner Manpage nachgelesen werden kann und bei einem Standard-Ubuntu-Desktop völlig irrelevant ist, da Ubuntu die Linux-Capabilities nicht verwendet. Auch der Rückgabewert dieses Moduls ist wegen der Bewertung optional unwichtig: Ein Fehlschlag wird vergessen und ein Erfolg liefert nichts Neues. (Dieses Modul sollte allerdings, wenn es verwendet wird, normalerweise an letzter Stelle stehen. Bei Ubuntu ist das nicht erfüllt, was sich nicht negativ auswirkt, solange die Linux-Capabilities gar nicht verwendet werden.)

Die vier Zeilen zusammen implementieren für PAM also die Anforderung:

  • „Gib eine gültige Kombination aus UNIX-Benutzernamen und -Passwort ein, oder Du kommst hier nicht rein!“

Dokumentation

Das unter Installation erwähnte Dokumentationspaket enthält u.a. diese Handbücher:

  • für den Systemadministrator: SAG – The Linux-PAM System Administrators' Guide

  • für Programmierer von PAM-Modulen: MWG – The Linux-PAM Module Writers' Guide

  • für Programmierer von Applikationen: ADG – The Linux-PAM Application Developers' Guide

Die Dokumentation findet man im Ordner /usr/share/doc/libpam-doc/html/: file:///usr/share/doc/libpam-doc/html/index.html 🇬🇧 (Dieser Link auf den eigenen Rechner wird nur in die Adresszeile des Browsers geladen und muss dann händisch aktiviert werden.)

Es gibt Manpages:

man PAM
man pam.d
man pam_MODUL   # für MODUL den Namen den MODULS einsetzen, z.b unix bei pam_unix.so, siehe Folgezeile
man -k pam_     # zeigt eine Liste der im System bekannten Manpages zu PAM (einige fehlen)
man -k pam      # zeigt eine Liste der im System bekannten Manpages zu PAM (und einige falsche Treffer) 

Praxisbeispiele

Diese Beispiele sollen nicht als besonders empfehlenswerte sichere Methoden gelten. Sie stehen hier als didaktische Anregungen, wie bestimmte Aufgaben mit PAM funktional lösbar sind. Ob die Lösungen auch im konkreten Einsatzfall hinreichend sicher sind, muss der Systemverwalter individuell prüfen und beurteilen.

Situationsabhängige Anmeldung

Aufgabe: Ein Laptop wird an verschieden Orten in wechselnden Netzwerken eingesetzt:

  1. In der Privatwohnung, deren Netzwerk hier als hinreichend gesichert vorausgesetzt wird, und in der ein physischer Zugriff durch unbefugte Personen nicht zu befürchten ist. Beim Betrieb des Rechners an diesem Ort soll eine Anmeldung des Benutzers ohne Abfrage eines Passwortes erfolgen.

  2. An anderen, öffentlich zugänglichen Orten, beispielsweise an einer Hochschule, in deren Netz sich Fremde aufhalten und Fremde auch möglicherweise physischen Zugriff auf den Rechner erlangen könnten. Beim Betrieb des Rechners an diesen Orten soll der Benutzer sich normal per Passwortabfrage anmelden.

Ansatz: Man benutzt den Router in der Privatwohnung als Hardware-Token. Wenn dieses erkannt wird, gilt es als ausreichende Authentifizierung und eine sonst erfolgende Passwort-Abfrage wird übersprungen.

Die Realisierung besteht aus zwei Teilen:

  1. Man benötigt ein PAM-Modul, welche das Hardwaretoken erkennt und Erfolg/Misserfolg zurückmeldet. Das muss man sich selber erstellen. Hier wird es mit dem PAM-Modul pam_exit realisiert, welches den Aufruf eines Programms erlaubt. Es hierfür geeignetes Skript mit Erläuterungen findet man als Anlage zu diesem Artikel: PAM/ist-zuhause

  2. Man muss eine geeignete Konfigurationsdatei von PAM ändern und eine weitere Authentifizierungsmethode einbauen. Für Systeme mit GDM als zuständige Applikation für die grafische Anmeldung ist das die Datei /etc/pam.d/gdm-password.

Man benenne mit Root-Rechten[4] die bisherige Datei /etc/pam.d/gdm-password um in z.B. /etc/pam.d/gdm-password~2023-06-29; der neue Name ist beliebig.

Man erstelle mit Root-Rechten[4]eine neue Datei /etc/pam.d/gdm-password mit diesem Inhalt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#PAM-1.0			/etc/pam.d/gdm-password
# Copyright (c) 2023		kB @ UbuntuUsers.de
# SPDX-License-Identifier:	GLWTPL
# https://spdx.org/licenses/GLWTPL.html (Good Luck With That Public License)

# Vorheriger effektiver Standard-Inhalt zu auth aus /etc/pam.d/gdm-password,
# jetzt umbenannt zu gdm-password~2023-06-29:
#/etc/pam.d/gdm-password:auth    requisite       pam_nologin.so
#/etc/pam.d/gdm-password:auth	 required	 pam_succeed_if.so user != root quiet_success

#/etc/pam.d/gdm-password:@include common-auth
#/etc/pam.d/common-auth:auth	[success=1 default=ignore]	pam_unix.so nullok
#/etc/pam.d/common-auth:auth	requisite			pam_deny.so
#/etc/pam.d/common-auth:auth	required			pam_permit.so
#/etc/pam.d/common-auth:auth	optional			pam_cap.so 

#/etc/pam.d/gdm-password:auth    optional        pam_gnome_keyring.so

auth    requisite			pam_nologin.so
auth	required			pam_succeed_if.so user != root quiet_success

#auth	[success=5 default=ignore]	pam_exec.so quiet /usr/bin/false
#auth	[success=4 default=ignore]	pam_exec.so quiet /usr/bin/false
auth	[success=3 default=ignore]	pam_exec.so quiet /usr/local/sbin/ist-zuhause
auth	[success=2 default=ignore]	pam_exec.so quiet /usr/bin/false
auth	[success=1 default=ignore]	pam_unix.so nullok
auth	requisite			pam_deny.so

auth    optional			pam_gnome_keyring.so
auth	optional			pam_cap.so 

account 	include	gdm-password~2023-06-29
session 	include	gdm-password~2023-06-29
password	include	gdm-password~2023-06-29

  • Die Zeilen 6-17 referieren den bisherigen effektiven Inhalt von gdm-password hinsichtlich auth.

  • Zeilen 19 und 20 sind unverändert übernommen. Ebenso Zeile 29.

  • Zeile 26 entspricht der ersten Zeile aus dem früher inkludierten common-auth, dessen Zeilen nun direkt in der neuen Datei an Position 26, 27 und 30 stehen.

  • Neu sind die vier Zeilen 22-25, in denen bis zu 4 alternative Authenfizierungsmehoden stehen können. Die erste erfolgreiche überspringt die folgenden. Für die aktuelle Aufgabe wird nur eine der vier Zeilen benötigt, die anderen sind auf Fehlschag programmiert. (Beachte: Zeilen 22 und 23 sind durch Kommentarzeichen deaktiviert, jedoch nicht Zeile 25. Wenn man Zeile 25 auch deaktiviern möchte, muss man in Zeile 24 die Sprungweite anpassen, da hierfür nur die aktiven Zeilen gezählt werden!)

  • Schießlich werden mit den Zeilen 32-34 noch jeweils für die anderen Themen die Regeln aus der alten Datei eingebunden.

Zeitsperre

Man kann Benutzern die Anmeldung zu bestimmten Zeiten sperren und damit beispielsweise Kindern die nächtliche Benutzung des Rechners unmöglich machen. Siehe hierzu: pam time

Verschlüsseltes Benutzerverzeichnis

Jeder Benutzer kann sein eigenes (z.B per LUKS) verschlüsseltes Homeverzeichnis haben, welches erst bei seiner Anmeldung eingebunden und aufgeschlossen wird. Siehe hierzu: Daten verschlüsseln (Abschnitt „Mit-LUKS-verschluesselte-home-Partition-automatisch-beim-Anmelden-einbinden“)

Diese Revision wurde am 18. Juli 2023 14:07 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Sicherheit