9. NIS サーバの設定

9.1. サーバプログラム ypserv

この文書では、 NIS サーバとしては "ypserv" の 設定方法のみを記します。

NIS サーバのソフトは以下にあります。

http://www.linux-nis.org/nis/ に、より詳しい情報があります。

サーバのセットアップ方法は trad-NIS / NYS どちらの場合でも同じです。

コンパイルして ypservmakedbm を作ります。 securenets ファイルを使うか ypserv-2.x では、アクセス制限には securenets ファイルを用いる方法のみをサポートしています。

サーバをマスターとして起動する場合は、 NIS を用いて共有させるファイルを決めてください。 そして /var/yp/Makefile の "all" ルールに必要なものを加えたり、不要なものを削除したりしてください。 また Makefile の先頭の方も必ず見て、 オプションを自分の環境にあわせて編集しておくべきです。

ypserv 1.1 と ypserv 1.2 との間では、大きな変更が行われました。 1.2 以降では、ファイルハンドルがキャッシュされるようになったのです。 これにより、新しいマップを生成するときには必ず makedbm に -c オプションをつけなければならなくなりました。 /var/yp/Makefile が ypserv 1.2 以降に付属の新しいものであることを確認して下さい。 あるいは Makefile 中の makedbm に -c フラグを加えて下さい。 これを忘れると、ypserv は更新されたマップではなく、 古いマップを使い続けてしまいます。

次に /var/yp/securenets/etc/ypserv.conf を編集します。 詳細は ypserv(8) と ypserv.conf(5) のマニュアルページを読んで下さい。

ポートマッパ (rpc.portmap) が動いているか確認して下さい。 確認できたら ypserv を動かします。

% rpcinfo -u localhost ypserv

というコマンドを実行してみて、
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
と出力されることを確認して下さい。

"version 1" の行は、 ypserv のバージョンや用いた設定によっては 出ないかもしれません。これが必要になるのは昔の SunOS 4.x を クライアントとして使う場合だけです。

ここで NIS (YP) データを作成します。 マスターサーバで以下を実行して下さい。

% /usr/lib/yp/ypinit -m

スレーブサーバで ypwhich -m が機能することを確認して下さい。 つまり、スレーブにするホストは、 まず NIS クライアントとして動作できなければならないのです。 確認できたら以下を実行して、このホストを NIS スレーブにします。

% /usr/lib/yp/ypinit -s masterhost

これでおしまい、サーバは動作しているはずです。

何か大きな問題が生じたら、 ypservypbind を別の xterm からデバッグモードで起動してみましょう。 デバッグ出力から何が問題なのかが判断できるはずです。

マップを更新する必要が生じた場合は、 NIS マスターの /var/yp ディレクトリで make を実行してください。 ソースファイルが新しい場合にはマップが更新され、スレーブサーバに push されます。マップの更新には ypinit は用いないようにしてください。

「スレーブ」サーバ上では root の crontab を編集し、 以下のような行を追加しておくと良いかもしれません。

20 *    * * *    /usr/lib/yp/ypxfr_1perhour
40 6    * * *    /usr/lib/yp/ypxfr_1perday
55 6,18 * * *    /usr/lib/yp/ypxfr_2perday

万が一マスタサーバでの更新の際にスレーブがダウンしていてデータを 受け損なっても,これによって NIS マップを最新に保つことができます。

スレーブはいつでも追加することができます。 まず新しくインストールしたスレーブサーバが NIS マスターに接続する許可を持っているかを確認しましょう。 次に
% /usr/lib/yp/ypinit -s masterhost
を新しいスレーブで実行します。 マスターサーバでは、この新しいスレーブサーバの名前を /var/yp/ypservers に追加し、 /var/ypmake を実行してマップを更新します。

NIS サーバへのユーザアクセスを制限したい場合は、 NIS サーバのホストをクライアントとしても実行する必要があります。 つまり ypbind を実行して "+" の付いたエントリをパスワードファイル /etc/passwd途中 に追加します。 ライブラリ関数は NIS エントリ以降に置かれた通常のエントリを全て無視し、 残りを NIS を通して取得します。このようにすると NIS のアクセスルールを 管理することができます。例を示します。

