Frage Verstehen Sie PAM und NSS


In den letzten Tagen habe ich ein Linux-System mit LDAP-Authentifizierung eingerichtet und alles funktioniert gut, aber es gibt immer noch etwas, was ich nicht wirklich verstehen kann, was NSS und PAM angeht, auch nach vielen Recherchen.

Zitierweise:

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

und

PAM besteht aus einer 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. Im dieses Buch Die Architektur ist ziemlich gut erklärt: Ich konfiguriere PAM zu verwenden pam_ldap für LDAP-Konten und pam_unix Für lokale Accounts konfiguriere ich dann nsswitch.conf Informationen von lokalen Dateien und LDAP abrufen.

Wenn ich richtig verstanden habe, wird LDAP zweimal verwendet: zuerst von pam_ldap und dann von NSS, die selbst von 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 gelesen habe diese Seite.

Also habe ich ein bisschen experimentiert und zuerst LDAP aus dem Internet gelöscht nsswitch.conf (und die Authentifizierung wurde gestoppt, um zu funktionieren als ob nur pam_ldap nicht genug ist den Job erledigen). Dann habe ich LDAP in NSS wieder aktiviert und ich habe es aus der PAM-Konfiguration gelöscht (diesmal hat alles funktioniert, als ob pam_ldap ist nutzlos und NSS ist genug um einen Benutzer zu authentifizieren).

Kann mir jemand helfen, das zu klären? Vielen Dank im Voraus.

AKTUALISIEREN

Ich habe gerade etwas versucht. Ich habe alle wieder entfernt pam_ldap Einträge in allen pam Konfigurationsfeldern und ich habe auch entfernt shadow: ldap von nsswitch.conf. Wie jetzt im ganzen System gibt es nur die Linien: passwd: ldap files und group: ldap files im nsswitch.conf. Nun ... die Anmeldung mit LDAP - Benutzern funktioniert einwandfrei, diese beiden Zeilen (plus /etc/ldap.conf) reichen aus, um die LDAP-Authentifizierung zu konfigurieren.

Von meinem Wissen ist PAM unabhängig von NSS, aber meine Tests haben gezeigt, dass es nicht so ist. Also frage ich mich ist es möglich, NSS vollständig zu deaktivieren und nur PAM zu verwenden?


19
2017-09-12 13:27


Ursprung


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


Antworten:


Es hilft, solche Dinge in deinem Kopf zu brechen:

  • NSS - Ein Modul-basiertes System zum Steuern, wie verschiedene OS-Level-Datenbanken im Speicher zusammengebaut werden. Dies beinhaltet (ist aber nicht beschränkt auf) passwd, group, shadow (das ist wichtig zu beachten), und hosts. UID-Lookups verwenden das passwd Datenbank und GID-Lookups verwenden die group Datenbank.

  • PAM - Ein Modul-basiertes System zur Ermöglichung einer service-basierten Authentifizierung und Abrechnung. Im Gegensatz zu NSS erweitern Sie keine vorhandenen Datenbanken. PAM-Module können die von ihnen gewünschte Logik verwenden, Shell-Logins sind jedoch immer noch abhängig von passwd und group Datenbanken von NSS. (Sie benötigen immer UID / GID-Lookups)

Der wichtige Unterschied ist, dass PAM nichts alleine macht. Wenn eine Anwendung nicht mit der PAM-Bibliothek verknüpft ist und Aufrufe an sie sendet, wird PAM nie verwendet. NSS ist das Kernstück des Betriebssystems, und die Datenbanken sind für den normalen Betrieb des Betriebssystems ziemlich allgegenwärtig.

Jetzt, wo wir das aus dem Weg haben, ist hier der Kurvenball: während pam_ldap ist der Beliebt Möglichkeit, sich gegen LDAP zu authentifizieren, ist es nicht die nur Weg.

  • Ob shadow zeigt auf den ldap-Dienst innerhalb /etc/nsswitch.confJede Authentifizierung, die für die Shadow-Datenbank ausgeführt wird, ist erfolgreich, wenn die Attribute für diese Shadow-Feldzuordnungen (insbesondere das Feld für das verschlüsselte Kennwort) in LDAP vorhanden sind und eine Anmeldung zulassen würden.
    • Dies bedeutet wiederum, dass pam_unix.so kann möglicherweise zu einer Authentifizierung gegen LDAP führen, da es sich bei der Shadow-Datenbank authentifiziert. (die von NSS verwaltet wird und möglicherweise auf LDAP verweist)
  • Wenn ein PAM-Modul Aufrufe an einen Daemon ausführt, der wiederum die LDAP-Datenbank abfragt (z. B. pam_sss.sowelche Haken sssd), ist es möglich, dass LDAP referenziert wird.

