LDAP 完全忽略 ldap.conf 中的 pam_groupdn 和 pam_filter 屬性
作業系統:Ubuntu 17.10
我目前在 Ubuntu 上安裝了 ldap 以訪問 ldap 伺服器。我像許多建議的教程一樣配置了 nls、pam 和 ldap。所以它起作用了,但現在任何 ldap 使用者都可以登錄系統。因此我想用屬性限制對系統的訪問
pam_groupdn
或者
pam_filter
在 /etc/ldap.conf 中(備註 pam_ldap.conf 在系統上不存在,它也沒有幫助創建)
例如,當我這樣做時
ldapsearch -x -H ldaps://ldap.domain.local:636 -b "cn=users,dc=ldap,dc=mydomain,dc=local" uid="someuser"
我在這個例子中得到了結果
memberOf: cn=users,cn=groups,cd=ldap,dc=domain,dc=local memberOf: cn=lindev,cn=groups,cd=ldap,dc=domain,dc=local
因此,我的過濾器應該包含 cn 的使用者和用於訪問系統的 lindev。首先,我嘗試像這樣在 /etc/ldap.conf 中設置一個過濾器
pam_filter &((member=cn=lindev,dc=ldap,dc=domain,dc=local)(member=cn=lindev,dc=ldap,dc=domain,dc=local))
我現在切換到 nslcd 的調試模式
sudo service nslcd stop sudo nslcd -d
來控制輸出。不幸的是,一旦使用了定義的過濾器。它只取 binddn 的值(也在 /etc/ldap.conf 和 /etc/nslcd.conf 中配置)
binddn cn=users,dc=ldap,dc=domain,dc=local
事實上,使用者的 uid 被粘貼在 nslcd 的輸出中,然後進行比較,但從未應用過濾器。似乎是 /etc/ldap.conf 的這些 pam_xyz 屬性被完全忽略了。我還搜尋了幾個解決方案,這些解決方案涉及修改 /etc/pam.d 中的文件,尤其是文件 common-account,如下所示:
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so account requisite pam_deny.so account required pam_permit.so account [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad] pam_ldap.so minimum_uid=1000
網際網路上有很多提示來調整這個文件以及文件 common-account、common-auth、common-password 和 common-session。我嘗試了所有提示,但問題仍然存在。客戶端在伺服器上進行的查詢中根本沒有應用過濾器。
因此,我的問題是我可以在 /etc/ldap.conf 中的何處啟動此屬性?
我放棄了考慮 /etc/ldap.conf 中的 pam_filter 和 pam_groupdn 屬性。/etc/nslcd.conf 中有兩個選項可以做同樣的事情(根據 https://arthurdejong.org/nss-pam-ldapd/nslcd.conf.5)
- pam_authc_search
- pam_authz_search
在文件之後 authz 比 authc 稍微複雜一點。就我的目的而言,採用變體 authc 就足夠了。
我的方法是首先使用 ldapsearch 生成一個有效的搜尋過濾器:
ldapsearch -x -H ldaps://ldap.domain.local -b "dc=ldap,dc=domain,dc=local" "(&(memberUid=loginName)(|(cn=sudogroup)(cn=lindev)))"
過濾器檢查使用者是否真正屬於組 sudogroup 和 lindev。
現在我準備將這些東西粘貼到 /etc/nslcd.conf 中:
pam_authc_search (&(memberUid=$username)(|(cn=sudogroup)(cn=lindev)))
達到的目標:我現在只能使用 sudogroup 和 Linux 開發組 (lindev) 的成員登錄。