Verstehen Sie PAM und NSS

21

In den letzten Tagen habe ich ein Linux-System mit LDAP-Authentifizierung eingerichtet und alles funktioniert einwandfrei, aber es gibt immer noch etwas, das ich in Bezug auf NSS und PAM nicht wirklich verstehe, auch nach vielen Nachforschungen.

Zitieren:

Mit NSS können Administratoren eine Liste von Quellen angeben, in denen Authentifizierungsdateien, Hostnamen und andere Informationen gespeichert und gesucht werden

und

PAM ist eine Reihe von Bibliotheken, die eine konfigurierbare Authentifizierungsplattform für Anwendungen und das zugrunde liegende Betriebssystem bereitstellen

Was ich nicht verstehe, ist, wie PAM und NSS zusammenarbeiten und interagieren. In diesem Buch wird die Architektur ziemlich gut erklärt: Ich konfiguriere PAM für die Verwendung pam_ldapfür LDAP-Konten und pam_unixfür lokale Konten und konfiguriere nsswitch.confdann das Abrufen von Informationen aus lokalen Dateien und LDAP.

Wenn ich richtig verstanden habe, wird LDAP zweimal verwendet: zuerst von pam_ldapund dann von NSS, von dem aus es selbst aufgerufen wird pam_unix. Ist das richtig? Wird LDAP wirklich zweimal verwendet? Aber warum muss ich sowohl NSS als auch PAM konfigurieren? Meine Erklärung ist, dass PAM andere Aufgaben als NSS ausführt und von anderen Programmen verwendet wird. Aber dann sollte es möglich sein, nur NSS oder nur PAM zu verwenden, wie ich auf dieser Seite gelesen habe .

Also habe ich ein bisschen experimentiert und zuerst versucht, LDAP von der zu löschen nsswitch.conf(und die Authentifizierung hat aufgehört zu funktionieren, als ob nur pam_ldap nicht ausreicht , um den Job zu erledigen). Dann habe ich LDAP in NSS wieder aktiviert und es aus der PAM-Konfiguration gelöscht (diesmal hat alles gut funktioniert, als wäre pam_ldapes nutzlos und NSS reicht aus , um einen Benutzer zu authentifizieren).

Gibt es jemanden, der mir helfen kann, dies zu klären? Vielen Dank im Voraus.

AKTUALISIEREN

Ich habe gerade etwas ausprobiert. Ich entfernte wieder alle pam_ldapEinträge in allen pam Konfigurationsfelder und ich habe auch entfernt shadow: ldapvon nsswitch.conf. Wie jetzt in allen Systemen gibt es nur die Zeilen: passwd: ldap filesund group: ldap filesin nsswitch.conf. Nun, die Anmeldung bei LDAP-Benutzern funktioniert einwandfrei. Diese beiden Zeilen (plus /etc/ldap.conf) reichen aus, um die LDAP-Authentifizierung zu konfigurieren.

Meines Wissens nach ist PAM unabhängig von NSS, aber meine Tests haben gezeigt, dass dies nicht der Fall ist. Ich frage mich also, ob es möglich ist, NSS vollständig zu deaktivieren und nur PAM zu verwenden.

ColOfAbRiX
quelle
Ich habe dein Update nicht gesehen. Führen Sie die folgenden Befehle aus, und melden Sie Ihre Ergebnisse. Ersetzen Sie dabei LDAPUSER durch den Benutzer, der Ihrer Meinung nach nur in LDAP konfiguriert ist. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B

Antworten:

25

Es hilft, Dinge wie diese in deinem Kopf zu zerlegen:

  • NSS - Ein modulbasiertes System zur Steuerung, wie verschiedene Datenbanken auf Betriebssystemebene im Speicher zusammengestellt werden. Dazu gehört (aber nicht beschränkt auf) passwd, group, shadow(dies ist wichtig zu beachten), und hosts. UID-Suchvorgänge verwenden die passwdDatenbank und GID-Suchvorgänge verwenden die groupDatenbank.

  • PAM - Ein auf Modulen basierendes System, das eine service-basierte Authentifizierung und Abrechnung ermöglicht. Im Gegensatz zu NSS erweitern Sie keine vorhandenen Datenbanken. PAM-Module können beliebige Logik verwenden, obwohl Shell-Anmeldungen weiterhin von den passwdund group-Datenbanken von NSS abhängen . (Sie benötigen immer UID / GID-Lookups)

Der wichtige Unterschied ist, dass PAM nichts alleine macht. Wenn eine Anwendung keine Verbindung zur PAM-Bibliothek herstellt und diese aufruft, wird PAM niemals verwendet. NSS ist der Kern des Betriebssystems, und die Datenbanken sind für den normalen Betrieb des Betriebssystems ziemlich allgegenwärtig.

