GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Aufbau einer Linux Pluggable Authentication Modules (PAM) Konfigurationsdatei

In einem früheren Artikel habe ich den Ablauf einer Anwendung beschrieben, die PAM-Bibliotheken zur Authentifizierung auf sehr hohem Niveau aufruft. In diesem Artikel gehen wir durch die Konfigurationsdateien für ein lokales sudo Befehl.

Bei Verwendung von sudo , wir wechseln den Benutzer und tun etwas. Diese Berechtigungsänderung erfordert die Überprüfung, dass wir der sind, von dem wir sagen, dass wir es sind, und dass wir die gegebene Aktion ausführen dürfen. Die /etc/sudoers Datei steuert, wer was tun kann, aber der Prozess ruft PAM weiterhin für alle Authentifizierungsprüfungen auf. Als Teil dieser Aufrufe identifiziert sich der Prozess selbst und dann libpam sucht nach einer passenden Konfigurationsdatei in /etc/pam.d Verzeichnis.

$ cat /etc/pam.d/sudo
#%PAM-1.0
#Type       ReturnCode   Modules       Options
auth       include      system-auth
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so revoke
session    required     pam_limits.so
session    include      system-auth

Wie viele andere *.d-Verzeichnisse kann die Paketverwaltung eine Datei aus diesem Verzeichnis hinzufügen oder daraus entfernen. Das sudo RPM fügt den /etc/pam.d/sudo hinzu Datei.

$ rpm -qf /etc/pam.d/sudo
sudo-1.9.0-0.1.b4.fc31.x86_64

Eine Upstream-Version kann eine Vielzahl von Einträgen haben, aber dieses von der Distribution bereitgestellte Paket enthält eine Konfigurationsdatei mit mehreren include Anweisungen zum gemeinsamen /etc/pam.d/system-auth Datei, die von pam bereitgestellt wird Paket.

Felder der Konfigurationsdatei

Das erste Feld in dieser Datei identifiziert einen Typ des Anrufs bei PAM. Zeilen des gleichen Typs werden zusammengefasst. Es gibt vier Typen:auth, account, password und session. Sehen Sie sich man pam an für eine Beschreibung jedes Typs.

Das zweite Feld ist als ReturnCode bekannt . Dieses Feld teilt PAM mit, wie mit den Ergebnissen des Modultests umzugehen ist. Rückgabecodes geben an, ob ein Test erforderlich oder optional ist. Die Codes können auch verwendet werden, um anzuzeigen, dass es sich bei der Zeile nicht um einen Modultest mit Optionen handelt, sondern um den Namen einer anderen Konfigurationsdatei mit zusätzlichen Prüfungen. Eine vollständige Beschreibung der Rückgabecodes finden Sie in man pam.conf , und die gängigsten werden später in diesem Artikel besprochen.

Der Rest der Zeile enthält den Modulnamen und Optionen für dieses Modul. Der Modulname muss mit einem Modul übereinstimmen, das in /etc/lib64/security verfügbar ist Verzeichnis. Die Optionen können je nach Art des getätigten Anrufs unterschiedlich sein. Einige Module führen nur Tests für einige Anruftypen durch. Verwenden Sie die Manpage für jedes Modul, um Beispiele zu sehen und mehr über die Verwendungsmöglichkeiten und verfügbaren Optionen zu erfahren.

Die Reihenfolge der Einträge innerhalb eines Anruftyps ist von Bedeutung. Dies liegt hauptsächlich daran, wie die Rückkehrcodes verarbeitet werden, aber in einigen Fällen an einer Modulaktion. Wenn libpam eine "done"- oder "die"-Nachricht erhält, meldet er das Gesamtergebnis an den aufrufenden Prozess zurück.

Die Konfiguration für sudo hat mehrere include Linien. Diese Zeilen teilen libpam mit um alle Zeilen des angegebenen Typs aus der angegebenen Konfigurationsdatei einzuschließen. Es gibt auch einen Substack -Option, die ähnlich darin ist, wie sie Zeilen aus einer gegebenen Konfigurationsdatei einschließt, aber bei "done" oder "die" an den Substack zurückmeldet Anweisung anstelle des ursprünglichen Prozesses, der libpam aufruft . Ältere Versionen von PAM hatten andere Variationen darüber, wie andere Konfigurationsdateien enthalten waren. Als ich beispielsweise vor fast 20 Jahren anfing, PAM zu erforschen, gab es ein bestimmtes Modul, das mit den Konfigurationsdateien als Argument aufgerufen wurde. Das Schlüsselwort "include" war für den ReturnCode ungültig Feld.

Rückgabecodes in den zentralen Konfigurationsdateien

Der /etc/pam.d/sudo Die zuvor gezeigte Datei ist ziemlich kurz. Drei der vier Aufruftypen haben nur ein include einer anderen Datei. Der /etc/pam.d/system-auth file ist eher typisch für eine Konfigurationsdatei, mit vielen Prüfungen für jeden Aufruftyp.

$ cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so
...omitted...

