NIS スレーブサーバ
Index
はじめに
NIS (Network Information System) は、ユーザ名、パスワード、グループ、ホスト名などの情報を 集約して複数のマシンで共有する仕組みです。NIS は RPC を用いたクライアント/サーバ方式で動作し、 マスターサーバ、スレーブサーバ、クライアントから構成されます。
スレーブサーバは、マスターサーバの NIS マップの複製を保持します。これにより、 マスターサーバが停止した場合の冗長性が確保され、クライアントは最初に応答したサーバに バインドするため負荷の分散にもなります。ここではスレーブサーバの設定を行います。
FreeBSD が実装しているのは NIS プロトコルバージョン 2 です。 NIS の通信は暗号化されないため、アクセスできるホストを /var/yp/securenets で制限し、あわせて ipfw によるパケットフィルタリング で LAN 外からの要求を遮断します。
参考 Web ページ:FreeBSD ハンドブック「Network Servers」の NIS の節 https://docs.freebsd.org/en/books/handbook/network-servers/#network-nis
NIS クライアントとしての設定
スレーブサーバはマスターサーバから NIS マップを転送して動作します。 そのために、まず NIS クライアントとしての設定を行います。作業は root 権限で行います。
-
NIS ドメイン名と NIS クライアントの有効化を /etc/rc.conf に設定します。 NIS ドメイン名は、マスターサーバで使用しているものと同じ文字列を指定します。
# sysrc rpcbind_enable="YES" # sysrc nisdomainname="<NISドメイン名>" # sysrc nis_client_enable="YES" # sysrc nis_client_flags="-S <NISドメイン名>,<NISマスターサーバマシン名>"
-S はバインドするドメインとサーバを固定するオプションです。 指定したサーバ名は、このマシンの /etc/hosts に登録されている必要があります。
-
/etc/master.passwd を編集します。編集には必ず vipw を使用します("vi /etc/master.passwd" ではなく "vipw")。 最終行に次の行を追加します。master.passwd はフィールドが 10 個なので、コロンは 9 個です。
# vipw 最終行に追加 ----- +::::::::: -----
NIS に障害が起きたときに備え、wheel グループに属するローカルアカウントを 最低 1 つ残しておきます。このアカウントでログインし、su でスーパユーザになって復旧できます。
-
/etc/group の最終行に次の行を追加します。
# vi /etc/group 最終行に追加 ----- +:*:: -----
-
ドメイン名を設定し、rpcbind と ypbind を起動します。
# domainname <NISドメイン名> # service rpcbind start # service ypbind start
-
どの NIS サーバにバインドしたかを確認します。正しく設定されていれば NIS サーバ名が表示されます。
# ypwhich
-
NIS マップの内容を確認します。設定できていればユーザ名やグループ名が表示されます。
# ypcat passwd # ypcat group
マスターサーバ側での登録
スレーブサーバは、マスターサーバの ypservers マップに登録されていなければ マップの更新通知 (yppush) を受け取れません。マスターサーバ側で次の作業を行います。
-
マスターサーバに ssh でログインし、su でスーパユーザになります。
$ ssh <NISマスターサーバマシン名> $ su
-
ypservers マップにスレーブサーバのホスト名を追加します。
# ypinit -u <NISドメイン名>
ypinit -u は、ypservers マップを更新するためのオプションです。 新しくマスターサーバを構築し直す場合は、ypinit -m の実行時にスレーブサーバのホスト名を 一覧に加えます。
-
マスターサーバの変更がスレーブサーバへ自動的に反映されるように、NOPUSH の設定を解除します。 /var/yp/Makefile は /var/yp/Makefile.local があればそれを読み込むので、次のファイルを作成します。
# vi /var/yp/Makefile.local ----- NOPUSH= -----
この設定により、マスターサーバの /var/yp で make を実行してマップを作り直すと、 yppush がスレーブサーバにマップの更新を通知します。 通知を受け取ったスレーブサーバの ypserv は ypxfr を起動し、マスターサーバからマップを転送します。
NIS スレーブサーバの設定
-
アクセスを許可するネットワークを /var/yp/securenets に記述します。 XXX.YYY.ZZZ の部分は LAN のネットワークアドレスです。
# vi /var/yp/securenets ----- 127.0.0.1 255.255.255.255 XXX.YYY.ZZZ.0 255.255.255.0 -----
-
マスターサーバから NIS マップをコピーします。 スレーブサーバでは -s(slave)を指定し、マスターサーバ名とドメイン名を与えます。
# ypinit -s <NISマスターサーバマシン名> <NISドメイン名>
/var/yp/<NISドメイン名> が作成され、マスターサーバのマップの複製が置かれます。
-
ypserv を起動します。
# sysrc nis_server_enable="YES" # service ypserv start
-
どの NIS サーバに問い合わせているかを確認します。
# ypwhich
起動時の設定
起動時に自動的に NIS スレーブサーバが立ち上がるように /etc/rc.conf を設定します。 起動時に rpcbind, ypserv, ypbind が立ち上がります。
# vi /etc/rc.conf ----- rpcbind_enable="YES" nisdomainname="<NISドメイン名>" nis_server_enable="YES" nis_client_enable="YES" nis_client_flags="-S <NISドメイン名>,<NISマスターサーバマシン名>" -----
FreeBSD 5.0 以降、ポートマッパのコマンド名とサービス名は portmap から rpcbind に変更されています。古い解説にある portmap_enable ではなく rpcbind_enable を使用します。
マップの定期同期と動作確認
マスターサーバは変更のあったマップをスレーブサーバへ自動的に push しますが、 通知が届かなかった場合に備え、スレーブサーバ側でも定期的にマップを転送します。 /etc/crontab に次の行を追加します。
# vi /etc/crontab ----- 20 * * * * root /usr/libexec/ypxfr passwd.byname 21 * * * * root /usr/libexec/ypxfr passwd.byuid -----
設定後、NIS のファイルが参照できるかを確認します。
# ypwhich # ypcat passwd # ypcat group # ypcat hosts