You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenLDAP升级至2.4版本后非管理员用户认证失败(Error 49)求助

解决OpenLDAP 2.4迁移后普通用户绑定失败(Error 49)的问题

这问题我之前帮不少人排查过,核心原因是缺少允许普通用户访问自身userPassword属性的ACL访问控制规则——LDAP认证的前提是用户能读取自己的密码属性来完成凭据验证,而你当前的配置完全没覆盖这个场景。

问题根源分析

从你贴出的olcDatabase={-1}frontend.ldif配置和slapd日志来看:
你现有的ACL规则只处理了三类场景:

  • 外部系统管理员(gidNumber=0+uidNumber=0,cn=peercred,...)拥有全量管理权限
  • 根DN(dn.exact="")允许所有主体读取
  • 子模式(cn=Subschema)允许所有主体读取

但完全没有针对普通用户认证的规则,日志里的这条信息直接点明了问题:

5ab4a590 => slap_access_allowed: auth access denied by none(=0)

当普通用户尝试绑定(需要访问自己的userPassword)时,没有匹配到任何允许的ACL规则,直接被拒绝。

具体解决方案

你需要添加一条ACL规则,允许用户自身对userPassword进行认证访问,同时禁止其他用户查看该属性(符合LDAP安全原则)。

方法1:通过ldapmodify动态添加推荐方式,避免直接编辑配置文件出错

  1. 创建一个名为add-user-acl.ldif的文件,内容如下:
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to attrs=userPassword by self auth by * none
  1. 执行以下命令应用配置(用外部管理员身份修改,无需输入密码):
ldapmodify -Y EXTERNAL -H ldapi:/// -f add-user-acl.ldif

方法2:直接编辑slapd配置文件不推荐,可能导致配置损坏

如果你确认要直接编辑/etc/ldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif,在现有olcAccess规则后添加:

olcAccess: {3}to attrs=userPassword by self auth by * none

添加后重启slapd服务生效:

systemctl restart slapd

验证修复效果

用普通用户测试绑定:

ldapwhoami -x -D cn=user2,dc=mydomain,dc=com -W

如果返回dn:cn=user2,dc=mydomain,dc=com,说明绑定成功。

额外注意事项

  • 如果你的LDAP业务数据库(比如olcDatabase={1}mdb.ldif)有单独的ACL规则,需要确保这些规则没有覆盖frontend的全局规则,避免权限冲突。
  • 可以验证用户的userPassword属性是否用LDAP支持的加密方式存储(比如SSHA),ldappasswd默认会用合适的加密方式,也可以通过以下命令确认:
    ldapsearch -x -D cn=admin,dc=mydomain,dc=com -W -b cn=user2,dc=mydomain,dc=com userPassword
    

内容的提问来源于stack exchange,提问作者Cozzamara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:47:40