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

OpenLDAP用户认证失败(错误码49)排查求助

OpenLDAP用户认证失败(错误码49)排查求助

看起来你已经做了不少基础排查工作——确认用户存在、手动重置密码,但还是碰到了ldap_bind: Invalid credentials (49)这个头疼的错误,咱们一步步拆解可能的问题点:

  • 先排查密码存储与匹配的细节
    你用slappasswd -s tree生成的是SSHA哈希(从userPassword::开头的base64编码能看出来),格式本身没问题,但可以做两个验证:

    1. 打开你生成的test.ldif,检查userPassword的值是否和slappasswd -s tree直接输出的完全一致,避免变量传递时出现截断或乱码;
    2. 临时改用明文密码测试(仅用于排查,不要在生产环境这么做):修改LDIF里的userPassword为{CLEARTEXT}tree,执行ldapmodify后再用ldapwhoami测试。如果成功,说明哈希生成或存储环节出了问题;如果还是失败,那问题不在密码本身。
  • 检查ACL配置的潜在问题
    你的ACL规则看起来逻辑没问题:{1}to attrs=userPassword by self write by anonymous auth by * none允许匿名用户尝试认证,但可以再确认两点:

    1. 有没有其他更高优先级的ACL规则覆盖了这条?比如第一条{0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage是给root权限的,不会影响普通用户,但可以检查是否有遗漏的ACL条目;
    2. 尝试用匿名用户执行ldapsearch -x -b "uid=testuser,ou=people,dc=foo,dc=bar,dc=nl" userPassword,正常应该返回no such attribute或者权限不足,但如果连这个查询都报错,可能ACL的权限控制有问题。
  • 切换连接方式测试
    你现在用的是ldapi:///Unix套接字连接,有些OpenLDAP配置会对本地套接字连接有额外限制。试试用TCP连接测试:

    ldapwhoami -x -D "uid=testuser,ou=people,dc=foo,dc=bar,dc=nl" -w tree -H ldap://localhost
    

    如果TCP连接能成功,说明Unix套接字的配置有问题(比如socket文件权限、slapd的socket路径配置错误等)。

  • 查看slapd日志获取精准错误信息
    错误码49只是笼统的“无效凭据”,但slapd的日志会给出具体原因——比如是密码不匹配、用户找不到,还是权限不足。
    去查看slapd的日志文件(通常在/var/log/slapd.log或/var/log/openldap/slapd.log),执行ldapwhoami测试后,看日志里的详细报错,这是最有效的排查手段。

  • 确认用户对象的属性完整性
    你的用户对象包含person、inetOrgPerson、posixAccount三个objectClass,检查所有必填属性是否都已设置:

    • inetOrgPerson需要cn、sn(你已经有了);
    • posixAccount需要uidNumber、gidNumber、homeDirectory(这些也都配置了);
      可以用ldapsearch查询用户的所有属性,确保没有缺失必填项。

如果以上步骤都没解决问题,可以提供slapd的日志片段,或者olcDatabase的完整配置,这样能更精准地定位问题。

备注:内容来源于stack exchange,提问作者XGDragon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 13:17:58