我已经在 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 objectClass 中的所有属性:
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
是否需要配置一些东西,而不是读取 userPassword 属性,pam_ldap 尝试对其进行“身份验证”(因此请求由“匿名身份验证”访问规则处理?
pam_ldap
不应该尝试读取 userPassword 值来让您登录——它通过与它检索到的 DN 进行 LDAP 绑定来让您登录。pam_ldap 使用的搜索参数可能过于宽泛,因此它会尝试提取 userPassword,但如果您的 ACL 设置正确(对我来说看起来不错),它将不会在其结果中获得该值。
以防万一您的 ACL不正常(我之前就知道会错过一些愚蠢的明显的东西),这是我的生产 LDAP 环境中的工作 ACL 列表:)
尾随
access to * by * read
很重要,我在您的示例中没有看到它,所以我不确定它是否丢失或只是从您的代码段中省略。该
sync
行用于我的 LDAP 同步服务,如果您不进行复制,则不需要...