OpenLDAP SASL/GSSAPI认证失败求助:Invalid credentials(49)
问题描述
我正尝试配置OpenLDAP使用SASL/GSSAPI(Kerberos)认证,KDC服务器已正常运行,可创建所有Principal和SPN,且kinit命令执行正常。但执行以下命令时认证失败:
ldapsearch -LLL -Y GSSAPI -H ldap://ldap -s "base" -b "dc=example,dc=com"
报错信息如下:
SASL/GSSAPI authentication started ldap_sasl_interactive_bind: Invalid credentials (49) additional info: SASL(-13): authentication failure: GSSAPI Failure: gss_accept_sec_context
OpenLDAP使用默认keytab路径,其内容为:
Keytab name: FILE:/etc/krb5.keytab KVNO Timestamp Principal ---- ----------------- -------------------------------------------------------- 0 04/03/24 03:14:34 ldap/ldap@EXAMPLE.COM 0 04/03/24 03:14:34 ldap/localhost@EXAMPLE.COM
我的票据缓存中存在正确的用户user1:
/ # klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: user1@EXAMPLE.COM Valid starting Expires Service principal 04/03/24 04:04:57 04/03/24 16:04:57 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 04/10/24 04:04:55
请问我遗漏了哪些配置或步骤?
排查解决要点
- 修复Keytab的KVNO异常:当前keytab中的KVNO为0,属于无效值。重新生成keytab,指定正常的KVNO:
生成后用ktadd -k /etc/krb5.keytab -norandkey ldap/ldap@EXAMPLE.COMklist -k /etc/krb5.keytab验证,KVNO应为大于0的整数。 - 确保OpenLDAP进程有权读取keytab:slapd进程通常以
openldap或ldap用户运行,需调整文件权限:chown openldap:openldap /etc/krb5.keytab chmod 600 /etc/krb5.keytab - 验证主机名解析一致性:Kerberos要求SPN中的主机名与实际主机的正向/反向解析一致:
- 检查
ldap主机的正向DNS//etc/hosts条目是否正确 - 确认反向DNS(PTR记录)指向
ldap主机名 - 确保客户端和服务器端的主机名解析结果一致
- 检查
- 检查Kerberos配置文件:确认
/etc/krb5.conf配置正确:[realms]中EXAMPLE.COM的kdc、admin_server指向正确的KDC地址[domain_realm]中添加example.com = EXAMPLE.COM和.example.com = EXAMPLE.COM映射
- 测试服务票据获取:执行以下命令尝试获取LDAP服务的Kerberos票据,验证SPN和keytab有效性:
若失败,需重新创建SPN并生成keytab。kvno ldap/ldap@EXAMPLE.COM - 配置OpenLDAP的SASL参数:
- 确保slapd配置中启用GSSAPI认证,比如通过
olcSaslAuthzId: uid=%u,cn=example,cn=com设置授权规则 - 检查
olcSaslSecProps设置,可临时设置minssf=0排除加密问题干扰 - 确认
olcSaslHost属性设置为ldap(与SPN中的主机名一致)
- 确保slapd配置中启用GSSAPI认证,比如通过
- 查看KDC日志定位细节:在KDC服务器上查看
/var/log/krb5kdc.log,日志中会记录具体的认证失败原因,比如票据过期、SPN不匹配、权限不足等。
内容的提问来源于stack exchange,提问作者Zach Hein
相关产品推荐
相关产品推荐

