NIS(ネットワーク情報サービス)
この資料は、UNIX系システムの設定情報を一元管理する仕組みであるNISについて学び、最後にスレーブサーバを実際に構築して動作を確認する演習資料である。対象とする環境はFreeBSDであり、コマンドや設定ファイルの記述はFreeBSDの仕様に従う。
目次
NISとは
NIS(Network Information Service)は、特定の計算機(NISサーバ)が管理するファイルの内容を、他の計算機(NISクライアント)に配布する仕組みである。もともとYellow Pagesと呼ばれていたため、NISのコマンドはすべて「yp」で始まる。NISを使用することで、ユーザ情報やネットワーク設定を一元管理でき、複数の計算機に同じ設定を個別に行う手間を省くことができる。なおNISはRPC(Remote Procedure Call。ある計算機から別の計算機の手続きを呼び出して処理を依頼する通信方式)にもとづいて動作する。
以下はNISで管理できるファイルの例である。
パスワードファイル(passwd、master.passwd)
グループファイル(/etc/group)
ホスト名とIPアドレスの対応表(/etc/hosts)
サービス名とポート番号の対応表(/etc/services)
NISによって個人のログイン名とパスワードを管理できる。これにより、NISドメイン内のすべてのマシンに同一のログイン名とパスワードでログインできる。各マシンに個別にユーザを登録する必要はない。
NISドメイン
NISによって一元管理されるファイルを利用するUNIX計算機の集まりをNISドメインと呼ぶ。NISドメインはドメイン名によって区別される。同じネットワーク上に複数のNISドメインが存在しても、クライアントが要求に含めるドメイン名によって、どのサーバが応答すべきかを区別できる。NISドメイン名はDNS(インターネット上のホスト名を管理する仕組み)のドメイン名とは別のものであり、必ずしも一致させる必要はない。
NISドメインのセキュリティ
NISはRPCによるブロードキャスト(同じネットワーク上のすべての相手へ一斉に送る通信)型のサービスであるため、同じドメイン内でypbindを動かしている計算機であれば、NISで管理している情報(パスワードハッシュを含む)を取得できてしまう。NISドメイン名が判明すると、その情報を第三者に取得される危険がある。以下の点に注意すること。
NISのドメイン名は推測されにくいものを設定する
NISのドメイン名を外部に漏らさない
外部の人に端末を操作されないようにする
なお、FreeBSDのypserv(NISサーバプログラム)には、接続を許可するホストを制限する「securenets」という機能があり、/var/yp/securenetsに許可するネットワークを記述して使用する。
NISサーバ
NISを運用するためには、サーバとなるコンピュータが少なくとも1台必要である。これをNISサーバと呼び、NISドメインの情報を一括管理する役割を持つ。NISサーバは同一ドメイン内に複数台設置できる。
マスターサーバとスレーブサーバ
複数のNISサーバのうち1台はマスターサーバとして動作させ、残りはスレーブサーバとして動作させる。
マスターサーバは、NISクライアントが参照するオリジナルのファイルを保持・管理する。スレーブサーバは、マスターサーバが持つマップ(NISが配布用に変換したデータベース)のコピーを保持する。マップはdbm(database management。高速な検索を可能にするデータベース形式)で保持される。
マスターサーバはマップの変更をスレーブサーバに配布する。NISクライアントは、マスターサーバとスレーブサーバのうち、最初にレスポンスを返したサーバに接続する。スレーブサーバを設置することで、マスターサーバの負荷分散と、障害時の可用性向上が実現できる。
NIS関係のコマンド
rpcbind
RPCを有効にするサービス。NISサーバを動かす場合も、NISクライアントとして動作する場合も、起動している必要がある。ypserv
NISサーバプログラム。サーバでのみ実行する。マスターサーバとスレーブサーバの両方で動作する。ypbind
NISクライアントプログラム。NISドメイン名をもとにNISサーバへの接続を確立する。yppasswd
NISサーバで管理するpasswdファイルを変更する。ypcat
NISが配布している情報を表示する。例えばpasswdを表示する場合は以下のように実行する。% ypcat passwdypinit
NISのマップ(配布用データベース)の作成とインストールを行う。マスターサーバでは -m オプション、スレーブサーバでは -s オプションを使用する。ypwhich
現在接続しているNISサーバ名を表示する。ypset
接続先のNISサーバを手動で指定する。ypbindを -ypset オプション付きで起動しているときに使用できる。domainname
NISドメイン名を設定または表示する。引数なしで実行すると現在のドメイン名を表示する。root権限で引数にドメイン名を指定すると設定できる。
NISのデータを更新するには
マスターサーバは、もとになる設定ファイルを/etc以下にテキスト形式で保持している。このデータを変更した場合は、配布用のマップ(dbm形式)への変換と、スレーブサーバへの再配布が必要となる。この変換と配布は、/var/yp/ディレクトリにあるMakefileによって行う。
例えば、新しいユーザを追加する場合は以下の手順で行う。
NISマスターサーバmoonにログインする
vipwコマンドで/etc/master.passwdにエントリを追加する(vipwはパスワードファイルをロックしながら編集するため、編集中の競合や不整合を防止できる)
/var/yp/ディレクトリでmakeコマンドを実行する(マップへの変換とスレーブへの配布が自動で行われる)
クライアントの設定
以下の設定により、クライアントはNISサーバからユーザ情報やグループ情報を取得できるようになる。
起動時にNISドメイン名を設定し、ypbindを起動させるために、/etc/rc.confに以下の行を記述する。
nisdomainname="×××"
nis_client_enable="YES"
これは、domainnameコマンドでドメイン名を設定し、ypbindを実行するのと同等である。NISサーバの場合は、さらに以下の行が必要となる。なお、サーバはクライアントとしても動作するため、上記の2行も必要である。
nis_server_enable="YES"
nis_yppasswdd_enable="YES"NISサーバにあるすべてのパスワードエントリを取り込むため、vipwコマンドを使用して以下の行を/etc/master.passwdに追加する。
+:::::::::
この行は「NISサーバのすべてのユーザエントリを取り込む」という意味である(コロンは9個)。この編集には必ずvipwコマンドを使用すること。vipwはパスワードファイルをロックしながら編集するため、編集中の競合や不整合を防止できる。viエディタを使用して/etc/groupに以下の行を追加する。
+:*::
この行は「NISサーバのすべてのグループエントリを取り込む」という意味である。
本日の課題:スレーブサーバの構築と動作確認
NISのスレーブサーバを起動し、動作を確認する。本演習では、自分のマシンを一時的にスレーブサーバとして構築し、自分自身をそのサーバに接続させて情報が取得できることを確かめたのち、元の状態に戻す。
スレーブサーバの構築手順
root権限でログインする
ypinit -s moon.db.is.kyushu-u.ac.jp <NISドメイン名> を実行する(マスターサーバmoonからマップをコピーする。-s はスレーブ用で、マスターサーバ名とドメイン名の両方を指定する)
確認メッセージが表示されたらnを入力するypservを実行する(NISサーバプロセスを起動する)
動作確認手順
ps -ax | grep yp を実行する(NIS関連プロセスの起動を確認する)
kill <ypbindのプロセス番号> を実行する(既存のypbindを停止する。プロセス番号は前の手順のps出力で確認する)
ypbind -ypset を実行する(接続先を手動設定できるモードで起動する)
ypset <あなたのマシン名> を実行する(自分のマシンを接続先のNISサーバとして指定する)
ypwhich を実行し、自分のマシンに問い合わせていることを確認する
ypcat <お好みの情報> を実行する(例:ypcat passwd)
様々な情報を試してみること
後片付け
ps -ax | grep yp を実行する(プロセス番号を確認する)
kill <ypservのプロセス番号> を実行する
kill <ypbindのプロセス番号> を実行する
ypbind を実行する(通常モードで再起動する)
rm -r /var/yp/<NISドメイン名> を実行する(本演習で作成したマップのディレクトリを削除する)
ypwhich を実行し、yumiと表示されれば完了(元のスレーブサーバに接続していることを確認する)
注意すべき点
本来は以下の設定が必要だが、今回は演習のため実施しない。
/etc/rc.confに変更を加え、再起動時にypservが自動的に起動するように設定する
moon(マスターサーバ)でypinit -mを実行し、新たなスレーブサーバを登録する
これらを実施しない場合、マスターサーバでマップが更新されても、今回構築したスレーブサーバには新しいマップが配布されない。
参考文献
最新UNIXハンドブック、伊藤 和人著
フリーUNIXで作るネットワークサーバ構築ガイド、國安和広+秀和システム出版編集部編著
http://www.freebsd.org/ja/handbook/nis.html
http://www.kuis.kyoto-u.ac.jp/imel/tebiki/rvsettei/node2.html
校閲を実施