root:x:0:0:root:/root:/bin/bash
daemon:*:1:1:daemon:/usr/sbin:
bin:*:2:2:bin:/bin:
sys:*:3:3:sys:/dev:
sync:*:4:100:sync:/bin:/bin/sync
games:*:5:100:games:/usr/games:
man:*:6:100:man:/var/catman:
lp:*:7:7:lp:/var/spool/lpd:
mail:*:8:8:mail:/var/spool/mail:
news:*:9:9:news:/var/spool/news:
uucp:*:10:50:uucp:/var/spool/uucp:
nobody:*:65534:65534:noone at all,,,,:/dev/null:
+miquels::::::
+:*:::::/etc/NoShell
[ All normal users AFTER this line! ]
tester:*:299:10:Just a test account:/tmp:
miquels:1234567890123:101:10:Miquel van Smoorenburg:/home/miquels:/bin/zsh

このようにユーザ "tester" は存在しますが、シェルが /etc/NoShell になります。 miquels は通常のアクセス権を持つことになります。

あるいは /var/yp/Makefile ファイルを編集し、 NIS が使うパスワードファイルを別に指定することもできます。 大きなシステムでは、NIS のパスワードファイルとグループファイルは通常 /var/yp/ypfiles に置くことが多いようです。 このようにするとパスワードファイル関連の管理ツールは使えなくなります。 つまり passwd, chfn, adduser などに対し、特別なツールが必要になります。

しかし yppasswd, ypchsh, ypchfn は当然動作します。

9.2. サーバプログラム yps

NIS サーバ yps の設定は 前のセクションを参考にして下さい。 大体似ていますが完全に同じではないので、 ypserv の説明を適用する際には注意して下さい。 yps はもはや誰もサポートしていませんし、 いくつかセキュリティホールも存在しています。使うべきではありません!

yps のソフトは以下のサイトにあります。

9.3. rpc.ypxfrd プログラム

rpc.ypxfrd は非常に大きな NIS マップを NIS マスターから NIS スレーブサーバーに転送する際に、転送を高速化するために 用いられます。 NIS スレーブサーバーは、新しいマップがあるというメッセージを 受け取ると、そのマップを取得するために ypxfr を起動します。 ypxfr は yp_all() 関数を用いてマップの内容をマスターサーバー から読み込もうとします。この情報はデーターベースライブラリを 通して保存されるため、マップのサイズが非常に大きくなると、 このプロセスは数分もかかってしまうことがあります。

rpc.ypxfrd サーバーは、 NIS スレーブサーバーにマスターの マップファイルを単純にコピーさせ、転送プロセスを高速化します。 スレーブサーバーがゼロから自前のマップを生成するのに比べ、 これはずっと短時間ですみます。 rpc.ypxfrd は RPC ベースの転送プロトコルを用いるので、 新しいマップを生成する必要はありません。

rpc.ypxfrd は inetd から起動することもできますが、 起動には時間がかかるので、 ypserv と一緒にデーモンとして 起動しておくほうがいいでしょう。 rpc.ypxfrd は NIS マスターサーバでだけ起動しておけば OK です。

9.4. rpc.yppasswdd プログラム

ユーザがパスワードを変更したときには、 NIS のパスワードデータベースや、 それに依存した他の NIS データベースも変更されなければなれません。 これを行なうのが rpc.yppasswdd です。 このプログラムはパスワード変更を取り扱い、 NIS の情報が正しく更新されるようにします。 現在 rpc.yppasswddypserv の一部となっています。 別パッケージになっている yppasswd-0.9.tar.gzyppasswd-0.10.tar.gz などは古いので使う必要はありませんし、また今後使うべきではありません。

rpc.yppasswdd を実行するのは NIS マスターサーバのみです。デフォルトで は、ユーザーはフルネームやログインシェルを変更することができないように なっています。これを許可するには、それぞれ -e chfn および -e chsh オプ ションを指定します。

passwd と shadow ファイルが /etc 以外にある場合は、 -D オプションを 指定する必要があります。例えば全てのソースファイルを /etc/yp に置いて、ユーザにシェルの変更を可能にしたい場合は、 rpc.yppasswdd を以下のパラメータで実行しなければなりません:
# rpc.yppasswdd -D /etc/yp -e chsh
または
# rpc.yppasswdd -s /etc/yp/shadow -p /etc/yp/passwd -e chsh
でも OK です。

他には特にすることはありません。ただ、 rpc.yppasswdd/var/yp/Makefile と同じファイルを使っているかどうかは気をつけておいてください。 エラーは syslog を通して記録されます。