13. 使用 rpasswd 更改密码

更改 NIS 密码的标准方法是调用 yppasswd,在某些系统上,这只是 passwd 的别名。此命令使用 yppasswd 协议,并且需要在 NIS 主服务器上运行 rpc.yppasswdd 进程。该协议的缺点是旧密码将通过网络以明文形式发送。如果密码更改成功,这还不是那么有问题的。在这种情况下,旧密码将被替换为新密码。但是,如果密码更改失败,攻击者可以使用明文密码以该用户身份登录。更糟糕的是:如果系统管理员更改另一个用户的 NIS 密码,则 NIS 主服务器的 root 密码将通过网络以明文形式传输。而这个密码不会被更改。

一种解决方案是不使用 yppasswd 来更改密码。相反,一个很好的替代方案是来自pwdutils软件包的 rpasswd 命令。

  Site            Directory                          File Name

  ftp.kernel.org  /pub/linux/utils/net/NIS           pwdutils-2.3.tar.gz
  ftp.suse.com    /pub/people/kukuk/pam/pam_pwcheck  pam_pwcheck-2.2.tar.bz2
  ftp.suse.com    /pub/people/kukuk/pam/pam_unix2    pam_unix2-1.16.tar.bz2

rpasswd 通过安全的 SSL 连接在远程服务器上更改用户帐户的密码。普通用户可能只能更改他们自己帐户的密码,如果用户知道管理员帐户的密码(目前是服务器上的 root 密码),他可以使用 -a 选项调用 rpasswd 来更改任何帐户的密码。

13.1. 服务器配置

对于服务器,您首先需要证书,默认文件名为/etc/rpasswdd.pem。可以使用以下命令创建该文件
openssl req -new -x509 -nodes -days 730 -out /etc/rpasswdd.pem -keyout /etc/rpasswdd.pem

还需要 rpasswdd 的 PAM 配置文件。如果 NIS 帐户存储在/etc/passwd中,以下是一个可用的配置的良好起点
#%PAM-1.0
auth     required       pam_unix2.so
account  required       pam_unix2.so
password required       pam_pwcheck.so
password required       pam_unix2.so    use_first_pass use_authtok
password required       pam_make.so     /var/yp
session  required       pam_unix2.so

如果 NIS 密码映射的源存储在另一个位置(例如在 /etc/yp 中),则nisdirpam_unix2 的选项可用于在另一个位置查找源文件
#%PAM-1.0
auth     required       pam_unix2.so
account  required       pam_unix2.so
password required       pam_pwcheck.so  nisdir=/etc/yp
password required       pam_unix2.so    nisdir=/etc/yp use_first_pass use_authtok
password required       pam_make.so     /var/yp
session  required       pam_unix2.so

现在在 NIS 主服务器上启动 rpasswdd 守护进程。

由于密码更改是通过 PAM 模块完成的,因此 rpasswdd 还能够允许为 NIS+、LDAP 或 PAM 模块支持的其他服务更改密码。

13.2. 客户端配置

在每个客户端上,只需要配置文件/etc/rpasswd.conf,其中包含服务器的名称。如果服务器不在默认端口上运行,则也可以在此处提及正确的端口

# rpasswdd runs on master.example.com
server master.example.com
# Port 774 is the default port
port 774