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

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 属性被完全忽略了。我还在 Google 上搜索了几个解决方案,这些解决方案讨论了修改 /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 中哪里可以激活此属性?

答案1

我放弃了考虑 /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) 的成员即可登录。

相关内容