RPC.YPPASSWDD(8)

名称
rpc.yppasswdd - NIS パスワードを変更するためのサーバ

書式
rpc.yppasswdd [-t master.passwd template file] [-d default domain] [-p path] [-s] [-f] [-a] [-m] [-i] [-v] [-u] [-h]

解説
rpc.yppasswdd デーモンは、ユーザが yppasswd(1) と ypchpass(1) コマンド使うことで、 NIS パスワードおよび他の情報を変更することを許します。 rpc.yppasswdd は、パスワードの変更要求を受け入れ、その認証を行い、 /var/yp/master.passwd ファイル中に更新された情報を配置し、 NIS の master.passwd マップと passwd マップを更新する、 RPC を使ったサーバです。

rpc.yppasswdd は、普通の NIS ユーザが、自分の NIS パスワード・ ('GECOS'フィールドとして知られている)フルネーム・シェルを変更することを許します。 これらの更新は、典型的には yppasswd(1), ypchfn(1), ypchsh(1), ypchpass(1) コマンドを使って行われます。 (管理者の中には、ユーザが名前の情報やシェルを変更することを 望まない人もいます。サーバは、オプションフラグを使うことで、そのような 変更ができない様にできます。)サーバが更新要求を受け取ると、 /var/yp/securenets ファイルに記述されている securenets 規則 (securenets に関する詳細な情報は ypserv(8) のマニュアルページを参照してください。 rpc.yppasswdd サーバは、 ypserv(8) と同じアクセス制御機構を使います。)に照らして、 要求を行ったクライアントのアドレスを比較します。

サーバは、その後ユーザが入力した '古い' パスワードが有効かどうかを 確認し、その後いくつかの更新情報のチェックを行います (これらには、制御文字のチェックやコロンや有効なシェルのチェックを 含みます)。ひとたび更新要求が有効であることが満足されると、 サーバはパスワードテンプレートファイル (デフォルトでは、 /var/yp/master.passwd です) を更新し、その後 NIS マップを再構築するために /usr/libexec/yppwupdate スクリプトを実行します。(このスクリプトは、二つの引数を受け取ります: それらは変更されたパスワードテンプレートの相対パス名と更新された ドメインの名前です。これらは、 /var/yp/Makefile に渡されます。)

FreeBSD 版の rpc.yppasswdd は、NIS マスタサーバ上のスーパユーザが NIS パスワードマップを更新するための より洗練された方法を提供します。スーパユーザは任意のドメインの 任意のユーザの master.passwd エントリの任意のフィールドを変更できます。 これは、ユーザの現在の NIS パスワードについて知らなくても可能です (サーバがスーパユーザからの要求を受け取ると、パスワード認証は 省略します)。そのうえ、サーバが -a フラグ付きで実行された時には、スーパユーザは ypchpass(1) を使って、新しいエントリをマップに付け加えることさえできます。 また、これは、 NIS マスタサーバ上のスーパユーザだけに適用されます。 これらの特別な機能はネットワークを介しては提供されません。

rpc.yppasswdd デーモンは、 NIS マスタサーバである機械上でだけ実行することが できます。

オプション
以下のオプションが使用可能です:

-t master.passwd template file
    デフォルトでは、 rpc.yppasswdd は、デフォルトドメインの master.passwd と passwd を生成するために使われるテンプレートファイルは、 /var/yp/master.passwd であることを仮定しています。このデフォルトは、代わりのファイル名を -t フラグとともに指定することで上書きできます。

    (注意): このフラグとともに指定されたテンプレートファイルが /etc/master.passwd である場合、 rpc.yppasswdd は NIS のマップに加えてローカルのパスワードデータベースを 再構成するために、自動的に pwd_mkdb(8) を呼び出します。

-d domain
    rpc.yppasswdd サーバは複数のドメインを扱うことができますが、一つのドメインを デフォルトとして選ばなければなりません。 domainname(1) コマンドによって設定されたシステムデフォルトのドメイン名を 使おうとします。しかしながら、システムドメイン名が設定されていない場合、 デフォルトドメイン名はコマンドラインで指定しなければなりません。 システムデフォルトドメインが設定されている場合、このオプションはその 定義を上書きします。

-p path
    このオプションは、デフォルトの NIS マップデータベースのパスを 上書きするために使われます。コンパイル時に指定されているデフォルトの パスは /var/yp です。

-s  シェル情報の変更を認めません。

-f  フルネーム ('GECOS') 情報の変更を認めません。

-a  NIS パスワードデータベースへの追加を許可します。NIS マスタサーバ上の スーパユーザは、 ypchpass(1) コマンドでユーザの master.passwd マップエントリのどんなフィールドでも、無制限の変更を行うことが 許されています。 rpc.yppasswdd がこのフラグを付けて実行された場合、 chpass(1) を使用したローカルパスワードデータベース更新にて可能であるのと同様に、 スーパユーザが NIS パスワードマップに新しいレコードを追加することを許可します。

