Ubuntu系统下XRDP连接Active Directory登录失败问题
首先明确回答你的问题:XRDP对本地用户和AD(通过sssd-ad管理)用户的处理确实存在差异,核心在于认证机制和会话环境配置的不同,不过完全可以通过调整配置解决这个问题。
先还原下你的场景:本地登录时AD和本地用户都正常,但XRDP只允许本地用户登录,AD用户会弹出如下错误:
connecting to sesman ip 127.0.0.1 port 3350
sesman connect ok
sending login info to session manager, please wait...
login failed for display 0
下面是一步步的解决方法:
1. 调整XRDP的PAM认证配置
XRDP默认的PAM规则没有适配AD用户的认证路径,需要修改/etc/pam.d/xrdp-sesman文件:
打开终端执行编辑命令:
sudo nano /etc/pam.d/xrdp-sesman
在文件中添加或调整以下两行(建议放在文件靠前的位置,确保优先使用sssd认证):
auth sufficient pam_sss.so account sufficient pam_sss.so
保存退出(Ctrl+O,回车,Ctrl+X)。
2. 确保AD用户拥有XRDP登录权限
如果系统有访问控制配置,需要明确允许AD用户登录:
编辑/etc/security/access.conf:
sudo nano /etc/security/access.conf
添加一行允许AD用户组登录的规则(替换your-domain为你的实际AD域名):
+ : @your-domain\\domain users : ALL
保存退出。
3. 配置AD用户的家目录(可选但重要)
很多AD用户默认没有自动创建家目录,XRDP会话需要读写家目录才能正常启动,所以要确保家目录存在且权限正确:
- 编辑
/etc/sssd/sssd.conf文件,找到对应AD域的配置段(比如[domain/your-domain]),添加:
create_homedir = True
- 重启sssd服务使配置生效:
sudo systemctl restart sssd
4. 重启XRDP相关服务
所有配置修改完成后,重启XRDP和会话管理服务:
sudo systemctl restart xrdp sudo systemctl restart xrdp-sesman
为什么会有这个差异?
本地用户的认证依赖系统自带的pam_unix模块,XRDP默认配置已经支持;而AD用户的认证是通过sssd提供的pam_sss模块,XRDP默认没有把这个模块加入认证链,导致无法验证AD用户身份。另外AD用户的会话环境(比如家目录、环境变量)也需要额外配置,不像本地用户有默认的系统配置兜底。
如果还是失败,可以查看/var/log/xrdp-sesman.log和/var/log/sssd/sssd.log日志,里面会有具体的错误提示,方便进一步排查。
备注:内容来源于stack exchange,提问作者castlepancake




