RH6下PAM LDAP认证同名异UID用户登录问题求助
看起来你遇到的是RH6系统中同名但UID不同的本地/LDAP用户在PAM认证场景下的典型冲突问题——当本地用户存在时,PAM的多认证源配置让两种密码都能生效,但删除本地用户后,系统无法正确切换到LDAP用户的认证/会话流程。下面是一步步的排查和解决方法:
1. 先定位问题根源
首先明确几个核心点:
- RH6的
nsswitch.conf控制用户信息的查找顺序,如果你的配置是passwd: files ldap,系统会优先读取本地/etc/passwd,有本地用户时忽略LDAP;删除本地用户后才会去查LDAP。 - 你的PAM配置(
system-auth/password-auth)里的auth段应该同时启用了pam_unix.so和pam_ldap.so且标记为sufficient,所以有本地用户时两种密码都能通过认证;但删除本地用户后,pam_unix.so会因找不到用户返回失败,此时需要pam_ldap.so正常接手,异常通常出在这里的会话创建、用户属性读取环节。
2. 调整nsswitch.conf确保LDAP用户能被正确识别
编辑/etc/nsswitch.conf,确认用户组相关的配置:
passwd: files ldap group: files ldap shadow: files ldap
如果你希望优先使用LDAP用户(即使有本地同名用户),可以改成
ldap files,但根据你的场景,保持files ldap即可——删除本地用户后自动切换到LDAP。
执行getent passwd ssosers测试:删除本地用户后,这个命令应该返回LDAP中该用户的完整信息(包括UID、家目录、shell等)。如果返回空,说明LDAP客户端配置有问题,检查/etc/ldap.conf或/etc/openldap/ldap.conf中的base、uri、binddn等参数是否正确,确保能连接到LDAP服务器。
3. 修正PAM配置,完善LDAP用户的会话流程
打开/etc/pam.d/system-auth和/etc/pam.d/password-auth,调整以下段:
认证段(Auth):保持现有逻辑,但确保优先级正确
auth sufficient pam_unix.so nullok try_first_pass auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so
这里
sufficient表示只要其中一个模块认证通过就放行,符合你原来“两种密码都能登录”的需求;删除本地用户后,pam_unix.so失败,自动走pam_ldap.so。
会话段(Session):添加LDAP支持和自动创建家目录
很多时候删除本地用户后登录失败,是因为LDAP用户的家目录不存在,需要添加pam_mkhomedir.so自动创建:
session optional pam_keyinit.so revoke session required pam_limits.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_ldap.so # 启用LDAP会话支持 session optional pam_mkhomedir.so skel=/etc/skel umask=0022 # 自动创建家目录
密码段(Password):确保LDAP密码修改能正常同步
如果需要支持修改LDAP密码,添加:
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_ldap.so use_authtok password required pam_deny.so
4. 验证LDAP用户属性完整性
确保LDAP中的ssosers用户具备以下必填属性:
uidNumber:唯一UID(和本地用户不同是允许的)gidNumber:对应的GIDhomeDirectory:家目录路径(比如/home/ssosers)loginShell:登录shell(比如/bin/bash)
这些属性缺失会导致系统无法正确识别LDAP用户,进而登录失败。
5. 排查日志定位剩余问题
如果还是异常,查看/var/log/secure日志,里面会记录PAM认证的详细错误信息:
- 比如
pam_unix(su-l:auth): authentication failure说明pam_unix找不到用户,但pam_ldap是否尝试认证? - 比如
pam_mkhomedir(sshd:session): Failed to create directory /home/ssosers说明权限问题,需要检查/home目录的权限。
另外可以临时关闭SELinux(setenforce 0)测试,如果能登录,说明SELinux阻止了LDAP认证或家目录创建,需要添加相应的SELinux规则(比如setsebool -P allow_ldap_home_dirs on)。
内容的提问来源于stack exchange,提问作者LucaP

