Ubuntu 22.04与AD通过SSSD集成后登录失败问题(DC安装2024年2月更新引发)
我之前也碰到过SSSD和AD集成的类似坑,结合你描述的情况,咱们一步步来拆解这个问题:
先明确环境与问题触发点
- 涉及系统:Ubuntu 22.04 + Windows Server 2022域控
- SSSD版本:2.6.3
- 集成方式:通过
realm join完成域加入 - 问题触发:域控安装2024年2月更新后出现,即使回滚DC到更新前检查点也无法解决
核心现象汇总
- AD用户无论是本地登录还是SSH登录,都直接提示
access denied - 但用root执行
id username能正常返回用户UID、GID及组信息,说明NSS层面的用户信息解析是正常的 sssctl domain-list超时无输出,手动在sssd.conf添加ad_server = dc1.dev.domain.com后恢复,但DNS查询本身正常- SSSD的PAM日志(
/var/log/sssd/sssd_pam.log)出现异常报错:[pam] [cache_req_common_process_dp_reply] (0x0040): [CID#2] CR #3: Could not get account info [14]: Bad address
你已尝试的无效操作
- 回滚域控到更新前的检查点
- 退出域、删除计算机账户后重新加入域
针对性排查建议
1. 重点排查SSSD与全局编录(GC)的连接问题
从sssctl domain-status的输出能看到,AD Global Catalog显示not connected——虽然已经发现了dc1服务器,但实际没建立连接。全局编录默认用3268端口,先验证连通性:
nc -zv dc1.dev.domain.com 3268
如果连通正常,建议在sssd.conf的[domain/dev.domain.com]段添加强制指定GC的配置:
ad_gc_server = dc1.dev.domain.com
然后重启SSSD服务,看看是否能解决账户信息获取的问题。
2. 定位“Bad address”错误的根源
这个错误一般和网络通信或数据解析有关,既然NSS层面(id命令)正常,问题大概率出在PAM流程和SSSD的交互上:
- 先清空SSSD缓存并重启服务,排除缓存脏数据的影响:
sss_cache -E systemctl restart sssd - 检查PAM配置文件是否被意外修改,比如
/etc/pam.d/common-auth、/etc/pam.d/common-session,确保包含正确的pam_sss.so配置项,没有被系统更新覆盖。
3. 验证Kerberos票据与时间同步
Kerberos对时间差非常敏感,而且域控更新可能残留了票据或密钥问题:
- 销毁现有Kerberos票据并重新获取主机票据:
kdestroy kinit -k host/$(hostname).dev.domain.com@DEV.DOMAIN.COM - 检查Ubuntu主机与域控的时间同步情况,确保时间差在5分钟以内:
timedatectl status ntpdate -q dc1.dev.domain.com
4. 检查LDAP属性解析的兼容性
你配置了ldap_user_extra_attrs和ldap_user_ssh_public_key指向altSecurityIdentities,有可能域控更新后这个属性的返回格式发生了变化。可以用ldapsearch直接查询验证:
ldapsearch -H ldap://dc1.dev.domain.com -b "DC=dev,DC=domain,DC=com" -D "CN=你的计算机账户名,OU=对应组织单元,DC=dev,DC=domain,DC=com" -W "(&(objectClass=user)(sAMAccountName=测试用户名))" altSecurityIdentities
看看返回的属性值是否符合SSSD的预期格式。
5. 尝试SSSD版本调整
有可能是SSSD 2.6.3和更新后的域控存在兼容性问题,可以尝试安装Ubuntu官方仓库的最新SSSD更新包,或者临时降级到更新前的SSSD版本测试(如果能找到旧版本安装包的话)。
备注:内容来源于stack exchange,提问作者Barmaglot

