开启ldap_id_use_start_tls后SSSD新账户登录失败求助
ldap_id_use_start_tls后新账户登录“密码无效”的问题 嘿,这个问题我之前在配置SSSD+LDAP StartTLS的时候也踩过坑!结合你说的情况——关了TLS就一切正常,ldapsearch验证证书也有返回,那问题基本出在SSSD的TLS配置细节或者连接环节的小疏漏上,咱们一步步来捋:
1. 先确认SSSD的TLS配置是否完整
只开ldap_id_use_start_tls = True远远不够,SSSD还需要明确知道信任哪些CA证书,不然会因为无法验证LDAP服务器的证书而拒绝连接,最终就会表现成“密码无效”(其实根本没连上LDAP做密码验证)。你得确保sssd.conf里有这几个关键配置:
ldap_tls_cacert:指定LDAP服务器CA证书的绝对路径,比如ldap_tls_cacert = /etc/pki/tls/certs/your-ca.crtldap_tls_reqcert:控制证书验证的严格程度,测试阶段可以设为try,生产环境建议用demand(如果是自签名证书,暂时可以用allow,但不推荐长期这么做)
举个符合要求的配置片段:
[domain/your-domain] id_provider = ldap auth_provider = ldap ldap_uri = ldap://your-ldap-server ldap_search_base = dc=your,dc=domain ldap_id_use_start_tls = True ldap_tls_cacert = /etc/pki/tls/certs/ca-bundle.crt ldap_tls_reqcert = demand
2. 模拟SSSD的StartTLS连接,验证LDAP端是否正常
用ldapsearch加上强制StartTLS的参数,模拟SSSD的连接逻辑,确认LDAP服务器的StartTLS功能没问题:
ldapsearch -x -ZZ -H ldap://your-ldap-server -b dc=your,dc=domain -D "cn=bind-user,dc=your,dc=domain" -W
这里的-ZZ就是强制使用StartTLS升级连接,如果这个命令能正常返回用户信息,说明LDAP服务器的StartTLS配置是好的,问题就回到SSSD本身。
3. 清空SSSD缓存并查看日志
SSSD会缓存用户和认证信息,启用TLS后旧缓存可能和新连接逻辑冲突,先清空缓存再重启服务:
sss_cache -E systemctl restart sssd
然后去SSSD的日志目录(默认是/var/log/sssd/)找对应域的日志文件,比如sssd_your-domain.log,搜索TLS、error、password这些关键词,大概率能找到具体的错误提示——比如证书验证失败、绑定用户权限不足、连接超时之类的,这些细节是定位问题的关键。
4. 检查LDAP证书的主机名匹配
就算证书本身有效,如果证书的SAN(主题备用名称)或者CN(通用名称)和你在ldap_uri里写的LDAP服务器地址不匹配,SSSD也会拒绝连接。你可以用以下命令查看证书的主机名信息:
openssl x509 -in /path/to/ldap-server-cert.crt -text -noout | grep -A 2 "Subject Alternative Name"
确保输出里包含你的LDAP服务器的IP或者域名。
5. 快速验证PAM/NSS配置(可选)
虽然你关闭TLS后功能正常,说明PAM和NSS配置大概率没问题,但还是可以快速确认下:
- 查看
/etc/nsswitch.conf,确保passwd、group、shadow这几项末尾有sss - 查看
/etc/pam.d/system-auth或者password-auth,确保有auth sufficient pam_sss.so、account sufficient pam_sss.so这类配置
如果按照上面的步骤排查后还是没解决,把SSSD日志里的具体错误信息贴出来,就能更精准地定位问题啦!
内容的提问来源于stack exchange,提问作者user28332

