配置“登录到”限制后,LDAP无法登录Active Directory用户
配置“登录到”限制后,LDAP无法登录Active Directory用户
嘿,这个问题我之前帮同事排查过好几次!你看到的data 52e错误虽然写着“无效凭证”,但这完全是微软的误导性提示——真实原因是你给AD用户设置的“登录到”限制里,没把你的Linux主机加进去!AD的这个规则会校验登录请求的来源主机,发现你的Linux机器不在允许列表里,就故意返回了这个容易让人跑偏的52e错误(懂的都懂,微软老操作了😅)。
给你一步步理清楚解决办法:
第一步:把Linux主机加到AD用户的允许登录列表
先解决最核心的权限问题:
- 打开AD用户和计算机(ADUC)控制台,找到你要登录的
user_test用户 - 右键点属性,切到「账户」标签页,点击「登录到」按钮
- 选择「下列计算机」,然后点「添加」,输入你的Linux主机的完整AD计算机名——就是你用
hostnamectl设置的那个<hostname>.<domain_name>,比如my-linux-host.example.com - 确定保存后,等个1-2分钟让AD同步配置(有时候AD的复制会慢几秒)
第二步:改用SASL绑定替代简单LDAP绑定
你之前用的ldapsearch -x是「简单绑定」,这种方式不会把Linux主机的AD身份告诉AD服务器,AD根本不知道这个请求来自哪台机器,自然直接拒绝。你得用AD认可的SASL/GSSAPI绑定(也就是Kerberos认证),这样AD能识别出请求来源的Linux主机是否在允许列表里。
把你的ldapsearch命令改成这样:
# 先获取用户的Kerberos票据 kinit user_test@<你的域名> # 用SASL绑定执行LDAP搜索 ldapsearch -Y GSSAPI -H <AD服务器地址> -b "cn=<dc1>,cn=<dc2>"
解释下:-Y GSSAPI指定用Kerberos做安全绑定,不需要再传-D和-w了,因为Kerberos票据已经包含了用户和主机的身份信息,AD能直接校验。
第三步:确保SSSD配置适配AD的登录限制
因为你已经用realm把Linux加入了AD域,SSSD负责处理域用户的系统登录(比如su - user_test或者SSH登录),得让SSSD遵守AD的“登录到”规则:
- 打开
/etc/sssd/sssd.conf,找到[domain/你的域名]这段,确保有下面这些配置项:ad_gpo_access_control = enforcing ad_gpo_map_interactive = +gssapi krb5_store_password_if_offline = True - 保存后重启SSSD服务:
sudo systemctl restart sssd
这样系统级的PAM/NSS认证也会正确校验AD的登录限制,不会再出问题。
最后验证一下
做完上面的步骤,你可以用两个方法测试:
- 先
kinit user_test,再执行修改后的ldapsearch,应该能正常返回LDAP结果 - 直接在Linux上执行
su - user_test,如果能顺利切换到域用户,说明系统登录也正常了
备注:内容来源于stack exchange,提问作者hamed saadati
相关产品推荐
相关产品推荐

