Ubuntu

LDAP 完全忽略 ldap.conf 中的 pam_groupdn 和 pam_filter 屬性

  • December 5, 2017

作業系統: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

  1. pam_authc_search
  2. 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) 的成員登錄。

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