管理 LDAP 登錄到沒有 pam_groupdn 的機器:允許多個組
我相信你們中的一些人已經處理過同樣的問題。我希望有人有比我現在做的更好的答案。
因此,您在 LDAP 目錄中有一些使用者,有一天您說“嘿!我可以針對這個東西進行 SSH 身份驗證!” 這很好。
然後有一天你意識到你只希望某些使用者能夠進入一台機器。比如說,開發人員應該只能進入開發框,而不是產品。你做一些Google搜尋並找到
pam_groupdn
你的 LDAP 配置(/etc/ldap.conf
)中的內容,如下所示:pam_groupdn CN=developers,OU=groups,DC=yourcompany
而且,這很好。你為產品創建另一個小組,另一個為 QA 等。也許有一天你有第二個產品開發小組,所以他們有自己的小組。任何。
然後有一天,您擁有一台伺服器,開發人員和 QA 都需要能夠登錄到該伺服器。呃……事實證明,
pam_groupdn
它不需要多個值。你做什麼工作?好吧,如果你沒有想太多,你會說“哦,我會組建一個開發人員和 QA 小組!”。pam_groupdn CN=developers-and-QA,OU=groups,DC=yourcompany
這……不好,但沒關係,對吧?
然後有一天你找到了另一個開發人員,你意識到你需要將他們添加到 15 個組中,因為有、
developers-and-QA
等等。廢話。product1-and-product2``developers-who-have-access-to-prod
必須有更好的方法來做到這一點,對吧?我給 的開發人員發了電子郵件
pam_ldap
,他們說不幸的是,沒有辦法pam_groupdn
獲取多個值(無需修改程式碼)。任何人都想分享他們如何在不借助複製/粘貼的情況下管理 LDAP 中的組?
如果您使用的是 NSS,您可以
AllowGroups
在/etc/ssh/sshd_config
. 如果沒有,您應該查看動態列表:dn: cn=devandqa,ou=groups,dc=company,dc=com cn: devandqa objectClass: groupOfNames labeledURI: ldap:///ou=groups,dc=company,dc=com?memberUid?one?(|(cn=developers)(cn=qa))
類似的東西。您還需要包含架構並包含覆蓋等……所以這是一個開始。
一個可行的解決方案是應用 a
pam_filter
而不是pam_groupdn
in/etc/ldap.conf
:# Filter to AND with uid=%s pam_filter |(member=CN=developers,OU=groups,DC=yourcompany)(member=CN=QA,OU=groups,DC=yourcompany)
“Filter to AND with uid=%s”表示發送到 LDAP 伺服器的過濾器將如下所示:
&(uid=<your username>)(<your pam_filter>)
使用者必須是
developers
or的成員QA
。如果他不是這些組之一的成員,則 LDAP 伺服器的響應中會出現錯誤消息,並且密碼甚至不會發送到 LDAP 伺服器。適用於我的 RHEL 5.8 環境。
對於不同的過濾器變體,請檢查Google的“ldap過濾器語法”……