この章では、NIS の管理方法について説明します。
NIS の概要は、第 17 章「ネットワーク情報サービス (NIS)」を参照してください。
NIS の初期設定と構成方法については、『Solaris ネーミングの設定と構成』を参照してください。
セキュリティの関係上、次の点に注意してください
マスターサーバーの NIS マップへのアクセスは制限します。
未許可アクセスを防止するためには、NIS パスワードマップの作成に使用されたファイルに root エントリを含めないでください。したがって、root エントリをこのパスワードファイルから削除して、このパスワードファイルをマスターサーバーの /etc ディレクトリ以外のディレクトリにおく必要があります。このディレクトリへの未許可アクセスは、防止しなければなりません。
たとえば、マスターサーバーのパスワード入力ファイルは、別のファイルへのリンクではなく Makefile に指定されている限り、/var/yp などのディレクトリに存在するか、または選択されたディレクトリに存在します。/usr/lib/netsvc/yp/ypstart スクリプトは、Makefile に指定された構成に従って自動的に適切なディレクトリオプションを設定します。
この NIS インプリメンテーションでは、NIS パスワードマップを作成するための入力として、Solaris 1.x バージョンの passwd ファイルのフォーマットに加え、Solaris リリース 2 の passwd ファイルと shadow ファイルのフォーマットも使用できます。
この節では、ユーザーパスワードの設定、NIS ドメインへの新しいユーザーの追加、ネットグループへのユーザーの割り当てについて説明します。
NIS ドメインに新しいユーザーを追加するには、以下の手順に従ってください。
NIS マスターサーバーのルートとしてログインします。
useradd コマンドで新しいユーザーのログイン ID を作成します。
Solarisリリース 2 のシステムの場合は、次のように入力します。
# useradd userID
userID は新しいユーザーのログイン ID です。このコマンドは、NIS マスターサーバー上の /etc/passwd ファイルと /etc/shadow ファイルにエントリを作成します。
新しいユーザーの初期パスワードを作成します。
新しいユーザーがログインするために使用できる初期パスワードを作成するには、passwd コマンドを以下の形式で実行します。
# passwd userID
userID は新しいユーザーのログイン ID です。このユーザーに割り当てるパスワードを入力するよう指示が出ます。
このステップが必要になるのは、useradd コマンドで作成されたパスワードエントリがロックされ、新しいユーザーがログインできないからです。初期パスワードを指定することで、このパスワードエントリのロックが解除されます。
必要であれば、新しいエントリをマスターサーバーの passwd マップ入力ファイルにコピーします。
マスターサーバー上のマップソースファイルが /etc 以外のディレクトリに存在する場合は、新しい行を /etc/passwd ファイルと /etc/shadow ファイルからマスターサーバー上の passwd マップ入力ファイルにコピー&ペーストする必要があります。詳細は、「パスワードファイルと名前空間のセキュリティ」を参照してください。
たとえば、新しいユーザー baruch を追加すると、/etc/passwd ファイルから passwd 入力ファイルにコピーされる行は次のようになります。
baruch:x:123:10:User baruch:/home/baruch:/bin/csh:
/etc/shadow からコピーされる baruch 行は次のようになります。
baruch:W12345GkHic:6445::::::
NIS マップの入力として Solaris リリース 1 の passwd ファイルフォーマットを使用している場合は、passwd ファイルへの新しいユーザーの追加は、テキストエディタを使用して手作業で行わなければなりません。
パスワード入力ファイルが存在するディレクトリを、Makefile で正しく指定していることを確認します。
必要であれば、/etc/passwd ファイルと /etc/shadow 入力ファイルから新しいユーザーのエントリを削除します。
セキュリティの関係上、NIS マスターサーバーの /etc/passwd ファイルと /etc/shadow 入力ファイルでユーザーエントリを保持することは望ましくありません。新しいユーザーのエントリを他のディレクトリに存在する NIS マップソースファイルにコピーした後、マスターサーバー上の userdel コマンドで新しいユーザーを削除します。
たとえば、マスターサーバーの /etc ファイルから新しいユーザー baruch を削除するには、次のように入力します。
# userdel baruch
マスターサーバー上の passwd 入力ファイルを更新した後、ソースファイルが存在するディレクトリで make を実行して passwd マップを更新します。
# userdel baruch # cd /var/yp # /usr/ccs/bin/make passwd
新しいユーザーのログイン ID に割り当てられた初期パスワードを新しいユーザーに通知します。
ログイン後、新しいユーザーはいつでも passwd を実行して別のパスワードに変更できます。
ユーザーは passwd を実行してパスワードを変更します。
% passwd username
(ユーザーの立場から見たパスワードの詳細は、「パスワードの使用」を参照してください。)
ユーザーがパスワードを変更する前に、NIS 管理者はマスターサーバー上の rpc.yppasswdd デーモンを起動してパスワードファイルを更新しなければなりません。rpc.yppasswd デーモンを起動するコマンドは、/usr/lib/netsvc/yp/ypstart ファイルにすでに存在しています。
rpc.yppasswdd デーモンは、自動的にマスターサーバー上の ypstart で起動されます。rpc.yppasswd に -m オプションが指定された場合は、ファイルが更新された直後に /var/yp の make が実行されます。passwd ファイルが更新されるたびにこの make が実行されることを回避したい場合は、ypstart スクリプトの rpc.yppasswd コマンドから -m オプションを削除して、crontab ファイルで passwd マップの転送を制御してください。
rpc.yppasswd -m コマンドの後に引数を指定しないでください。別の動作を行わせるために ypstart スクリプトファイルを編集することは可能ですが、-m オプションを任意に削除すること以外の変更をこのファイルに加えることは望ましくありません。すべてのコマンドおよびデーモンは、一群の適切なコマンド行パラメータが存在するこのファイルで起動されます。このファイルを編集する場合は、rpc.yppasswdd コマンドの編集では特に注意してください。passwd.adjunct ファイルに明示的コールを追加する場合は、パスを $PWDIR/security/passwd.adjunct
と正確に指定しなければなりません。$PWDIR/security/passwd.adjunct
というパスを指定しない場合は、不適切な処理が行われます。
NIS ネットグループは、NIS 管理者が管理目的のために定義する、ユーザーまたはマシンのグループ (集合) です。たとえば、次のようなネットグループを作成できます。
特定マシンにアクセスできる一群のユーザーを定義するネットグループ
特定のファイルシステムにアクセスできる一群の NFS クライアントマシンを定義するネットグループ
特定の NIS ドメインのすべてのマシンに対して管理者権限を持つ一群のユーザーを定義するネットグループ
各ネットグループには、1 つのネットグループ名が与えられます。ネットグループは、アクセス権を直接設定しません。代わりに、ユーザー名またはマシン名が一般に使用される場所では、ネットグループ名が他の NIS マップで使用されます。たとえば、netadmins というネットワーク管理者ネットグループを作成したと仮定します。netadmins ネットグループのすべてのメンバーに特定マシンへのアクセス権を与えるには、そのマシンの /etc/passwd ファイルに netadmin エントリを追加するだけで、ネットグループ名を NIS グループマップに追加することもできます。ネットグループの使用の詳細は、netgroup(4) のマニュアルページを参照してください。
NIS が使用されているネットワーク上では、NIS マスターサーバー上の netgroup 入力ファイルを使用して、netgroup、netgroup.byuser、netgroup.byhost という 3 つのファイルが生成されます。netgroup マップには、netgroup 入力ファイルの基本情報が入っています。他の 2 つの NIS マップには、マシンまたはユーザーが指定されるとネットグループ情報の検索が迅速に行われるフォーマットで情報が入っています。
netgroup 入力ファイルのエントリのフォーマットは、name ID です。name はネットグループ名であり、ID は、ネットグループに属しているマシンまたはユーザー、あるいはその両方を示します。ネットグループの ID (メンバー) は、コンマで区切っていくつでも指定できます。たとえば、3 つのメンバーが存在するネットグループを作成する場合、netgroup 入力ファイルエントリのフォーマットは、name ID、ID、IDとなります。netgroup 入力ファイルエントリのメンバー ID のフォーマットは、次のようになります。
([-|machine], [-| user], [domain])
machine はマシン名、user はユーザー ID、domain はマシンまたはユーザーの NIS ドメインで、それぞれコンマで区切られます。ドメインエレメントはオプションですが、他の NIS ドメインのマシンまたはユーザーを示す場合には必ず指定します。各エントリではマシンエレメントとユーザーエレメントは必須ですが、ダッシュ (-) は空であることを示すために使用されます。エントリでは、マシンエレメントとユーザーエレメントの関係を示す必要はありません。
netgroup 入力ファイルの 2 つのサンプルエントリを以下に示します。これらの各サンプルエントリでは、admins という名前のネットグループが作成されます。これらの各 admins は、リモートドメイン sales に存在するユーザー hauri と juanita、およびマシン altair と sirius で構成されます。
admins (altair, hauri), (sirius,juanita,sales) admins (altair,-), (sirius,-), (-,hauri), (-,juanita,sales)
さまざまなプログラムでは、ログイン、リモートマウント、リモートログイン、リモートシェル作成時に NIS ネットグループマップを使用してアクセス権チェックを行います。さまざまなプログラムとは、mountd、login、rlogin、rsh などです。login コマンドは、passwd データベース内でネットグループ名を見つけた場合は、ネットグループマップでユーザー分類を調べます。mountd デーモンは、/etc/dfs/dfstab ファイル内でネットグループ名を見つけた場合は、ネットグループマップでマシン分類を調べます。rlogin と rsh (インターフェースを使用するプログラムならどれでも) は、/etc/hosts.equiv または .rhosts ファイル内でネットグループ名を見つけた場合は、ネットグループマップでマシン分類とユーザー分類の両方を調べます。
ネットワークに新しい NIS ユーザーまたはマシンを追加する場合は、netgroup 入力ファイルの該当ネットグループに追加してください。次に、make でネットグループマップを作成し、これを yppush コマンドですべての NIS サーバーに転送してください。ネットグループおよびネットグループ入力ファイル構文の詳細は、netgroup(4) のマニュアルページを参照してください。
この節では、NIS マップの管理方法について説明します。
マップ情報は、ypcat、ypwhich、ypmatch コマンドを使っていつでも取得できます。以下の例では、mapname はマップの正式名とニックネーム(存在する場合)の両方を意味します。
マップのすべての値を表示するには、次のように入力してください。
% ypcat mapname
マップのキーと値 (存在する場合) の両方を表示するには、次のように入力してください。
% ypcat -k mapname
マップのすべてのニックネームを表示するには、以下のコマンドのどれかを入力してください。
% ypcat -x % ypwhich -x % ypmatch -x
使用可能なすべてのマップとマスターサーバーを表示するには、次のように入力してください。
% ypwhich -m
特定マップのマスターサーバーを表示するには、次のように入力してください。
% ypwhich -m mapname
キーをマップのエントリと比較するには、次のように入力してください。
% ypmatch key mapname
見つけたい項目がマップのキーでない場合は、次のように入力してください。
% ypcat mapname | grep item
item は、見つけたい情報です。他のドメインに関する情報を取得するには、これらのコマンドの -d domainname オプションを指定してください。
デフォルト以外のドメインの情報を要求するマシンが、そのドメインに対するバインドを持っていない場合は、このマシンは ypbind で /var/yp/binding/domainname/ypservers ファイルを参照して、そのドメインのサーバーリストを検索します。このファイルが存在しない場合は、ypbind は RPC 同報通信を送出してサーバーを検索します。この場合、検索先であるドメインのサーバーは、要求元マシンと同じサブネットに存在している必要があります。
選択されたマップのマスターサーバーを変更するには、まず新しい NIS マスターサーバー上にマップを作成しなければなりません。古いマスターサーバー名は既存のマップにキーと値のペアとして発生するので (このペアは makedbm で自動的に挿入される)、ypxfr でマップを新しいマスターサーバーにコピーしたり、コピーを新しいマスターサーバーに転送するだけでは不十分です。キーと新しいマスターサーバー名との対応づけをし直す必要があります。マップに ASCII ソースファイルが存在する場合は、このファイルを新しいマスターサーバーにコピーしてください。
sites.byname というサンプル NIS マップを作成し直す手順を以下に示します。
新しいマスターサーバーにスーパユーザーとしてログインし、次のように入力します。
newmaster# cd /var/yp
作成するマップを指定する前に、Makefile にこの新しいマップのエントリが必要です。ない場合は、最初に Makefile を編集します。
マップを更新または再作成するには、次のように入力します。
newmaster# make sites.byname
古いマスターサーバーが NIS サーバーとして残っている場合は、古いマスターサーバーにリモートログイン (rlogin) してから、Makefile を編集します。sites.byname を作成した Makefile 内のセクションをコメントアウトして、このセクションで sites.bynam が再び作成されないようにします。
sites.byname が ndbm ファイルとしてだけ存在している場合は、以下に示す makedbm で任意の NIS サーバーからコピーを取り出し、実行して sites.byname を新しいマスターサーバー上で作成し直します。
newmaster# cd /var/yp newmaster# ypcat -k sites.byname | makedbm - domain /sites.byname
新しいマスターサーバー上でマップが作成されたら、そのコピーをこのマスターサーバーのスレーブサーバーに送信します。ただしこの場合、yppush を使用しないでください。yppush を使用すると、スレーブサーバーは新しいマスターサーバーからではなく古いマスターサーバーから新しいコピーを取得します。このような動作を回避するには、一般にマップのコピーを新しいマスターサーバーから古いマスターサーバーに送り返すという方法が用いられます。この操作を行うには、古いマスターサーバーのスーパユーザーとなり、次のように入力します。
oldmaster# /usr/lib/netsvc/yp/ypxfr -h newmaster sites.byname
これで、yppush を使用できます。スレーブサーバーは、古いマスターサーバーをカレントマスターサーバーとして認識しているので、スレーブサーバーは、マップのカレントバージョンを古いマスターサーバーから取得しようとします。それから、スレーブサーバーは、新しいマスターサーバーがカレントマスターサーバーとして指定されている新しいマップを取得します。
この方法が失敗した場合は、各 NIS サーバーのルートとしてログインし、上記の ypxfr コマンドを実行してください。この方法は、面倒ですが必ず成功します。
NIS は、設定ファイルを正確に構文解析します。このため NIS 管理は容易になりますが、設定ファイルおよび構成ファイルにおける変更により、NIS の動作は影響を受けます。
ファイルには次のものがあります。
/var/yp/Makefile
/etc/resolv.conf
このファイルを追加または削除することで、DNS 転送が可能または不可になります。
$PWDIR/security/passwd.adjunct
このファイルを追加または削除することで、C2 セキュリティが可能または不可になります。($PWDIR
は、/var/yp/Makefile で定義されます。)
上記ファイルを更新するには、以下の手順に従ってください。
次のように入力して NIS サーバーを停止します。
# /etc/init.d/yp stop
必要に応じてファイルを変更します。
次のように入力して NIS サーバーを再起動します。
# /etc/init.d/yp start
NIS のマップまたはマップソースファイルを更新する場合は、NIS を停止および起動する必要はありません。
以下の点に注意してください。
NIS マスターサーバーからマップまたはソースファイルを削除しても、スレーブサーバー上の対応するマップまたはソースファイルは自動的には削除されません。スレーブサーバー上の対応するマップまたはソースファイルの削除は、NIS 管理者が手作業で行う必要があります。
新しいマップは、自動的には既存のスレーブサーバーに転送されません。新しいマップを既存のスレーブサーバーに転送するには、NIS 管理者がそのスレーブサーバーで ypxfr を実行してください。
/var/yp で提供されたデフォルトの Makefile を更新することにより、NIS 管理者のニーズを満たすことができます。(今後に備えて、必ずこのオリジナルの Makefile のコピーを保存しておいてください。) Makefile を使用すると、マップの追加または削除、および一部のディレクトリ名の変更ができます。
新しい NIS マップを追加するには、マップの ndbm ファイルのコピーをドメインに存在する各 NIS サーバーの /var/yp/domainname ディレクトリに転送する必要があります。この転送は通常、Makefile が自動的に行います。どの NIS サーバーがマップのマスターサーバーであるかを決定したら、マップを容易に作成し直せるようにマスターサーバーの Makefile を更新してください。異なる複数のサーバーを異なる複数のマップのマスターサーバーとして設定することも可能ですが、このようにするとたいていの場合、管理上の混乱を招きます。したがって、1 つのサーバーだけをすべてのマップのマスターサーバーとして設定することをお勧めします。
一般に、人間が判読可能なテキストファイルは、makedbm に対する入力として適したものにするために awk、sed、grep でフィルタリングされます。デフォルトの Makefile を参照してください。make コマンドの概要については、make(15) のマニュアルページを参照してください。
make が認識する従属性の作成方法を決定する際には、Makefile にすでに備わっているメカニズムを使用してください。make では従属ルール内の行の始まりにタブが存在するか否かが重要であり、タブが存在しないというだけでエントリが無効になることがあるので注意してください。
Makefile にエントリを追加するには、以下の作業を行ってください。
データベース名を all ルールに追加します。
time ルールを作成します。
データベースのルールを追加します。
たとえば、Makefile をオートマウンタ入力ファイルで動作させるには、auto_direct.time および auto_home.time マップを NIS データベースに追加してください。
NIS データベースにこれらのマップを追加するには、以下の手順に従ってください。
all という語で始まる行に、追加したいデータベース名 (1 つまたは複数) を追加します。
all: passwd group hosts ethers networks rpc services protocols ¥ netgroup bootparams aliases netid netmasks ¥ auto_direct auto_home auto_direct.time auto_home.time
エントリの順序は任意ですが、継続行の始まりの空白はスペースではなくタブにしてください。
Makefile の終わりに以下の行を追加します。
auto_direct: auto_direct.time auto_home: auto_home.time
ファイル中央に auto_direct.time エントリを追加します。
auto_direct.time: $(DIR)/auto_direct @(while read L; do echo $$L; done < $(DIR)/auto_direct $(CHKPIPE)) | ¥ (sed -e "/^#/d" -e "s/#.*$$//" -e "/^ *$$/d" $(CHKPIPE)) | ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/auto_direct; @touch auto_direct.time; @echo "updated auto_direct"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) auto_direct; fi @if [ ! $(NOPUSH) ]; then echo "pushed auto_direct"; fi
CHKPIPE は、次のコマンドに結果を渡す (パイピングする) 前に、パイプ (|) の左側の動作が正しく行われたことを確認します。パイプの左側の動作が正しく行われなかった場合は、「NIS make terminated」というメッセージが表示されてプロセスは終了します。
NOPUSH は、Makefile が yppush を呼び出して新しいマップをスレーブサーバーに転送することを防止します。NOPUSH が設定されていない場合は、転送は自動的に行われます。
継続行の始まりにある while ループは、バックスラッシュで拡張された行を入力ファイルから削除するためのものです。sed スクリプトはコメント行および空行を削除し、makedbm に出力を渡します。
他のすべてのオートマウンタマップ (auto_home や他のデフォルトでないマップなど) でも、同じ手順が必要となります。
# make name
name は、作成するマップ名です。たとえば、auto_direct などです。
Makefile に特定データベースのマップを作成しない場合は、Makefile を以下のように編集してください。
all ルールからデータベース名を削除します。
削除するデータベースのデータベースルールを削除またはコメントアウトします。
time ルールを削除します。
たとえば、hosts データベースを削除するには、hosts: hosts.time エントリを削除します。
マスターサーバーとスレーブサーバーからマップを削除します。
Makefile の先頭で定義されている変数の設定値の変更は、等号 (=) の右側の値を変更するだけで行うことができます。たとえば、マップを作成するための入力として、/etc に存在するファイルではなく別のディレクトリに存在するファイル (たとえば、/var/etc/domainname など) を使用する場合は、DIR
値を DIR=/etc から DIR=/var/etc/domainname に変更してください。また、PWDIR 値を PWDIR=/etc から PWDIR=/var/etc/domainname に変更することもできます。
変数は次のとおりです。
DIR=
passwd と shadow を除くすべての NIS 入力ファイルが存在するディレクトリ。デフォルト値は /etc です。マスターサーバーの /etc ディレクトリのファイルを NIS 入力ファイルとして使用することは望ましくないので、この値は変更しなければなりません。
PWDIR
NIS 入力ファイル passwd と shadow が存在するディレクトリ。マスターサーバーの /etc ディレクトリのファイルを NIS 入力ファイルとして使用することは望ましくないので、この値は変更しなければなりません。
DOM
NISドメイン名。DOM のデフォルト値は、domainname コマンドで設定されます。大部分の NIS コマンドではカレントマシンのドメイン(カレントマシンの /etc/defaultdomain ファイルに設定されている)が使用されることに注意してください。
NIS のインストール終了後、頻繁に更新しなければならないマップとまったく更新する必要がないマップがあることに気づくかもしれません。たとえば、passwd.byname マップは、大企業のネットワークでは頻繁に更新されることがあります。一方、auto_master マップはまったくではないにしてもほとんど更新されません。
マップを更新する必要がある場合は、マップがデフォルトのマップか否かによって 2 つの更新手順のどちらかを使用できます。
この節では、さまざまな更新ツールの使用方法について説明します。実際上、これらの更新ツールは、システム起動後にデフォルトでないマップを追加する場合、または一群の NIS サーバーを変更する場合にだけ使用できます。
デフォルトのセットと共に提供されたマップを更新するには、以下の手順に従ってください。
マスターサーバーのルートになります。
必ずマスターサーバーだけの NIS マップを更新します。
更新するマップのソースファイルを編集します (このファイルが /etc に存在しているか、選択された他のディレクトリに存在しているかは問題ではありません)。
次のように入力します。
# cd /var/yp# make mapname
make コマンドは、対応するファイルに対して NIS 管理者が行った変更に従ってマップを更新します。make コマンドはまた、これらの変更を他のサーバーに反映します。
デフォルトでないマップを更新するには、以下の手順に従ってください。
対応するテキストファイルを作成または編集します。
新しいマップまたは更新されたマップを作成 (または再作成) します。マップ作成には 2 つの方法があります。
Makefile を使用する方法。デフォルトでないマップを作成するには、この方法を用います。Makefile にマップのエントリが存在する場合は、make name を実行するだけです (name は作成するマップ名)。Makefile にマップのエントリが存在しない場合は、「Makefile の更新と使用」を参照してエントリを作成をしてください。
/usr/sbin/makedbm プログラムを使用する方法。(このコマンドの詳細は、makedbm(1M) のマニュアルページで説明されています。)
入力ファイルが存在しない場合は、makedbm でマップを更新する方法は 2 つあります。
makedbm -u の出力先を一時ファイルに変更し、一時ファイルを更新し、更新済みの一時ファイルを使用します。
makedbm -u の出力を makedbm に渡されるパイプライン内で動作させます。分解されたマップを awk、sed、または cat で更新できる場合は、この方法を用います。
新しいマップを作成するには、入力として既存のテキストファイルを使用する方法、または入力として標準入力を使用する方法のどちらかを使用できます。
テキストファイル /var/yp/mymap.asc がマスターサーバー上のエディタまたはシェルスクリプトで作成されていると仮定します。この場合、このファイルから NIS マップを作成し、作成された NIS マップを homedomain サブディレクトリに入れるには、マスターサーバー上で次のように入力してください。
# cd /var/yp # makedbm mymap .asc homedomain/mymap
mymap マップは現在、マスターサーバーの homedomain ディレクトリに存在しています。この新しいマップをスレーブサーバーに転送するには、ypxfr を実行してください。
mymap にエントリを追加することは簡単です。最初に、対応するテキストファイルを更新せずに実際の dbm ファイルを更新すると、更新は反映されないので、テキストファイル /var/yp/mymap.asc を更新します。次に、上記のような makedbm を実行してください。
オリジナルのテキストファイルが存在しない場合は、キーボードから makedbm に次のように入力して NIS マップを作成してください (最後に Control-D と入力)。
ypmaster# cd /var/yp ypmaster# makedbm - homedomain/myma key1 value1 key2 value2 key3 value3 ypmaster#
後でマップを更新する必要がある場合は、makedbm でマップを取り出し、一時ファイルを作成できます。マップを分解し、一時ファイルを作成するには、次のように入力してください。
% cd /var/yp % makedbm -u homedomain/ mymap > mymap.temp
作成される一時ファイル mymap.temp には、1 行につき 1 つのエントリが存在します。このファイルは、任意のテキストエディタで必要に応じて編集できます。
マップを更新するには、次のように入力して、更新後の一時ファイル名を makedbm につけます。
% makedbm mymap.temp homedomain/mymap % rm mymap.temp
次に、ルートになり次のように入力してマップをスレーブサーバーに反映させます。
# yppush mymap
ここでは makedbm でマップを作成する方法について説明してきましたが、実際に行わなければならないほとんどすべての作業は、ypinit と Makefile で行うことができます。ただし、システム起動後にデフォルトでないマップをデータベースに追加したり一群の NIS サーバーを変更しない場合に限ります。
/var/yp の Makefile を使用しても他の手順を使用しても、正しく作成された dbm ファイルの新しいペアをマスターサーバー上の maps ディレクトリに入れなければなりません。
マップが更新されると、Makefile が yppush で新しいマップをスレーブサーバーに転送させます (ただし、NOPUSH
が Makefile に設定されていない場合)。転送させるための動作手順は次のとおりです。スレーブサーバー上の ypserv デーモンにマップ転送リクエストを送信します。ypserv デーモンが ypxfr プロセスを起動します。ypxfrd プロセスがマスターサーバー上の ypxfr デーモンに連絡します。いくつかの基本検査 (マップが実際に更新されていることの確認など) が行われます。マップが転送されると、スレーブサーバー上の ypxfrd が、転送が成功したことを yppush プロセスに通知します。
上記手順は、新しく作成されたマップがスレーブサーバー上に存在しない場合は動作しません。新しいマップを、スレーブサーバー上の ypxfr でスレーブサーバーに転送する必要があります。
マップ転送は失敗することがありますが、失敗した場合は ypxfr を使って手作業で新しいマップ情報を転送してください。ypxfr は、2 つの方法で使用できます。1 つはルートの crontab ファイルを定期的に使用する方法であり、もう 1 つはコマンド行から対話形式で使用する方法です。これらの方法については、以下で説明します。
マップの更新頻度は、マップによってそれぞれ異なります。たとえば、デフォルトのマップである protocols.byname やデフォルトでないマップの auto_master など一部のマップは何カ月も更新されないことがありますが、一方、passwd.byname など一部のマップは 1 日に数回更新されることがあります。crontab コマンドでマップ転送をスケジュールすると、個々のマップに対して特定の更新時間を設定できます。
マップに適切な頻度で ypxfr を定期的に実行するには、各スレーブサーバー上のルートの crontab ファイルに、該当する ypxfr エントリを入れる必要があります。ypxfr は、マスターサーバー上のコピーがローカルのコピーより新しい場合に限り、マスターサーバーと連絡をとり、マップを転送します。
デフォルトの -m オプションが指定されている rpc.yppasswdd をマスターサーバー上で実行すると、誰かが yp パスワードを変更するたびに、passwd デーモンが make を実行して passwd マップを作成し直します。
NIS 管理者は、各マップに対する crontab エントリを個々に作成するという方法ではなく、ルートの crontab コマンドでシェルスクリプトを実行してすべてのマップを定期的に更新するという方法を使用することもできます。マップ更新シェルスクリプトのサンプルは、/usr/lib/netsvc/yp ディレクトリに入っています。スクリプト名は、ypxfr_1perday、ypxfr_1perhour、ypxfr_2perday です。これらのシェルスクリプトを、更新または置換することによって、容易にサイト要件に適合させることができます。例 18-1 は、デフォルトの ypxfr_1perday シェルスクリプトを示しています。
#! /bin/sh # # ypxfr_1perday.sh - YP マップの検査・更新を毎日行う PATH=/bin:/usr/bin:/usr/lib/netsvc/yp:$PATH export PATH # set -xv ypxfr group.byname ypxfr group.bygid ypxfr protocols.byname ypxfr protocols.bynumber ypxfr networks.byname ypxfr networks.byaddr ypxfr services.byname ypxfr ypservers
このシェルスクリプトは、ルートの crontab が毎日実行されると、マップを 1 日に 1 回更新します。NIS 管理者は、1 週間に 1 回、1 ヶ月に 1回、または 1 時間に 1 回などといった頻度でマップを更新するスクリプトを使用することもできますが、マップを頻繁に更新すると性能が低下するので注意してください。
NIS ドメインに対して構成された各スレーブサーバー上で同じシェルスクリプトを root で実行してください。各サーバー上の実行時間を変更して、マスターサーバーが動作不能にならないようにしてください。
特定のスレーブサーバーからマップを転送する場合は、シェルスクリプトの ypxfr の -h machine オプションを使用してください。シェルスクリプトに記述するコマンドの構文は、次のとおりです。
/usr/lib/netsvc/yp/ypxfr -h machine [ -c ] mapname
machine は、転送するマップが存在するサーバー名です。mapname は、要求されたマップ名です。マシンを指定することなく -h オプションを指定すると、ypxfr はマスターサーバーからマップを取得しようとします。ypxfr 実行時に ypserv がローカルに実行されていない場合は、ypxfr がローカル ypserver にカレントマップリクエストの取消しを送信しないよう、-c フラグを使用してください。
-s domain オプションを使用すると、別のドメインからローカルドメインにマップを転送できます。これらのマップは、各ドメインにおいて同じでなければなりません。たとえば、2 つのドメインが同じ services.byname マップおよび services.byaddr マップを共有することがあります。また、より細かい制御を行うための rcp または rdist を使用してファイルを複数のドメインに転送することもできます。
2 番目の方法である ypxfr の起動とは、ypxfr をコマンドとして実行することです。一般に、ypxfr をコマンドとして実行するのは例外的状況においてだけです。たとえば、一時的に NIS サーバーを設定して試験環境を作成する場合や、他のサーバーと調和して動作不能になっていた NIS サーバーを迅速に取得しようとする場合などです。
ypxfr が試みた転送およびその転送結果は、ログファイルに記録されます。/var/yp/ypxfr.log というファイルが存在する場合は、転送結果はこのファイルに記録されます。このログファイルのサイズを制限する試みは行われません。このログファイルのサイズが無限に大きくなることを防止するには、ときどき次のように入力してこのログファイルを空にしてください。
# cd /var/yp # cp ypxfr.log ypxfr.log.old # cat /dev/null > /var/yp/ypxfr.log
これらのコマンドは、crontab で週間に 1 回実行させることができます。記録をオフにするには、ログファイルを削除してください。
NIS 実行後、ypinit に与えられた初期リストに含まれていなかった新しいスレーブサーバーを追加する必要があるかもしれません。
新しいスレーブサーバーを追加するには、以下の手順に従ってください。
ルートとしてマスターサーバーにログインします。
次のように入力して NIS ドメインディレクトリに移ります。
# cd /var/yp/domainname
次のように入力して ypservers ファイルを変換します。
# makedbm -u ypservers >/tmp/temp_file
makedbm コマンドは、ypservers を ndbm フォーマットから /tmp/temp_file (一時 ASCII ファイル) に変換します。
テキストエディタで /tmp/temp_file ファイルを編集します。つまり、新しいスレーブサーバー名をサーバーリストに追加します。この後、 /tmp/temp_file ファイルを保存し、閉じます。
/temp_file で入力ファイルとして makedbm コマンドを実行し、出力ファイルとして ypservers を実行します。
# makedbm /tmp/temp_file ypservers
makedbm は、ypservers を変換して ndbm フォーマットに戻します。
ypservers の ASCII ファイルは存在しないので、次のように入力して ypservers マップが適切なものであることを確認します。
slave3# makedbm -u ypservers
makedbm コマンドは、画面に ypservers の各エントリを表示します。
ypservers にマシン名が存在しない場合は、ypservers はマップファイルの更新を受信しません。これは、yppush がこのマップでスレーブサーバーリストを調べるからです。
マスターサーバーから一群の NIS マップをコピーして新しいスレーブサーバーの NISドメインディレクトリを設定します。
この操作を行うには、スーパユーザーとして新しい NIS スレーブサーバーにログインし、ypinit および ypbind コマンドを実行します。
slave3# cd /var/yp slave3# ypinit -c list of servers slave3# /usr/lib/netsvc/yp/ypbind
このマシンをスレーブサーバーとして初期化するには、次のように入力します。
# /usr/sbin/ypinit -s ypmaster
ypmaster は、既存の NIS マスターサーバーのマシン名です。
ypstop を実行して、NIS クライアントとして実行されているマシンを停止します。
# /usr/lib/netsvc/up/ypstop
ypstart を実行して NIS スレーブサーバーのサービスを開始します。
# /usr/lib/netsvc/up/ypstart
NIS スレーブサーバーの設定の詳細は、『Solaris ネーミングの設定と構成』を参照してください。
$PWDIR/security/passwd.adjunct ファイルが存在する場合は、C2 セキュリティが自動的に起動されます。$PWDIR
は、/var/yp/Makefile で定義されます。C2 セキュリティモードでは、passwd.adjunct ファイルで passwd.adjunct NIS マップが作成されます。C2 セキュリティモードでは、passwd.adjunct ファイルと shadow ファイルの両方を使用してセキュリティを管理できます。passwd.adjunct ファイルは、次のように入力された場合にだけ処理されます。
# make passwd.adjunct
make passwd コマンドは、NIS 管理者が C2 セキュリティモードで make を手作業で実行した場合にだけ passwd マップ (passwd.adjunct マップではない) を処理します。
マシンの NIS ドメイン名を変更するには、以下の手順に従ってください。
マシンの /etc/defaultdomain ファイルを編集して、現在の内容をマシン用の新しいドメイン名に置き換えます。
たとえば、現在のドメイン名である sales.doc.com を research.doc.com に変更したりします。
domainname `cat /etc/defaultdomain' を実行します。
マシンを NIS クライアント、スレーブサーバー、またはマスターサーバーとして設定します。
詳細は、『Solaris ネーミングの設定と構成』を参照してください。
一般に NIS クライアントは、マシン名とアドレスの検索に NIS だけが使用されるように、nsswitch.conf ファイルで構成されます。このような検索が失敗した場合は、NIS サーバーはこれらの結果を DNS に転送します。
マシン名とアドレスの検索が最初に NIS で行われ、次に DNS で行われるように構成するには、以下の手順に従ってください。
2 つのマップ (hosts.byname と hosts.byaddr) に YP_INTERDOMAIN キーが必要です。 このキーを設定するには、Makefile を編集します。つまり、Makefile ファイルの先頭部分の行を次のように変更します。
#B=-b B=
を
B=-b #B=
に変更
この変更が行われると、マップ作成時に makedbm が -b フラグで起動されるよう要求されて、また YP_INTERDOMAIN キーが ndbm ファイルに挿入されます。
make を実行して上記マップを作成し直します。
# /usr/ccs/bin/make hosts
有効な名前のサーバーを指定している /etc/resolv.conf ファイルが NIS サーバーに存在することを確認します。
DNS 転送を行うには、各サーバーを ypstop コマンドで停止します。
# /usr/lib/netsvc/yp/ypstop
各サーバーを ypstart コマンドで再起動します。
# /usr/lib/netsvc/yp/ypstart
この NIS インプリメンテーションでは、サーバーに /etc/resolve.conf ファイルが存在する場合は、ypstart が -d オプションで自動的に ypserv デーモンを起動して DNS にリクエストを転送します。
Solaris リリース 2 が実行されていない NIS サーバーを使用している場合は、参照される DNS のホストマップに YP_INTERDOMAIN キーが存在することを確認してください。
これまでの説明の大部分では、NISドメインのマスターサーバーとスレーブサーバーの両方で Solaris リリース 2 が実行されていることが前提となっています。したがって、それ以外の場合には、問題が発生することがあります。混在 NIS ドメインにおける問題を回避する方法については、表 18-1 にまとめてあります。"4.0.3+" という表記は、「SunOS オペレーティングシステムのリリース 4.0.3 以降」であることを意味します。makedbm -b コマンドは、Makefile の "-B" 変数に対する参照です。
表 18-1 混在 NIS ドメインにおける NIS/DNS
スレーブサーバー |
マスターサーバー |
||
---|---|---|---|
|
4.0.3+ |
Solaris NIS |
|
4.0.3+ |
マスターサーバー : makedbm -b スレーブサーバー: ypxfr |
マスターサーバー : makedbm -b スレーブサーバー :ypxfr -b |
マスターサーバー : ypserv -d スレーブサーバー :ypxfr -b |
Solaris NIS |
マスターサーバー : makedbm -b スレーブサーバー: ypxfr |
マスターサーバー : makedbm -b スレーブサーバー: ypxfr |
マスターサーバー : ypserv -d スレーブサーバー: ypxfr が存在する resolve.conf または ypxfr -b |
マスターサーバー上の ypserv が使用不可になっている場合は、NIS マップを更新できません。ネットワーク上の NIS をオフにする場合は、リブート後に次のように入力して ypbind ファイルを ypbind.orig に名前を変更するだけで NIS を使用不可にできます。
% mv /usr/lib/netsvc/yp/ypbind /usr/lib/netsvc/yp/ypbind.orig
リブート後に特定の NIS スレーブサーバーまたはマスターサーバー上の NIS を使用不可にする場合は、その特定の NIS スレーブサーバーまたはマスターサーバー上で次のように入力してください。
% mv /usr/lib/netsvc/yp/ypserv /usr/lib/netsvc/yp/ypserv.orig
NIS を直ちに停止するには、次のように入力してください。
% /usr/lib/netsvc/yp/ypstop
NIS サービスは、リブートが行われると自動的に再起動されます。ただし、ypbind および ypserv ファイルで上記のような名前の変更が行われない場合です。
NIS の問題解決については、「NIS の問題と対策」および 「NIS+ と NIS の互換性の問題」を参照してください。
一般的な名前空間エラーメッセージのアルファベット順のリスト、およびこれらのエラーメッセージの意味については、付録 B 「エラーメッセージ」 を参照してください。