13. rpasswd でパスワードを変更する

NIS パスワードを変更する標準的な方法は yppasswd を呼ぶことで、 これはシステムによっては単に passwd のエイリアスになっていることもあります。 このコマンドは yppasswd プロトコルを用いるので、 NIS マスターサーバで rpc.yppasswdd プロセスが動作している必要があります。 このプロトコルには、 古いパスワードがネットワークに平文で流れてしまうという欠点があります。 パスワードの変更に成功すれば、これはそれほど問題ではありません。 この場合古いパスワードは新しいパスワードに置き換わるからです。 しかしパスワードの変更に失敗すると、 攻撃者はこの平文のパスワードを用い、 そのユーザとしてログインできてしまいます。 さらにまずいことには、 システム管理者が他のユーザの NIS パスワードを変更する場合、 NIS マスターサーバの root パスワードがネットワークを平文で流れてしまいます。 そしてこのパスワードは変更されないのです。

解決策のひとつは、パスワードの変更に yppasswd を用いないことです。 代わりに使える良いプログラムが、 pwdutils パッケージに入っている rpasswd です。

Site and DirectoryFilename
ftp.kernel.org:/pub/linux/utils/net/NISpwutils-2.3.tar.gz
ftp.suse.com:/pub/people/kukuk/pam/pam_pwcheckpam_pwcheck-2.2.tar.bz2
ftp.suse.com:/pub/people/kukuk/pam/pam_unix2pam_unix2-1.16.tar.bz2

rpasswd はリモートサーバのユーザアカウントのパスワードを、 安全な SSL 接続を通して変更します。 通常のユーザは自分のパスワードだけを変更でき、 管理者のパスワード (現在はサーバの root のパスワード) を知っているユーザは、 rpasswd に -a オプションをつければ あらゆるユーザのパスワードを変更できます。

13.1. サーバの設定

サーバではまず証明書 (certificate) が必要です。 証明書のデフォルトのファイル名は /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 など) にある場合には、 pam_unix2 の nisdir オプションを使うと、この場所を参照できます。
#%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 にサーバの名前を書いておくだけで OK です。 サーバがデフォルト以外のポートで動作している場合は、 ここにそのポートも書いておきます。

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