24
2017-09-12 19:30



Vielen Dank, ich weiß, dass nsswitch.conf + pam_unix zu all der Arbeit alleine kann. Aber auch PAM sollte das gleiche können, weil es unabhängig ist, wie Sie es auch geschrieben haben. Mein Verständnis ist, dass das Modul pam_ldap genug sein sollte, um den Benutzer gegen einen LDAP-Server zu authentifizieren. Ist es nicht? - ColOfAbRiX
Authentifizieren Sie ja, aber wenn Sie keine andere Möglichkeit haben, Benutzerinformationen zu erhalten (lokal / etc / passwd oder was auch immer), benötigen Sie noch eine Möglichkeit, Gruppenmitgliedschaft, Home-Verzeichnis usw. zu finden. Sie verwirren immer noch Authentisierung und Autorisierung / Attribut-Enumeration. - TheFiddlerWins
@ColOfAbRiX TheFIddlerWins ist korrekt. Es reicht authentifizieren, aber Sie brauchen immer noch eine Möglichkeit, UIDs + GID-Mitgliedschaften nachzuschlagen, wie ich festgestellt habe. Diese erhalten Sie von der passwd und group Datenbanken (NSS), dh sie müssen sich auf dem lokalen System befinden (/etc/passwd+/etc/group), oder erhalten über die ldap NSS-Modul. - Andrew B
Hier ist eine Möglichkeit, Ihnen zu helfen: run getent passwd und getent group mit aktiviertem LDAP für beide Datenbanken in /etc/nsswitch.conf. Deaktivieren Sie dann LDAP in dieser Datei und führen Sie beide Befehle erneut aus. getent ist ein Befehl zum Ausgeben von NSS-Datenbanken. - Andrew B
Endlich konnte ich alles mit ein bisschen mehr Arbeit verstehen. Danke Jungs! - ColOfAbRiX


NSS dient dazu, Informationen über Dienste / Benutzer aufzulisten (zu welcher Gruppe Sie gehören, wo sich Ihr Heimatverzeichnis befindet usw.). PAM bestimmt, was mit diesen Informationen zu tun ist.

Wenn Sie LDAP für verwenden möchten Authentifizierung Sie brauchen Pam_ldap. Wenn Sie etwas anderes verwenden (lokale Konten, Kerberos usw.), können Sie dies nicht tun.

Sie machen also verschiedene Dinge. NSS erhält Informationen, PAM bestimmt, wer was tun darf, sobald diese Informationen erhalten sind.


1
2017-09-12 14:42



Danke, aber das Problem ist, dass es auf diese Weise nicht funktioniert, zumindest in meinem System :) Am Anfang verstand ich das Gleiche, aber dann habe ich versucht, alle pam_ldap Einträge in PAM zu entfernen und die LDAP Authentifizierung funktionierte noch (und den Cache deaktiviert). Dies erhöhte meine Verwirrung :) - ColOfAbRiX
Wie bestätigst du, dass du dich über pam_ldap authentifizierst, nachdem du es entfernt hast? Veröffentlichen Sie bitte den Inhalt Ihrer Common-Auth. Ich bin mir nicht sicher über die Pfade in SUSE, aber als Antwort auf den ersten Teil Ihrer dritten Frage, selbst wenn Sie pam_ldap verwenden, brauchen Sie eine Möglichkeit, damit das System weiß, wer Sie sind - dies wird von NSS bereitgestellt - TheFiddlerWins
Es tut mir leid, ich meine, nach dem Entfernen von pam_ldap, LDAP Auth funktioniert ohne es, ich denke, es funktionierte durch NSS. Die Datei common-auth enthielt nur pam_env, pam_unix und pam_deny. - ColOfAbRiX
Das macht keinen Sinn, wie haben Sie bestätigt, dass LDAP-Authentifizierung funktioniert hat? - TheFiddlerWins
Mit einem LDAP-Konto anmelden und das Protokoll des LDAP-Servers überwachen. Nscd (Caching) ist deaktiviert - ColOfAbRiX