Ldap

了解 PAM 和 NSS

  • October 19, 2017

在過去的幾天裡,我設置了一些帶有 LDAP 身份驗證的 Linux 系統,一切正常,但是在經過大量研究之後,關於 NSS 和 PAM 仍然有一些我無法真正理解的東西。

引用:

NSS 允許管理員指定儲存和搜尋身份驗證文件、主機名和其他資訊的來源列表

PAM 是一組庫,為應用程序和底層作業系統提供可配置的身份驗證平台

我不明白的是 PAM 和 NSS 如何一起工作和互動。在本書中,體系結構得到了很好的解釋:我將 PAM 配置為pam_ldap用於 LDAP 帳戶和pam_unix本地帳戶,然後配置nsswitch.conf為從本地文件和 LDAP 中獲取資訊。

如果我理解正確,LDAP 被使用了兩次:首先是pam_ldap由 NSS 呼叫,然後是 NSS,它本身就是從pam_unix. 是對的嗎?LDAP 真的被使用了兩次嗎?但是為什麼我需要同時配置 NSS 和 PAM?我的解釋是 PAM 執行的任務與 NSS 不同,它被其他程序使用。但是,應該可以只使用 NSS 或只使用 PAM,正如我在此頁面中所讀到的。

所以我做了一些實驗,我首先嘗試從中刪除 LDAP nsswitch.conf(並且身份驗證停止工作**,好像只有 pam_ldap 不足以**完成這項工作)。然後我在 NSS 中重新啟用了 LDAP,並將其從 PAM 配置中刪除(這次一切正常,好像pam_ldap沒用,NSS 足以驗證使用者身份)。

有沒有人可以幫助我澄清這一點?提前謝謝了。

更新

我現在剛剛嘗試了一些東西。我再次刪除了pam_ldap所有 pam 配置欄位中的所有條目,並且還shadow: ldapnsswitch.conf. 就像現在在所有系統中一樣,只有行:passwd: ldap filesgroup: ldap filesin nsswitch.conf。嗯……使用 LDAP 使用者登錄完美,這兩行(加號/etc/ldap.conf)足以配置 LDAP 身份驗證。

據我所知,PAM 獨立於 NSS,但我的測試表明並非如此。所以我問自己是否可以完全禁用 NSS 並只使用 PAM?

它有助於在你的腦海中分解這樣的事情:

  • NSS - 一個基於模組的系統,用於控制如何在記憶體中組裝各種作業系統級別的數據庫。這包括(但不限於)passwdgroupshadow(請務必注意)和hosts。UID 查找使用passwd數據庫,GID 查找使用group數據庫。
  • PAM - 一個基於模組的系統,用於允許基於服務的身份驗證和記帳。與 NSS 不同,您不會擴展現有數據庫;PAM 模組可以使用它們喜歡的任何邏輯,儘管 shell 登錄仍然依賴於NSSpasswdgroup數據庫。(您總是需要 UID/GID 查找)

重要的區別是 PAM 自己什麼都不做。如果應用程序沒有連結到 PAM 庫並對其進行呼叫,那麼 PAM 將永遠不會被使用。NSS 是作業系統的核心,數據庫對於作業系統的正常執行來說相當普遍。

現在我們已經解決了這個問題,下面是曲線球:雖然 pam_ldap 是針對 LDAP 進行身份驗證的流行方式,但它不是唯一的方式。

  • 如果shadow指向 中的 ldap 服務/etc/nsswitch.conf,那麼如果這些影子欄位映射的屬性(特別是加密的密碼欄位)在 LDAP 中存在並且允許登錄,則針對影子數據庫執行的任何身份驗證都將成功。

    • 這反過來意味著pam_unix.so可能會導致針對 LDAP 的身份驗證,因為它針對影子數據庫進行身份驗證。(由 NSS 管理,可能指向 LDAP)
  • 如果 PAM 模組對一個守護程序執行呼叫,該守護程序又查詢 LDAP 數據庫(例如pam_sss.so, which hooks sssd),則可能會引用 LDAP。

引用自:https://serverfault.com/questions/538383