![SLES 10.4->11.4 升级后 PAM+LDAP 不再起作用](https://linux22.com/image/684844/SLES%2010.4-%3E11.4%20%E5%8D%87%E7%BA%A7%E5%90%8E%20PAM%2BLDAP%20%E4%B8%8D%E5%86%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
在我们通过推荐方法(从 DVD 启动)升级到 SLES 11.4 后,通过 LDAP 进行的身份验证已停止运行。遗憾的是,对于 SLES,我无法为您提供任何有意义的日志输出,因为 PAM 和 ldap 客户端都没有提供任何日志输出,而且 pam_debug 在 SLES 上不可用。
我们怀疑这归结为需要用户过滤器 inetOrgPerson。当然,我们在 /etc/ldap.conf 中设置了这个过滤器。它在 10.4 中运行良好,但现在您得到的只是“无效密码”。
使用 tcpdump,我能够确定,与 10.4 不同,ldap 客户端现在首先使用过滤器 inetOrgPerson 查询服务器(该过滤器有效并返回结果),然后随后 (!) 使用过滤器 posixAccount 查询服务器。现在最后一个过滤器不起作用,因为 LDAP 服务器(IBM Tivoli Directory Server)不使用此属性。由于现在使用不正确的用户过滤器查询密码 - 从未根据 LDAP 检查过任何密码(据我所知),因此登录失败。
有没有办法强制 LDAP 客户端坚持使用已配置的用户过滤器 (inetOrgPerson),而不是切换到 (硬编码的?) 不正确的过滤器来查询密码和 shell?问题是,我们不使用密码通过 ssh 登录系统,所以我们只需要这个 PAM+LDAP 工作,这样应用程序就可以检查用户密码 (应用程序没有自己的 LDAP 支持)。因此,我们不需要在 LDAP 中输入用户 shell 和其他通常分配给 posixAccount 的内容。
据我所知,修改生产 LDAP 服务器不是一个选择。
FWIW 测试这个的方法是通过 ssh 进入盒子(使用公钥),然后尝试 su 进入我们自己的用户以获得密码提示。/var/log/messages 只显示“su 失败...”,没有任何进一步的详细信息