这似乎应该很简单,但如果是这样,我一定会遗漏一些东西。我有一个 Linux NIS 主机,我希望能够从中更改用户的密码(在忘记密码和类似情况的情况下),但我不能。
一些细节:我正在运行 Scientific Linux 6.4,带有 ypserv-2.19-26、ypbind-1.20.4-30 和 yp-tools-2.9-12。NIS 被配置为使用/etc/yp/passwd
它的 passwd 映射(即不是系统 passwd 文件)。系统是它自己的客户端并ypwhich
返回“localhost”。
因为非特权用户不应该登录到 NIS 主机,我们在 中设置了以下内容/etc/nsswitch.conf
:
passwd: files compat
这在结束时/etc/passwd
:
+::::::/bin/false
此外,/etc/pam.d/passwd
还包含标准 RHEL 指令:
password substack system-auth
/etc/pam.d/system-auth
是指向 的符号链接/etc/pam.d/system-auth-ac
,其中包含:
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so md5 shadow nis nullok try_first_pass use_authtok
password required pam_deny.so
(附带说明一下,我们使用 md5 而不是 sha512,因为我们有一些不支持 sha512 的 Solaris 客户端。)
如果我passwd
以 root 身份运行,它会提示我输入新密码,但无法更改它:
$ sudo passwd phil
Changing password for user phil.
New password:
Retype new password:
NIS password could not be changed.
passwd: Authentication token manipulation error
日志文件 ( /var/log/secure
) 没有帮助:
passwd: pam_unix(passwd:chauthtok): password not changed for phil on ypmaster.domain.tld
相反,如果我运行yppasswd
,我可以更改密码:
$ sudo yppasswd phil
Changing NIS account information for phil on ypmaster.domain.tld.
Please enter root password:
Changing NIS password for phil on ypmaster.domain.tld.
Please enter new password:
Please retype new password:
The NIS password has been changed on ypmaster.domain.tld.
但这需要任何需要重置密码的系统管理员知道(或从我们锁定的密码保险箱中查找)系统的 root 密码,这是我想避免的情况。
那么我需要如何配置master来允许我们更改用户密码而不必每次都输入系统的root密码呢?
正如您所发现的,您不能
passwd
在 NIS 客户端上以 root 用户身份更改 NIS 服务器上的用户密码。这真的是常识安全。同样,您发现 yppasswd 需要 root 密码(在 NIS 服务器上)才能让您更改用户密码。这是基于您应该是 NIS 管理员(NIS 服务器上的根)来更改其他人的密码这一事实的额外安全性。
不幸的是,这种安全性不是您想要的,所以 yppasswd 在这里遇到了麻烦。
由于您的要求(让授权管理员更改 NIS 密码),我建议您编写一个直接编辑 NIS 映射并重建/推送它们的 shell 脚本(或您喜欢的语言)。
您可以通过一些创造性的工作来做到这一点
sed
,然后授予您的管理员使用sudo
.最终,尽管您可能想要考虑远离 NIS(LDAP 是替代 NIS 的新热点,几乎是一种直接替代,而且更容易管理)。