在 RHEL 中使用 OpenLDAP 保护用户密码访问

在 RHEL 中使用 OpenLDAP 保护用户密码访问

我在 RHEL 5.4 上设置了一个 OpenLDAP 服务器,并正在配置其他服务器以对其进行身份验证。我已配置并运行了带有 StartTLS 的 ldap 和 ldaps。

在我的客户端机器上,我的/etc/nsswitch.conf包括:

passwd:     files ldap
shadow:     files ldap
group:      files ldap

我可以使用仅在 LDAP 中定义的用户成功登录到客户端(即,它未在 /etc/passwd 中找到它,并且成功向 LDAP 询问用户信息,并根据存储在 LDAP 中的密码哈希进行身份验证)。

我的问题是当我尝试锁定对 LDAP 服务器中的属性的访问时,具体来说,在/etc/openldap/slapd.conf,ldap用户无法再登录:

access to attrs=userpassword
        by self write
        by anonymous auth
        by * none

我正在记录 slapd,看起来(我的理解,如果我错了请纠正我)pam_ldap 正在尝试poxixAccount 对象类中的所有属性:

    filter: (&(objectClass=posixAccount)(uid=cthompson))
    attrs:
  uid
  userPassword
  uidNumber
  gidNumber
  cn
  homeDirectory
  loginShell
  gecos
  description
  objectClass

在我的 openldap 日志中,我没有收到任何访问或 acl 错误,但是我确实收到了:

access_allowed: search access to "uid=cthompson,ou=People,dc=domain,dc=com" "objectClass" requested
access_allowed: search access to "uid=cthompson,ou=People,dc=domain,dc=com" "uid" requested

是否需要进行某些配置,以便 pam_ldap 不读取 userPassword 属性,而是尝试对其进行“身份验证”(因此请求由“匿名身份验证”访问规则处理?

答案1

pam_ldap不应该尝试读取用户密码值来让您登录——它通过使用检索到的 DN 进行 LDAP 绑定来让您登录。

pam_ldap 使用的搜索参数可能过于宽泛并且它会尝试提取用户密码,但如果您的 ACL 设置正确(对我来说看起来不错),它就不会在结果中获取该值。


以防万一你的 ACL不是很好(我以前总是错过一些明显的东西),这是我的生产 LDAP 环境中的有效 ACL 列表 :)

# Access and Security Restrictions
# (Most restrictive entries first)
access to attrs=userPassword
    by self write
    by dn.sub="ou=sync,dc=mydomain,dc=com" read
    by anonymous auth
by users none

access to * by * read

尾随access to * by * read很重要,我在您的例子中没有看到它,所以我不确定它是否缺失或者只是从您的代码片段中省略了。

sync行用于我的 LDAP 同步服务,如果您不进行复制则没有必要...

相关内容