この章では、NIS の管理方法について説明します。 内容は次のとおりです。
セキュリティの関係上、次の点に注意してください。
マスターサーバーの NIS マップへのアクセスは制限します。
未許可アクセスを防止するためには、NIS パスワードマップの作成に使用されたファイルに root エントリを含めないでください。 したがって、root エントリをこのパスワードファイルから削除して、このパスワードファイルをマスターサーバーの /etc ディレクトリ以外のディレクトリにおく必要があります。 このディレクトリへの未許可アクセスは、防止しなければなりません。
たとえば、マスターサーバーのパスワード入力ファイルは、別のファイルへのリンクではなく Makefile に指定されている限り、/var/yp/ などのディレクトリに存在するか選択されたディレクトリに存在します。 /usr/lib/netsvc/yp/ypstart スクリプトは、Makefile に指定された構成に従って自動的に適切なディレクトリオプションを設定します。
この NIS 実装では、NIS パスワードマップを作成するための入力として、Solaris 1 バージョンの passwd ファイルのフォーマットに加え、Solaris 2 の passwd ファイルと shadow ファイルのフォーマットも使用できます。
この節では、ユーザーパスワードの設定、NIS ドメインへの新しいユーザーの追加、ネットグループ (netgroups) へのユーザーの割り当てについて説明します。
NIS マスターサーバーでスーパーユーザーになります。
useradd コマンドで新しいユーザーのログイン ID を作成します。
# useradd userID |
userID は新しいユーザーのログイン ID です。 このコマンドは、NIS マスターサーバー上の /etc/passwd ファイルと /etc/shadow ファイルにエントリを作成します。
新しいユーザーの初期パスワードを作成します。
新しいユーザーがログインするための初期パスワードを作成するには、passwd コマンドを実行します。
# passwd userID |
userID は新しいユーザーのログイン ID です。 このユーザーに割り当てるパスワードを入力するようにプロンプトが表示されます。
この手順が必要になるのは、useradd コマンドで作成されたパスワードエントリがロックされ、新しいユーザーがログインできないからです。 初期パスワードを指定することで、このパスワードエントリのロックが解除されます。
必要に応じて、マスターサーバーの passwd マップ入力ファイルに新しいエントリをコピーします。
マスターサーバー上のマップソースファイルは、/etc 以外のディレクトリにあります。 新しい行を /etc/passwd ファイルと /etc/shadow ファイルからマスターサーバー上の passwd マップ入力ファイルにコピーします。 詳細については、パスワードファイルと名前空間のセキュリティ を参照してください。
たとえば、新しいユーザー brown を追加する場合、/etc/passwd ファイルから passwd 入力ファイルにコピーする行は次のようになります。
brown:x:123:10:User brown:/home/brown:/bin/csh: |
/etc/shadow からコピーされる brown 行は次のようになります。
brown:W12345GkHic:6445:::::: |
パスワード入力ファイルが格納されているディレクトリが Makefile で正しく指定されていることを確認します。
必要に応じて、/etc/passwd ファイルと /etc/shadow ファイルから新しいユーザーのエントリを削除します。
セキュリティの関係上、NIS マスターサーバーの /etc/passwd ファイルと /etc/shadow ファイルでユーザーエントリを保持することは望ましくありません。 他のディレクトリに存在する NIS マップソースファイルに新しいユーザーのエントリをコピーした後、マスターサーバー上で userdel コマンドを使用して新しいユーザーを削除します。
たとえば、マスターサーバーの /etc ファイルから新しいユーザー brown を削除するには次のように入力します。
# userdel brown |
マスターサーバー上の passwd 入力ファイルを更新した後、ソースファイルが存在するディレクトリで make を実行して passwd マップを更新します。
#userdel brown # cd /var/yp # /usr/ccs/bin/make passwd |
新しいユーザーのログイン ID に割り当てられた初期パスワードを新しいユーザーに通知します。
ログイン後、新しいユーザーはいつでも passwd を実行して別のパスワードに変更できます。
ユーザーは passwd を実行してパスワードを変更します。
% passwd username
username はユーザー名です。ユーザーがパスワードを変更する前に、NIS 管理者はマスターサーバー上で rpc.yppasswdd デーモンを起動してパスワードファイルを更新しなければなりません。 rpc.yppasswdd デーモンを起動するコマンドは、/usr/lib/netsvc/yp/ypstart ファイルにすでに存在しています。
rpc.yppasswdd デーモンは、マスターサーバー上の ypstart で自動的に起動されます。 rpc.yppasswdd に -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
と正確に指定しなければなりません。正確に指定しないと、不適切な処理が行われます。
NIS ネットグループは、NIS 管理者が管理目的のために定義するユーザーまたはマシンのグループ (集合) です。 たとえば、次のようなネットグループを作成できます。
特定マシンにアクセスできる一群のユーザーを定義するネットグループ
特定のファイルシステムにアクセスできる一群の NFS クライアントマシンを定義するネットグループ
特定の NIS ドメインのすべてのマシンに対して管理者権限を持つ一群のユーザーを定義するネットグループ
各ネットグループには、1 つのネットグループ名が与えられます。 ネットグループはアクセス権を直接設定しません。 代わりに、ユーザー名またはマシン名が一般に使用される場所ではネットグループ名が他の NIS マップで使用されます。 たとえば、netadmins というネットワーク管理者ネットグループを作成したと仮定します。 netadmins ネットグループのすべてのメンバーに特定マシンへのアクセス権を与えるには、そのマシンの /etc/passwd ファイルに netadmin エントリを追加するだけで、 ネットグループ名を /etc/netgroup ファイルに追加して、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 という名前のネットグループが作成されます。 これらの各ネットグループは、遠隔ドメイン 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 (ruserok インタフェースを使用するプログラムならどれでも) は、/etc/hosts.equiv または .rhosts ファイル内でネットグループ名を見つけた場合に、ネットグループマップでマシン分類とユーザー分類の両方を調べます。
ネットワークに新しい NIS ユーザーまたはマシンを追加する場合は、netgroup 入力ファイルの該当ネットグループに追加してください。 次に、make でネットグループマップを作成し、これを yppush コマンドですべての NIS サーバーに転送してください。 ネットグループおよびネットグループ入力ファイル構文の使い方の詳細については、netgroup(4) のマニュアルページを参照してください。
このセクションには次の情報が含まれます。
マップ情報は、ypcat、ypwhich、ypmatch コマンドを使っていつでも取得できます。 以下の例では、mapname はマップの正式名とニックネーム(存在する場合)の両方を意味します。
マップのすべての値を表示するには、次のように入力します。
% ypcat mapname |
マップのキーと値 (存在する場合) の両方を表示するには、次のように入力します。
% ypcat -k mapname |
マップのすべてのニックネームを表示するには、次のいずれかのコマンドを入力します。
% ypcat -x % ypmatch -x % ypwhich -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 ソースファイルが存在する場合は、このファイルを新しいマスターサーバーにコピーします。
スーパーユーザーになります。
新しいマスターサーバーにスーパユーザーとしてログインして、次のように入力します。
newmaster# cd /var/yp |
作成するマップを指定する前に、Makefile にこの新しいマップのエントリが必要です。 新しいマップのエントリがない場合は、最初に、sites.byname というマップを使用して Makefile を編集します。
マップを更新または再作成するには、次のように入力します。
newmaster# make sites.byname |
古いマスターサーバーが NIS サーバーとして残っている場合は、古いマスターサーバーに遠隔ログイン (rlogin) してから、Makefile を編集します。 sites.byname を作成した Makefile 内のセクションをコメントアウトして、このセクションで sites.byname が再び作成されないようにします。
sites.byname だけが ndbm ファイルとして存在している場合は、新しいマスターサーバー上に作成し直します。 まず任意の NIS サーバーからコピーを分解し、次に makedbm を使ってそれを実行します。
newmaster# cd /var/yp newmaster# ypcat sites.byname | makedbm -domain/sites.byname |
新しいマスターサーバー上でマップが作成されたら、そのコピーをこのマスターサーバーのスレーブサーバーに送信します。 この場合、yppush を使用しないでください。yppush を使用すると、スレーブサーバーは新しいマスターサーバーからではなく古いマスターサーバーから新しいコピーを取得します。 このような動作を回避するには、一般にマップのコピーを新しいマスターサーバーから古いマスターサーバーに送り返すという方法が用いられます。 この操作を行うには、古いマスターサーバーでスーパーユーザーとなり次のように入力します。
oldmaster# /usr/lib/netsvc/yp/ypxfr -h newmaster sites.byname |
これで、yppush を使用できます。 スレーブサーバーは古いマスターサーバーを現行のマスターサーバーとして認識しているので、マップの現行バージョンを古いマスターサーバーから取得しようとします。 クライアントがこの処理を行うときは、新しいマスターサーバーが現行のマスターサーバーとして指定されている新しいマップを取得します。
この方法が失敗した場合は、各 NIS サーバーの root としてログインして上記の ypxfr コマンドを実行してください。
NIS は設定ファイルを正確に構文解析します。 このため NIS 管理は容易になりますが、設定ファイルおよび構成ファイルにおける変更により、NIS の動作は影響を受けます。
以下のファイルを変更する場合は、この節の手順を使用します。
/etc/resolv.conf。このファイルを追加または削除することで、DNS 転送が可能または不可になる
$PWDIR/security/passwd.adjunct。このファイルを追加したり削除したりすることで、C2
セキュリティが可能または不可になる ($PWDIR
は、/var/yp/Makefile で定義される)。
スーパーユーザーになります。
NIS サーバーを停止します。
# /etc/init.d/ypstop |
必要に応じてファイルを変更します。
NIS サーバーを再起動します。
# /etc/init.d/yp start |
NIS のマップまたはマップソースファイルを更新する場合は、NIS を停止および起動する必要はありません。
次の点に注意してください。
NIS マスターサーバーからマップまたはソースファイルを削除しても、スレーブサーバー上の対応するマップまたはソースファイルは自動的には削除されません。 スレーブサーバー上の対応するマップまたはソースファイルの削除は、NIS 管理者が手作業で行う必要があります。
新しいマップは、自動的には既存のスレーブサーバーに転送されません。 新しいマップを既存のスレーブサーバーに転送するには、NIS 管理者がそのスレーブサーバーで ypxfr を実行してください。
/var/yp で提供されたデフォルトの Makefile を更新することにより、NIS 管理者のニーズを満たすことができます。 マップを追加したり削除したり、一部のディレクトリの名前を変更できます。
将来の参照のために、変更していない、元の Makefile のコピーを保存しておいてください。
新しい NIS マップを追加するには、マップの ndbm ファイルのコピーをドメインに存在する各 NIS サーバーの /var/yp/domainname ディレクトリに転送する必要があります。 通常これは、Makefile によって行われます。 どの NIS サーバーがマップのマスターサーバーであるかを決定したら、マップを容易に作成し直せるようにマスターサーバーの Makefile を更新してください。 異なるサーバーを異なるマップのマスターサーバーとして設定することも可能ですが、このようにするとたいていの場合、管理上の混乱を招きます。 したがって、1 つのサーバーだけをすべてのマップのマスターサーバーとして設定するようにしてください。
一般に、人が読めるテキストファイルは、makedbm に対する入力として適したものにするために awk、sed、grep でフィルタリングされます。 デフォルトの Makefile を参照してください。 make コマンドの概要については、make(1S) のマニュアルページを参照してください。
make が認識する従属性の作成方法を決定する際には、Makefile にすでに備わっているメカニズムを使用してください。 make では、従属ルール内の行の始まりにタブが存在するか否かが重要であることに注意してください。 他の設定が正しくても、タブが存在しないというだけでエントリが無効になることがあります。
Makefile にエントリを追加する場合は、次の作業を行ってください。
データベース名を all ルールに追加する
time ルールを作成する
データベースのルールを追加する
たとえば、Makefile をオートマウンタ入力ファイルで動作させるには、auto_direct.time および auto_home.time マップを NIS データベースに追加してください。
これらのマップを NIS データベースに追加するには、Makefile を修正する必要があります。
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 ファイルに設定されている)が使用されます。
以下の手順では、Makefile にデータベースを追加したり削除したりする方法を説明します。
スーパーユーザーとしてログインします。
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 スクリプトはコメント行と空行を削除します。
他のすべてのオートマウンタマップ (auto_home や他のデフォルトでないマップなど) でも、同じ手順が必要となります。
make を実行します。
# make mapname |
mapname は、作成するマップの名前です。
Makefile で特定データベースのマップを作成しない場合は、Makefile を以下のように編集してください。
all ルールからデータベース名を削除します。
削除するデータベースのデータベースルールを削除またはコメントアウトします。
time ルールを削除します。
たとえば、hosts データベースを削除するには、hosts: hosts.time エントリを削除します。
マスターサーバーとスレーブサーバーからマップを削除します。
NIS のインストール終了後、頻繁に更新しなければならないマップとまったく更新する必要がないマップがあることに気づくかもしれません。 たとえば、passwd.byname マップは、大企業のネットワークで頻繁に更新されることがありますが、auto_master マップはほとんど更新されません。
デフォルトの NIS マップ で説明されているように、デフォルトの NIS マップのデフォルトの位置は、/var/yp/domainname のマスターサーバー上です。domainname は NIS ドメインの名前です。 マップを更新する必要がある場合は、マップがデフォルトのマップか否かによって 2 つの更新手順のどちらかを使用できます。
この節では、さまざまな更新ツールの使用方法について説明します。 実際にはこれらの更新ツールはシステム起動後に、デフォルトでないマップを追加する場合または一群の NIS サーバーを変更する場合にだけ使用します。
デフォルトセットに付いているマップを更新する場合は、次の手順に従います。
マスターサーバー上でスーパーユーザーになります。
必ずマスターサーバー上だけで NIS マップを更新します。
更新するマップのソースファイルを編集します (このファイルが /etc に存在しているか、選択された他のディレクトリに存在しているかは問題ではありません)。
次のように入力します。
# cd /var/yp # make mapname |
make コマンドは、対応するファイルに対して NIS 管理者が行った変更に従ってマップを更新します。 make コマンドはまた、これらの変更を他のサーバーに伝播します。
マップが更新されると、Makefile は yppush
を使用して新しいマップをスレーブサーバーに伝播します (ただし、NOPUSH
が Makefile に設定されている場合を除きます)。 これは、ypserv
デーモンに通知してマップ転送要求を送ることで実行されます。 次に、スレーブサーバー上の ypserv デーモンが ypxfr プロセスを起動し、マスターサーバー上の ypxfrd デーモンに連絡します。
いくつかの基本検査 (マップが実際に更新されているかどうかの確認など) が行われてマップが転送されます。 そのあと、スレーブサーバー上の ypxfr が、転送が成功したかどうかを yppush プロセスに通知します。
上記手順は、新しく作成されたマップがスレーブサーバー上に存在しない場合は動作しません。 スレーブサーバー上で ypxfr を実行して、新しいマップをスレーブサーバーに転送する必要があります。
マップの伝播は失敗することがありますが、失敗した場合は ypxfr を使って手動で新しいマップ情報を転送する必要があります。 ypxfr は、2 つの方法で使用できます。 1 つは root の crontab ファイルを定期的に使用する方法であり、もう 1 つはコマンド行から対話形式で使用する方法です。 これらの方法については、以下で説明します。
マップの更新頻度はマップによってそれぞれ異なります。 たとえば、デフォルトのマップである protocols.byname やデフォルトでないマップの auto_master など一部のマップは何ヶ月も更新されないことがありますが、passwd.byname など一部のマップは 1 日に数回更新されることがあります。 crontab コマンドでマップ転送をスケジュールすると、個々のマップに対して特定の更新時間を設定できます。
マップに適切な頻度で ypxfr を定期的に実行するには、各スレーブサーバー上の root の crontab ファイルに、該当する ypxfr エントリを入れる必要があります。 ypxfr は、マスターサーバー上のコピーがローカルのコピーより新しい場合に限り、マスターサーバーと連絡をとりマップを転送します。
デフォルトの -m オプションが指定されている rpc.yppasswdd をマスターサーバー上で実行すると、どこかで yp パスワードが変更されるたびに、passwd デーモンが make を実行して passwd マップを作成し直します。
NIS 管理者は、各マップに対する crontab エントリを個々に作成するという方法ではなく、root の crontab コマンドでシェルスクリプトを実行してすべてのマップを定期的に更新するという方法を使用することもできます。 マップ更新シェルスクリプトのサンプルは、/usr/lib/netsvc/yp ディレクトリに入っています。 スクリプト名は、ypxfr_1perday、ypxfr_1perhour、ypxfr_2perday です。 これらのシェルスクリプトを更新または置換することによって、容易にサイト要件に適合させることができます。 例 9–1 は、デフォルトの ypxfr_1perday シェルスクリプトを示しています。
#! /bin/sh # # ypxfr_1perday.sh - Do daily yp map check/updates 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 |
このシェルスクリプトは、root の 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 週間に 1 回実行させることができます。 記録を取らないようにするには、ログファイルを削除してください。
デフォルトでないマップを更新する場合は、次の手順に従います。
対応するテキストファイルを作成または編集します。
新しいマップまたは更新されたマップを作成 (または再作成) します。 マップ作成には 2 つの方法があります。
Makefile を使用する方法。 デフォルトでないマップを作成するには、この方法をお勧めします。 Makefile にマップのエントリが存在する場合は、make name を実行します (name は作成するマップ名)。 Makefile にマップのエントリが存在しない場合は、Makefile の更新と使用 を参照してエントリを作成してください。
/usr/sbin/makedbm プログラムを使用する方法。 このコマンドの詳細については、makedbm(1M) のマニュアルページに説明されています。
入力ファイルが存在しない場合は、makedbm でマップを更新する方法は 2 つあります。
makedbm -u の出力先を一時ファイルに変更し、一時ファイルを更新して更新済みの一時ファイルを makedbm の入力として使用します。
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 にエントリを追加することは簡単です。 まず、テキストファイル /var/yp/mymap.asc を更新します。 対応するテキストファイルを更新しないで実際の dbm ファイルを更新した場合は、更新内容が失われます。 次に、上記のように makedbm を実行してください。
オリジナルのテキストファイルが存在しない場合は、キーボードから makedbm に次のように入力して NIS マップを作成します (最後に Control + D を入力します)。
ypmaster# cd /var/yp ypmaster# makedbm - homedomain/mymapkey1 value1 key2 value2 key3 value3 |
後でマップを更新する必要がある場合は、makedbm でマップを分解して一時ファイルを作成できます。 マップを分解して一時ファイルを作成するには、次のように入力します。
% cd /var/yp % makedbm -u homedomain/mymap > mymap.temp |
作成される一時ファイル mymap.temp には、1 行につき 1 つのエントリが存在します。 このファイルは、任意のテキストエディタで必要に応じて編集できます。
マップを更新するには、次のように入力して更新後の一時ファイルの名前を makedbm に指定します。
% makedbm mymap.temp homedomain/mymap % rm mymap.temp |
次に root になり、次のように入力してマップをスレーブサーバーに伝播します。
# yppush mymap |
ここまでは makedbm でマップを作成する方法について説明してきましたが、実際に必要な作業はほとんど、ypinit と Makefile で行うことができます。ただし、システム起動後にデフォルトでないマップをデータベースに追加したり NIS サーバーセットを変更したりしない場合に限ります。
/var/yp の Makefile を使用しても他の手順を使用しても、最終目的は同じです。 正しく作成された dbm ファイルの新しいペアをマスターサーバー上の maps ディレクトリに配置しなければなりません。
NIS の実行後、ypinit に指定された初期リストに含まれていなかった NIS スレーブサーバーを必要に応じて作成します。
NIS スレーブサーバーを追加する場合は、次の手順に従います。
スーパーユーザーとしてマスターサーバーにログインします。
NIS ドメインディレクトリに移動します。
# cd /var/yp/domainname |
# makedbm -u ypservers >/tmp/temp_file |
makedbm コマンドは、ypservers を ndbm フォーマットから一時 ASCII ファイル、/tmp/temp_file に変換します。
テキストエディタで /tmp/temp_file ファイルを編集します。 つまり、新しいスレーブサーバー名をサーバーリストに追加します。 この後、/tmp/temp_file ファイルを保存し、閉じます。
入力ファイルに /tmp/temp_file を指定し、出力ファイルに ypservers を指定して、makedbm コマンドを実行します。
# makedbm /tmp/temp_file ypservers |
makedbm は、ypservers を変換して ndbm フォーマットに戻します。
スレーブサーバーで次のように入力して、ypservers マップが正しいことを確認します (ypservers のASCII ファイルは存在しないため)。
slave3# makedbm -u ypservers |
makedbm コマンドは、画面に ypservers の各エントリを表示します。
ypservers にマシン名が存在しない場合は、ypservers はマップファイルの更新を受信しません。これは、yppush がこのマップでスレーブサーバーリストを調べるからです。
新しい NIS スレーブサーバーでスーパーユーザーになります。
マスターサーバーから NIS マップのセットをコピーして新しいスレーブサーバーの NISドメインディレクトリを設定します。
ypinit コマンドを実行 (起動) したら、プロンプトに従って、優先順に NIS サーバーを指定してください。
slave3# cd /var/yp slave3# ypinit -c slave3# /usr/lib/netsvc/yp/ypbind |
slave3# /usr/sbin/ypinit -s ypmaster |
ypmaster は、既存の NIS マスターサーバーのマシン名です。
ypstop を実行して、NIS クライアントとして実行されているマシンを停止します。
# /usr/lib/netsvc/yp/ypstop |
ypstart を実行して、NIS スレーブサーバーのサービスを開始します。
# /usr/lib/netsvc/yp/ypstart |
$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 クライアント、スレーブサーバー、またはマスターサーバーとして設定します。
詳細については、第 8 章「NIS サービスの設定と構成」を参照してください。
一般に NIS クライアントは、マシン名とアドレスの検索に NIS だけが使用されるように、nsswitch.conf ファイルで構成されます。 このような検索が失敗した場合は、NIS サーバーはこれらの結果を DNS に転送します。
マシンにログインして、スーパーユーザーになります。
hosts.byname と hosts.byaddr という 2 つのマップファイルには、YP_INTERDOMAIN キーが必要です。 このキーを検査するために、Makefile を編集し、次の行を変更します。
#B=-b B= |
から
B=-b #B= |
これで、マップの作成時に makedbm が -b フラグで起動され、YP_INTERDOMAIN キーが ndbm ファイルに挿入されます。
make を実行してマップを作成し直します。
# /usr/ccs/bin/make hosts |
NIS サーバーのすべての /etc/resolv.conf ファイルが有効なネームサーバーを指していることを確認します。
Solaris リリース 2 を実行していない NIS サーバーがある場合は、YP_INTERDOMAIN キーがホストマップに存在することを確認してください。
DNS 転送を有効にするために、各サーバーを停止します。
# /usr/lib/netsvc/yp/ypstop |
各サーバーを再起動します。
# /usr/lib/netsvc/yp/ypstart |
このNIS 実装では、ypstart が -d オプションを使って ypserv デーモンを自動的に起動して、DNS に要求を転送します。
マスターサーバーとスレーブサーバーのどちらも Solaris リリース 2 を実行していない場合は、次の表を参考にして問題が発生しないように対処してください。 「4.0.3+」という表記は、「SunOS のリリース 4.0.3 以降」であることを意味します。 makedbm -b コマンドは、Makefile の「B」変数への参照です。
表 9–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 スレーブサーバー: resolve.conf が存在する ypxfr または 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 ファイルの名前が上記のように変更された場合は起動されません。