NIS
NISとは
NIS(Network Information Service)は、特定の計算機(NISサーバ)が管理するファイルの内容を、他の計算機(NISクライアント)に配布する仕組みである。NISを使用することで、ユーザ情報やネットワーク設定を一元管理でき、複数の計算機に同じ設定を個別に行う手間を省くことができる。
以下はNISで管理できるファイルの例である。
パスワードファイル
/etc/hosts
/etc/services
amd(auto-mount daemon)のマップファイル
NISによって個人のログイン名とパスワードを管理できる。これにより、すべてのマシンに同一のログイン名とパスワードでログインできる。各マシンに個別にユーザを登録する必要はない。
NISドメイン
NISによって一元管理されるファイルを利用するUNIX計算機の集まりをNISドメインと呼ぶ。NISドメインはドメイン名によって区別される。
NISドメインのセキュリティ
NISドメイン名が判明すると、NISで管理している情報(パスワードハッシュを含む)を取得される可能性がある。以下の点に注意すること。
NISのドメイン名は推測されにくいものを設定する
NISのドメイン名を外部に漏らさない
外部の人に端末を操作されないようにする
NISサーバ
NISを運用するためには、サーバとなるコンピュータが少なくとも1台必要である。これをNISサーバと呼び、NISドメインにおける情報を一括管理する役割を持つ。NISサーバは同一ドメイン内に複数台設置できる。
マスターサーバとスレーブサーバ
複数のNISサーバのうち1台はマスターサーバとして動作させ、残りはスレーブサーバとして動作させる。
マスターサーバはNISクライアントが参照するオリジナルのファイルを保持・管理する。スレーブサーバはマスターサーバのデータのコピーをdbmフォーマットで保持する。dbm(database management)は高速な検索を可能にするデータベース形式である。
マスターサーバは定期的にNISデータベースのコピーをスレーブサーバに送信する。NISクライアントは、マスターサーバまたはスレーブサーバのうち、最初にレスポンスを返したサーバに接続する。スレーブサーバを設置することで、マスターサーバの負荷分散と障害時の可用性向上が実現できる。
NIS関係のコマンド
ypserv
NISサーバプログラム。サーバでのみ実行する。ypbind
NISクライアントプログラム。NISサーバへの接続を確立する。yppasswd
NISサーバで管理するpasswdファイルを変更する。ypcat
NISが配布している情報を表示する。例えばpasswdを表示する場合は以下のように実行する。% ypcat passwdypinit
NISデータベースの作成とインストールを行う。マスターサーバでは -m オプション、スレーブサーバでは -s オプションを使用する。ypwhich
現在接続しているNISサーバ名を表示する。domainname
NISドメイン名を設定または表示する。引数なしで実行すると現在のドメイン名を表示する。root権限で引数にドメイン名を指定すると設定できる。
NISのデータを更新するには
マスターサーバはデータをテキスト形式で保持している。このデータを変更した場合、dbm形式への変換とスレーブサーバへの再配布が必要となる。
データは/var/yp/nis.inputs/以下に格納されている。
例えば、新しいユーザを追加する場合は以下の手順で行う。
NISマスターサーバmoonにログインする
/var/yp/nis.inputs/master.passwdにエントリを追加する
/var/yp/ディレクトリでmakeコマンドを実行する(dbm形式への変換とスレーブへの配布が自動で行われる)
クライアントでNISの設定を有効にするには
以下の設定により、クライアントはNISサーバからユーザ情報やグループ情報を取得できるようになる。
起動時にNISドメイン名を設定し、ypbindを起動させるために、/etc/rc.confに以下の行を記述する。
nisdomainname="×××"
nis_client_enable="YES"
これはdomainnameコマンドでドメイン名を設定し、ypbindを実行するのと同等である。NISサーバの場合はさらに以下の行が必要となる。なお、サーバはクライアントとしても動作するため、上記の行も必要である。
nis_server_enable="YES"
nis_yppasswdd_enable="YES"NISサーバにあるすべてのパスワードエントリを取り込むため、vipwコマンドを使用して以下の行を/etc/master.passwdに追加する。
+:::::::::
この行は「NISサーバのすべてのユーザエントリを取り込む」という意味である。この編集には必ずvipwコマンドを使用すること。vipwはパスワードファイルをロックしながら編集するため、編集中の競合や不整合を防止できる。viエディタを使用して/etc/groupに以下の行を追加する。
+:::
この行は「NISサーバのすべてのグループエントリを取り込む」という意味である。同様に/etc/passwdに以下の行を追加する。
+:*:::::
本日の課題
NISのスレーブサーバを起動し、動作を確認する。
スレーブサーバの構築手順
root権限でログインする
ypinit -s moon.db.is.kyushu-u.ac.jpを実行する(マスターサーバからデータベースをコピーする)
確認メッセージが表示されたらnを入力するypservを実行する(NISサーバプロセスを起動する)
動作確認手順
ps -ax | grep ypを実行する(NIS関連プロセスの起動を確認する)
kill ypbindのプロセス番号を実行する(既存のypbindを停止する)
ypbind -ypsetを実行する(接続先を手動設定可能なモードで起動する)
ypset あなたのマシン名を実行する(自分のマシンをNISサーバとして指定する)
ypwhichで自分のマシンに問い合わせていることを確認する
ypcat お好みの情報を実行する
様々な情報を試してみること
後片付け
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
校閲を実施