这看起来应该很简单,但如果真的如此,那我肯定遗漏了什么。我有一个 Linux NIS 主控,我想从中更改用户的密码(在忘记密码或类似情况的情况下),但我做不到。
一些细节:我运行的是 Scientific Linux 6.4,带有 ypserv-2.19-26、ypbind-1.20.4-30 和 yp-tools-2.9-12。NIS 配置为使用/etc/yp/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,因为我们有一些 Solaris 客户端不支持 sha512。)
如果我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.
但这要求任何需要重置密码的系统管理员知道(或从我们锁定的密码保险箱中查找)系统的根密码,这是我想要避免的情况。
那么我需要如何配置主机才能允许我们更改用户密码,而不必每次都输入系统的根密码?
答案1
正如您所发现的,您无法passwd
以 NIS 客户端上的 root 身份更改 NIS 服务器上的用户密码。这确实是常识性的安全问题。
类似地,您发现 yppasswd 要求您输入 root 密码(在 NIS 服务器上),然后它才会允许您更改用户密码。这是额外的安全保障,前提是您必须是 NIS 管理员(NIS 服务器上的 root)才能更改其他人的密码。
不幸的是,这种安全保障并不是您想要的,因此 yppasswd 会在这里成为阻碍。
我认为这实际上是一个相对较新的东西,或者是一个特定于操作系统的变体 - 在我使用 Sun Admin 的日子里,当我定期处理 NIS 时,
yppasswd
如果您是 NIS 服务器上的 root 权限,我就会信任您……
由于您的要求(允许授权管理员更改 NIS 密码),我建议您编写一个 shell 脚本(或您喜欢的语言),直接编辑 NIS 映射并重建/推送它们。
您可以通过一点创造性的sed
工作来完成此操作,然后授予您的管理员使用 运行该脚本的能力sudo
。
但最终你可能还是会考虑放弃 NIS (LDAP 成为替代 NIS 的新热点,基本上是一个直接替代品,并且更容易管理)。