Nun, da wir das aus dem Weg haben, ist hier der Kurvenball: Während Pam_ldap die beliebte Methode zur Authentifizierung gegen LDAP ist, ist es nicht die einzige Methode.

  • Wenn shadowauf den ldap-Dienst innerhalb von verwiesen wird /etc/nsswitch.conf, ist jede Authentifizierung, die für die Schattendatenbank ausgeführt wird, erfolgreich, wenn die Attribute für diese Schattendatenfeldzuordnungen (insbesondere das verschlüsselte Kennwortfeld) in LDAP vorhanden sind und die Anmeldung ermöglichen würden.
    • Dies bedeutet wiederum, dass pam_unix.somöglicherweise eine Authentifizierung gegen LDAP erfolgt, da die Authentifizierung gegen die Schattendatenbank erfolgt. (Wird von NSS verwaltet und zeigt möglicherweise auf LDAP.)
  • Wenn ein PAM-Modul Aufrufe für einen Dämon ausführt, der wiederum die LDAP-Datenbank abfragt (z. B. pam_sss.sowelche Hooks sssd), wird möglicherweise auf LDAP verwiesen.
Andrew B
quelle
Vielen Dank, ich weiß, dass nsswitch.conf + pam_unix alles für sich erledigen kann. Aber auch PAM sollte das können, denn es ist unabhängig, wie Sie auch geschrieben haben. Mein Verständnis ist, dass das Modul pam_ldap ausreichen sollte, um den Benutzer gegen einen LDAP-Server zu authentifizieren. Ist es nicht
ColOfAbRiX
6
Authentifizieren Sie sich mit yes, aber wenn Sie keine andere Möglichkeit haben, Benutzerinformationen abzurufen (local / etc / passwd oder was auch immer), müssen Sie immer noch die Möglichkeit haben, die Gruppenmitgliedschaft, das Ausgangsverzeichnis usw. herauszufinden.
TheFiddlerWins
1
@ColOfAbRiX TheFIddlerWins ist korrekt. Es reicht aus, um sich zu authentifizieren , aber Sie müssen immer noch eine Möglichkeit finden, um nach UIDs + GID-Mitgliedschaften zu suchen, wie ich festgestellt habe. Diese werden aus der passwdund group-Datenbank (NSS) bezogen, dh sie müssen sich auf dem lokalen System ( /etc/passwd+ /etc/group) befinden oder über das ldapNSS-Modul bezogen werden.
Andrew B
3
Hier ist ein Weg , Ihnen zu helfen , zu verstehen: laufen getent passwdund getent groupmit LDAP - fähigen für beide Datenbanken in /etc/nsswitch.conf. Deaktivieren Sie dann LDAP in dieser Datei und führen Sie beide Befehle erneut aus. getentist ein Befehl zum Speichern von NSS-Datenbanken.
Andrew B
Endlich konnte ich alles mit ein bisschen mehr Arbeit verstehen. Danke Jungs!
ColOfAbRiX
1

NSS dient zum Auflisten von Informationen zu Diensten / Benutzern (zu welcher Gruppe Sie gehören, wo sich Ihr Home-Verzeichnis befindet usw.). PAM legt fest, was mit diesen Informationen geschehen soll.

Wenn Sie LDAP zur Authentifizierung verwenden möchten, benötigen Sie pam_ldap. Wenn Sie etwas anderes verwenden (lokale Konten, Kerberos usw.), ist dies möglicherweise nicht der Fall.

Also machen sie verschiedene Dinge. NSS erhält Informationen, PAM bestimmt, wer was tun darf, sobald diese Informationen vorliegen.

TheFiddlerWins
quelle
Danke, aber das Problem ist, dass es zumindest in meinem System nicht so funktioniert :) Am Anfang habe ich das Gleiche verstanden, aber dann habe ich versucht, alle pam_ldap-Einträge zu entfernen, die in der PAM- und LDAP-Authentifizierung noch funktioniert haben (und den Cache deaktiviert). Dies erhöhte meine Verwirrung :)
ColOfAbRiX
Wie überprüfen Sie, ob Sie sich über pam_ldap authentifizieren, nachdem Sie es entfernt haben? Veröffentlichen Sie bitte den Inhalt Ihres Common-Auths. Ich bin mir nicht sicher über die Pfade in SUSE, aber als Antwort auf den ersten Teil Ihrer dritten Frage brauchen Sie eine Möglichkeit, damit das System weiß, wer Sie sind - dies wird von NSS bereitgestellt
TheFiddlerWins
Es tut mir leid, ich meine, dass nach dem Entfernen von pam_ldap die LDAP-Authentifizierung ohne sie funktioniert hat. Ich denke, dass sie über NSS funktioniert hat. Die Datei common-authenthielt nur pam_env, pam_unix und pam_deny.
ColOfAbRiX
Das macht keinen Sinn, wie haben Sie bestätigt, dass LDAP-Authentifizierung funktioniert hat?
TheFiddlerWins
Melden Sie sich mit einem LDAP-Konto an und überwachen Sie das LDAP-Serverprotokoll. nscd (caching) ist deaktiviert
ColOfAbRiX