Das erforderliche Schlüsselwort ist vielleicht das häufigste. Es zeigt an, dass das Modul die Prüfung bestehen muss, damit ein Gesamtbestanden an die Bewerbung zurückgegeben werden kann. Aber auch bei einem Fehler werden die folgenden Zeilen dieses Typs noch geprüft. Dies ist eine langjährige Praxis, keinen Grund für einen Authentifizierungsfehler mitzuteilen. Auf Systemen vor 20 Jahren wäre es möglich gewesen, anhand der Zeit, die bis zum Scheitern gedauert hat, zu erraten, wie die Authentifizierung fehlgeschlagen ist.

Das Erfordernis Schlüsselwort ist ähnlich wie erforderlich , dass die Prüfung bestanden werden muss, aber im Falle eines Fehlschlagens eine "sterben"-Nachricht zurückgibt. Erforderlich lässt libpam wissen, dass die folgenden Zeilen nicht überprüft werden, und um den aufrufenden Prozess über das Gesamtergebnis zu informieren – in diesem Fall ein Fehler.

Die ausreichend Schlüsselwort ist fast das Gegenteil von requisite . Bei Erfolg wird eine „Done“-Meldung zurückgegeben und libpam geht weiter und sendet seine Gesamtergebnisse zurück an die aufrufende Anwendung. Andere Ergebnisse dieses Moduls werden ignoriert und die Prüfung wird fortgesetzt.

Die ausreichend Schlüsselwort ist üblich, wenn es mehrere Möglichkeiten gibt, ein Kriterium zu überprüfen. Wenn Sie beispielsweise ein Passwort verifizieren, könnte der Benutzer im lokalen /etc/passwd definiert sein und /etc/shadow Dateien, oder sie sind möglicherweise nur in einem zentralen System definiert, auf das mit sssd zugegriffen wird . Die pam_unix Modul überprüft die lokalen Dateien. Bei Erfolg ist es nicht erforderlich, die zentralisierten Dienste fortzusetzen und zu überprüfen. Wenn der Benutzer jedoch nicht lokal definiert ist, möchten wir keinen Fehler aufzeichnen, wir möchten das Ergebnis ignorieren und den pam_sss versuchen Modul. Da die ausreichend Schlüsselwort nie wirklich fehlschlägt, ist es üblich, ein erforderliches pam_deny hinzuzufügen Zeile nach einer Reihe von ausreichend Linien. Die pam_deny -Modul schlägt immer ähnlich wie /bin/false fehl ausführbar.

Die optionale Schlüsselwort ist ähnlich wie ausreichend dadurch, dass es alle Fehler ignoriert. Bei Erfolg verhält es sich jedoch eher wie das erforderliche Keyword, indem Sie einen "OK"-Wert festlegen und weitere Überprüfungen durchführen.

Da beides erforderlich ist und ausreichend Austrittspunkte aus dem Modulstapel sein können, ist die Reihenfolge in der Konfigurationsdatei wichtig. Zeilen nach diesen Schlüsselwörtern können ausgeführt werden oder nicht.

Komplexe Rückgabecodes

Über die einfache Schlüsselwortsyntax hinaus werden komplexe Rückgabecodes mit Schlüssel-Wert-Paaren in eckigen Klammern definiert. Der /etc/pam.d/system-auth Datei hat ein Beispiel im Session-Abschnitt der komplexeren Syntax.

$ cat /etc/pam.d/system-auth
...omitted...
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

Die komplexe Syntax, die jedem Schlüsselwort entspricht, finden Sie in der pam.conf Manpage. Der - oben gezeigt ist auch in der Manpage definiert. Es zeigt an, dass die Protokollierung übersprungen werden kann, wenn das Modul nicht auf dem System installiert ist.

Was kommt als nächstes?

Jetzt können wir durchgehen, wann ein Aufruf und ein Exit mit libpam erfolgt , besteht der nächste Schritt darin, den Anwendungsfall für jedes Modul besser zu verstehen. Die meisten Module haben eine Handbuchseite, die die Verwendung erklärt und Beispiele für Zeilen zeigt, die in pam.d erscheinen sollten Konfigurationsdateien. Einige der Module verweisen auch auf zusätzliche Dateien in /etc/security Verzeichnis. Diese Dateien sind gut kommentiert und haben oft auch ihre eigene Manpage. Die pam_pwquality und pam_limits Module sind gute Beispiele für den Einstieg.

Abschluss

Im nächsten Artikel werde ich einige der Änderungen durchgehen, die mit authconfig vorgenommen wurden Nützlichkeit. Wenn Sie Dateien selbst bearbeiten möchten und über eine Red Hat Learning Subscription verfügen, lesen Sie das Kapitel zu PAM im Kurs Red Hat Security:Linux in Physical, Virtual, and Cloud (RH415).

[ Kostenloser Online-Kurs:Technischer Überblick zu Red Hat Enterprise Linux. ]


Linux
  1. Linux – Alles ist eine Datei?

  2. Anfängerleitfaden zur Kernelmodulkonfiguration in Linux

  3. Grundlegendes zur Konfigurationsdatei /etc/profile unter Linux

  4. Nicht standardmäßiger Speicherort für die ssh-Konfigurationsdatei in Linux

  5. chsh:PAM-Authentifizierung fehlgeschlagen

Weniger Befehl unter Linux

Gzip-Befehl unter Linux

Gunzip-Befehl unter Linux

Stat-Befehl unter Linux

Eine Einführung in Pluggable Authentication Modules (PAM) in Linux

So verbessern Sie die Benutzersicherheit von Linux mit Pluggable Authentication Module-Einstellungen