了解 PAM 和 NSS
在過去的幾天裡,我設置了一些帶有 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: ldap
從nsswitch.conf
. 就像現在在所有系統中一樣,只有行:passwd: ldap files
和group: ldap files
innsswitch.conf
。嗯……使用 LDAP 使用者登錄完美,這兩行(加號/etc/ldap.conf
)足以配置 LDAP 身份驗證。據我所知,PAM 獨立於 NSS,但我的測試表明並非如此。所以我問自己是否可以完全禁用 NSS 並只使用 PAM?
它有助於在你的腦海中分解這樣的事情:
- NSS - 一個基於模組的系統,用於控制如何在記憶體中組裝各種作業系統級別的數據庫。這包括(但不限於)
passwd
、group
、shadow
(請務必注意)和hosts
。UID 查找使用passwd
數據庫,GID 查找使用group
數據庫。- PAM - 一個基於模組的系統,用於允許基於服務的身份驗證和記帳。與 NSS 不同,您不會擴展現有數據庫;PAM 模組可以使用它們喜歡的任何邏輯,儘管 shell 登錄仍然依賴於NSS
passwd
和group
數據庫。(您總是需要 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 hookssssd
),則可能會引用 LDAP。