更改 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 来更改任何帐户的密码。
对于服务器,您首先需要证书,默认文件名为/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 模块支持的其他服务更改密码。