我在这里看到了最奇怪的事情。我有几台 RHEL3、4 和 5 机器,它们通过 Kerberos 验证用户凭据,并使用 Active Directory 域控制器作为其 KDC。
这对我的所有用户都有效,除了一个。一无法登录 RHEL3 Linux 机器的帐户并在那里产生以下错误:
May 31 13:53:19 mybox sshd(pam_unix)[7186]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.1 user=user
May 31 13:53:20 mybox sshd[7186]: pam_krb5: TGT verification failed for `user'
May 31 13:53:20 mybox sshd[7186]: pam_krb5: authentication fails for `user'
其他帐户(例如我自己的帐户)都没有问题:
May 31 17:25:30 mybox sshd(pam_unix)[12913]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.1 user=myuser
May 31 17:25:31 mybox sshd[12913]: pam_krb5: TGT for myuser successfully verified
May 31 17:25:31 mybox sshd[12913]: pam_krb5: authentication succeeds for `myuser'
May 31 17:25:31 mybox sshd(pam_unix)[12915]: session opened for user myuser by (uid=0)
如您所见,TGT 验证失败。这只发生在这个特定帐户上,不会发生在任何其他帐户上。
失败的用户帐户的密码已被重置,我检查了 Active Directory 中的两个用户对象,但没有发现任何异常。
如果我将失败的用户帐户登录到 RHEL4 或 5 框中,则不会出现问题,因此它一定是 RHEL3 特有的,但事实上只有一个帐户受到此影响,这让我很困惑。也许有人以前见过这种情况?
答案1
你能kinit
作为工作用户和非工作用户从 Unix 机器上做到这一点吗?如果可以,那么klist
每个用户怎么说?
完成后,尝试使用其中一张票,然后看看 klist 对每张票显示的内容。
如果kinit
有效,并且您获得的票也能起作用(例如,尝试再次 ssh 回到盒子里),那么确实有些奇怪,而且我不确定在无法触摸盒子的情况下下一步该去哪里。
答案2
我会毫不羞愧地回答我自己的问题,因为我们找到了答案。未能通过身份验证的用户对象中含有某种证书,这使得该对象与其他用户对象相比相当大。
Kerberos 是 Active Directory 的一个组件,它有一个名为“MaxTokenSize”的属性。默认情况下,它设置为 12,000 字节。在旧版本的 Active Directory 中,它是 8,000 字节。大多数情况下,您会看到人们遇到此问题,是因为他们将用户放入了太多组(大约 70 到 100 个组)。根据这篇 TechNet 文章。
我无法找到任何讨论与运行 Linux 的客户端相关的此问题的来源,但我确实找到了本网站关于 OpenAFS(使用 Kerberos),讨论了使用 AD 的 Kerberos 时票证过大的问题。
长话短说,我遇到麻烦的用户不属于很多组,但正如所说,他的 LDAP 对象中确实有一个巨大的证书,这使得它非常大。
删除证书会使用户对象缩小到足以在 RHEL3 上重新启用 Kerberos 身份验证。