本地拒絕通過 LDAP 驗證的使用者登錄
我有一台可供 1000 多個使用者使用的 RedHat Linux 伺服器
使用者名通過 LDAP 協議進入伺服器,因此登錄身份驗證來自 LDAP
我的問題:是否可以阻止使用者在本地機器上登錄,而使用者名來自 LDAP?
如今,身份驗證邏輯通常由 PAM 處理。我的猜測是您應該能夠在 PAM 的配置文件中進行設置(在我的情況下,在 中
/etc/pam.d
)。常見的身份驗證邏輯儲存在
common-auth
. 在你的情況下,我猜你應該有這樣的東西:auth [success=2 default=ignore] pam_unix.so nullok_secure auth [success=1 default=ignore] pam_ldap.so use_first_pass auth requisite pam_deny.so auth required pam_permit.so
…或者可能更簡單一些,例如:
auth sufficient pam_unix.so nullok_secure auth sufficient pam_ldap.so use_first_pass
…取決於與標準 UNIX 身份驗證相比,LDAP 是第一個還是第二個來源(考慮到它也參與其中)。
現在,如果您想在一台機器上禁用 LDAP 身份驗證,或者拒絕訪問 LDAP 身份驗證的使用者,您所要做的就是從 PAM 的配置中刪除該源,並讓它僅依賴於 UNIX 身份驗證:
auth [success=1 default=ignore] pam_unix.so nullok_secure auth requisite pam_deny.so auth required pam_permit.so
- 成功時
pam_unix.so
,從鏈的其餘部分跳過 1 個元素 (pam_deny.so
),並評估下一個元素 (pam_permit.so
)。這意味著當 UNIX 身份驗證失敗時,使用者會被拋出pam_deny.so
,從而導致身份驗證失敗。當它成功時,它會到達pam_permit.so
,並被授予對系統的訪問權限。- 這裡不涉及LDAP,這意味著任何未儲存在其中的使用者
/etc/passwd
都無法訪問系統。現在,如果您想專門阻止 LDAP 使用者…
auth [success=die] pam_ldap.so auth sufficient pam_unix.so
- 成功時
pam_ldap.so
,返回失敗程式碼並終止鏈。如果失敗,pam_unix.so
則足以訪問系統。- 只要 LDAP 憑據匹配,這將中斷所有 PAM 身份驗證。UNIX 使用者仍然可以訪問系統。
當然,還有許多其他方法可以配置 PAM,有些方法可能比我剛才給出的方法更好/更有效。有關這方面的更多資訊,請查看此頁面。不過請注意:在您開始使用 PAM 的配置之前,請確保您的
root
終端在某處安全執行。如果您弄亂了身份驗證邏輯,您將非常樂意/etc/pam.d
再次訪問並恢復您的更改:)另一個注意事項:雖然 PAM 處理身份驗證(和其他一些東西),但名稱解析由 NSS(名稱服務交換機)處理,其配置可以在
/etc/nsswitch.conf
. 如果您將 LDAP 保留在此文件中,那麼系統仍然會知道這些 LDAP 使用者,但不會讓他們進入。基本上,它允許系統將 UID 與名稱匹配,例如當您列出目錄 (ls -l
) 並獲取文件的所有者。您也可以通過編輯 NSS 配置來刪除此 LDAP 名稱源,但如果您的使用者實際上擁有機器上可用的文件,我不建議您這樣做。