我有一个 Debian 7.7 系统,我尝试将其配置为使用 Kerberos 和 NIS,两者均由 Active Directory 服务器提供服务。
我设置了 kerberos,这样我就可以kinit
从 AD 服务器获取一组凭据。
我已经设置了 NIS,这样我就可以su - $USER
连接到 AD 用户并且一切正常。
我只是无法以用户身份登录。
当我通过控制台登录时,我在 auth.log 中收到以下日志:
Nov 5 10:22:41 debian login[3888]: pam_krb5(login:auth): pam_sm_authenticate: entry
Nov 5 10:22:45 debian login[3888]: pam_krb5(login:auth): (user dmackintosh) attempting authentication as dmackintosh@AD.$ZONE
Nov 5 10:22:45 debian login[3888]: pam_krb5(login:auth): user dmackintosh authenticated as dmackintosh@AD.$ZONE
Nov 5 10:22:45 debian login[3888]: pam_krb5(login:auth): (user dmackintosh) temporarily storing credentials in /tmp/krb5cc_pam_54ruC8
Nov 5 10:22:45 debian login[3888]: pam_krb5(login:auth): pam_sm_authenticate: exit (success)
Nov 5 10:22:45 debian login[3888]: Authentication failure
当我通过 ssh 登录时,我得到:
Nov 5 10:24:00 debian sshd[7641]: pam_krb5(sshd:auth): pam_sm_authenticate: entry (nonull)
Nov 5 10:24:00 debian sshd[7641]: pam_krb5(sshd:auth): (user dmackintosh) attempting authentication as dmackintosh@AD.$ZONE
Nov 5 10:24:00 debian sshd[7641]: pam_krb5(sshd:auth): user dmackintosh authenticated as dmackintosh@AD.$ZONE
Nov 5 10:24:00 debian sshd[7641]: pam_krb5(sshd:auth): (user dmackintosh) temporarily storing credentials in /tmp/krb5cc_pam_NQ9vhz
Nov 5 10:24:00 debian sshd[7641]: pam_krb5(sshd:auth): pam_sm_authenticate: exit (success)
Nov 5 10:24:00 debian sshd[7641]: Failed password for dmackintosh from 10.8.0.21 port 47234 ssh2
Nov 5 10:24:00 debian sshd[7641]: fatal: Access denied for user dmackintosh by PAM account configuration [preauth]
在这两种情况下,登录尝试都会立即被踢出。我知道密码是正确的,因为 A) 它通过了 kinit 测试,B) 如果我故意输入错误的密码,我会在再次提示输入密码之前等待“您的密码是错误的”。
PAM 的配置几乎与 /usr/share/doc/libpam-krb5/README.Debian 一样。仅添加了 PAM 调试语句。
SSH 已更改为启用 GSSAPIAuthentication 和 GSSAPICleanupCredentials 选项,但这似乎没有什么区别。
我在 CentOS 5 和 6 上工作,所以这一定是 debian 系统上某个地方的配置问题。
我知道互联网希望我使用 LDAP 而不是 NIS 来完成此操作,但由于“原因”,我必须保留 NIS。
更新:我发现如果 /etc/shadow 中有用户的条目,它就可以工作。这完全违背了使用 NIS 的目的,但无论如何。这让我相信这是我的 /etc/nsswitch.conf 文件的问题,如下所示:
passwd: files nis
group: files nis
shadow: files nis
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
automount: nis
更新2:我发现如果没有 /etc/shadow 中的额外信息,getent shadow
则不会返回从ypcat shadow
.我还发现 Gentoo 和 Ubuntu 也受到类似的影响; RH 系列发行版似乎并非如此,即使 RH 系列系统不通过 .NET 返回影子 NIS 映射的内容getent
。
答案1
答案是启用broken_shadow
pam_unix 的功能。
在 中/etc/pam.d/common-account
,找到 pam_unix 行并将其添加broken_shadow
到其末尾:
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so broken_shadow
描述:
某些网络设置在加密密码字段中包含“x”,但没有影子信息。发生这种情况时,pam_unix 会导致帐户管理失败,因为它无法读取此信息。 “brokenshadow”选项假定读取信息时出现错误意味着该信息不存在,并允许用户登录。