-m  マルチドメインモードを有効にします。 ypserv(8) は同時にいくつかのドメインを扱うことができますが、ほとんどの rpc.yppasswdd 実装では、一つの NIS ドメインだけしか扱うことができません。 これは、一般に NIS マスタサーバのシステムデフォルトドメインと同じです。 FreeBSD の rpc.yppasswdd は、 yppasswd プロトコルでは domain 引数をクライアントの要求中に含めることが出来ないという プロトコル固有の制限にもかかわらず、 この問題を解決しようとしています。 マルチドメインモードでは、 rpc.yppasswdd は /var/yp 下の全ドメインの全パスワードマップを検索し、 与えられた更新要求で指定されたユーザ情報と一致するエントリを見付けます。 (一致したかどうかは、ユーザ名と UID および GID フィールドを調べることで 決定されます。) 一致したエントリとそのドメインはその後更新のために 使われます。

    マルチドメインモードがうまく動くためには、各ドメイン毎に 別々のテンプレートファイルが必要なことに注意してください。 例えば、サーバが 3 つのドメイン foo, bar, baz を提供している時、 3 つの別の master.passwd テンプレートファイル /var/yp/foo/master.passwd, /var/yp/bar/master.passwd, /var/yp/baz/master.passwd が必要です。 foo がシステムデフォルトドメインであったとすると、そのテンプレートファイル は /var/yp/foo/master.passwd もしくは /var/yp/master.passwd のどちらであっても構いません。 サーバは、後のファイルを先に確認し、見付からない場合には先のファイルを 確認します。

    デフォルトでは、マルチドメインモードにはなっていません。 これは、異なったドメインに同じもしくは似ているエントリが存在した場合 に失敗するからです。検索領域に複数のエントリを見付けた場合、 サーバは更新要求を停止します。 したがって、偏執的な管理者はマルチドメインモードを利用不可能にしたいと 思うでしょう。

-i  rpc.yppasswdd がこのフラグ付きで呼び出された場合、マップ更新をその場で行おうとします。 この意味は、 パスワードテンプレートファイルを直接更新してマップ更新する代わりに、 サーバがマップデータベースを直接更新するということです。 これは、パスワードマップが大きい時に有効です。例えば、 パスワードデータベースに 10,000 ものエントリがある場合、マップの更新が 終了するまでに数分かかってしまいます。その場でマップを更新することで、 この時間を数秒までに減らすことができます。

-v  冗長なログモードに入ります。通常、サーバはエラー状態時や スーパユーザによる NIS マスタサーバ上での更新n時に、 syslog(3) の能力を使ってメッセージを記録します。サーバが -v オプションを使って実行されている時には、全ての更新に対する 情報メッセージを記録します。

-u  たくさんの商用の yppasswd(1) クライアントは、 rpc.yppasswdd への要求を送る時に予約ポートを使いません。 これは、 yppasswd(1) が root に set-uid されずにインストールされているか、 RPC の実装が スーパユーザのためにクライアント接続が確立されたとき、 予約ポートを割り当てることをしないようになっているためです。 デフォルトでは、 rpc.yppasswdd は、クライアントからの結果を予約ポートを使って受け取ることを期待します。 非特権ポートから受け取った要求は、排除されます。不幸にして、この振舞いは 特権ポートを使えないクライアントシステムからのパスワード更新要求を妨げます。 -u フラグを指定することで、 rpc.yppasswdd は、特権ポートを使えない yppasswd(1) でも働くように、特権ポートのチェックを無効にします。 これは、少しセキュリティを低下させますが、クライアントの振舞いを 変更できない場合には必要になるでしょう。

-h  rpc.yppasswdd が理解できるフラグやオプションのリストを表示します。

関連ファイル
/usr/libexec/yppwupdate
    NIS マップを更新し、その後でプッシュするために、 rpc.yppasswdd によって呼び出されるスクリプトです。
/var/yp/master.passwd
    デフォルトドメインのためのテンプレートパスワードファイルです。
/var/yp/[domainname]/[maps]
    特定の NIS ドメインのための NIS マップです。
/var/yp/[domainname]/master.passwd
    デフォルトでないドメインのための一時パスワードファイルです (マルチドメインモードだけで使われます)。

関連項目
yp(4), yppush(8), ypserv(8), ypxfr(8)

バグ
yppasswd.x プロトコル定義で記述されているように、 YPPASSWDPROC_UPDATE プロシジャは二つの引数を取ります。 更新するユーザ情報を含む V7 形式のパスワード構造および、 ユーザの暗号化されない (クリアテキスト) パスワードです。 rpc.yppasswdd はリモートの NIS クライアントマシンからの更新要求を扱うことを 仮定しています。これは、 yppasswd(1) や似たようなクライアントプログラムがネットワークを通して、 ユーザのクリアテキストパスワードを転送するということを意味します。

これはパスワード更新では問題ではありません。 なぜなら、更新と共に送られるプレインテキストパスワードは、 新しい暗号化されたパスワードが有効になった時には無効になっているからです。 しかし、ユーザが自分の 'GECOS' 情報やシェルを更新する場合には、 更新と共に送られるクリアテキストパスワードは、 更新完了時にも有効です。 ネットワークがセキュアでない場合、このクリアテキストパスワードは、 途中でとらえられ、 そのユーザアカウントに対する不正アクセスに使用されるかも知れません。

作者
Bill Paul <wpaul@ctr.columbia.edu>