Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)

第 6 章 NIS の管理 (手順)

この章では、NIS の管理方法について説明します。この章の内容は次のとおりです。


注 –

NIS サービスはサービス管理機能によって管理されます。このサービスに関する有効化、無効化、再起動などの管理アクションは svcadm コマンドを使用して実行できます。NIS で SMF を使用する場合の詳細については、「NIS とサービス管理機能」を参照してください。SMF の概要については、『Solaris のシステム管理 (基本編)』の第 18 章「サービスの管理 (概要)」を参照してください。また、詳細については、svcadm(1M) および svcs(1) のマニュアルページを参照してください。

NIS サービスの開始および停止は、ypstart および ypstop コマンドを使用しても行えます。詳細については、ypstart(1M) および ypstop(1M) のマニュアルページを参照してください。


パスワードファイルと名前空間のセキュリティー

セキュリティーの関係上、次のガイドラインに従ってください。

たとえば、マスターサーバーのパスワード入力ファイルは、別のファイルへのリンクではなく Makefile に指定されている限り、/var/yp などのディレクトリに存在するか選択されたディレクトリに存在します。サービス管理機能または ypstart スクリプトを使用して NIS サービスを開始する場合、Makefile に指定された構成に従って適切なディレクトリオプションが設定されます。


注 –

この NIS 実装では、NIS パスワードマップを作成するための入力として、旧 Solaris 1 バージョンの passwd ファイルのフォーマットに加え、Solaris 2 の passwd ファイルと shadow ファイルのフォーマットも使用できます。


NIS ユーザーの管理

この節では、ユーザーパスワードの設定、NIS ドメインへの新しいユーザーの追加、ネットグループ (netgroups) へのユーザーの割り当てについて説明します。

ProcedureNIS ドメインに新しい NIS ユーザーを追加する方法

  1. マスター NIS サーバーで、スーパーユーザーになるか、同等の役割になります。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 9 章「役割によるアクセス制御の使用 (手順)」を参照してください。

  2. useradd コマンドで新しいユーザーのログイン ID を作成します。


    # useradd userID
    

    userID は新しいユーザーのログイン ID です。このコマンドは、NIS マスターサーバー上の /etc/passwd ファイルと /etc/shadow ファイルにエントリを作成します。

  3. 新しいユーザーの初期パスワードを作成します。

    新しいユーザーがログインするための初期パスワードを作成するには、passwd コマンドを実行します。


    # passwd userID
    

    userID は新しいユーザーのログイン ID です。このユーザーに割り当てるパスワードを入力するようにプロンプトが表示されます。

    この手順が必要になるのは、 useradd コマンドで作成されたパスワードエントリがロックされ、新しいユーザーがログインできないからです。初期パスワードを指定することで、このパスワードエントリのロックが解除されます。

  4. 必要に応じて、マスターサーバーの 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::::::
  5. パスワード入力ファイルが格納されているディレクトリが Makefile で正しく指定されていることを確認します。

  6. 必要に応じて、/etc/passwd ファイルと /etc/shadow ファイルから新しいユーザーのエントリを削除します。

    セキュリティー上の理由から、NIS マスターサーバーの /etc/passwd ファイルと /etc/shadow ファイルにユーザーエントリを保持しないようにしてください。ほかのディレクトリに存在する NIS マップソースファイルに新しいユーザーのエントリをコピーしたあと、マスターサーバー上で userdel コマンドを使用して新しいユーザーを削除します。

    たとえば、マスターサーバーの /etc ファイルから新しいユーザー brown を削除するには次のように入力します。


    # userdel brown
    

    userdel の詳細については、userdel のマニュアルページを参照してください。

  7. NIS の passwd マップを更新します。

    マスターサーバー上の passwd 入力ファイルを更新したあと、ソースファイルが存在するディレクトリで make を実行して、passwd マップを更新します。


    # userdel brown
    # cd /var/yp
    # /usr/ccs/bin/make passwd
    
  8. 新しいユーザーのログイン ID に割り当てられた初期パスワードを新しいユーザーに通知します。

    ログイン後、新しいユーザーはいつでも passwd を実行して別のパスワードに変更できます。

ユーザーパスワードの設定

ユーザーは passwd を実行してパスワードを変更します。

% passwd username

ユーザーがパスワードを変更する前に、NIS 管理者はマスターサーバー上で rpc.yppasswdd デーモンを起動してパスワードファイルを更新する必要があります。

rpc.yppasswdd デーモンは、マスターサーバー上で自動的に起動します。rpc.yppasswdd-m オプションが指定された場合は、ファイルが更新されるとすぐ /var/ypmake が実行されます。passwd ファイルが更新されるたびにこの make が実行されることを回避したい場合は、ypstart スクリプトの rpc.yppasswd コマンドから -m オプションを削除して、crontab ファイルで passwd マップの転送を制御してください。


注 –

rpc.yppasswd - m コマンドのあとに引数を指定するべきではありません。別の動作のために ypstart スクリプトファイルを編集することは可能ですが、-m オプションを任意に削除すること以外の変更をこのファイルに加えることは望ましくありません。すべてのコマンドおよびデーモンは、適切なコマンド行パラメータのセットが存在するこのファイルで起動されます。このファイルを編集する場合は、rpc.yppasswdd コマンドの編集では特に注意してください。passwd.adjunct ファイルに明示的コールを追加する場合は、パスを $PWDIR/security/passwd.adjunct と正確に指定しなければなりません。正確に指定しないと、不適切な処理が行われます。


NIS ネットグループ

NIS ネットグループは、NIS 管理者が管理目的のために定義するユーザーまたはマシンのグループ (集合) です。たとえば、次のようなネットグループを作成できます。

各ネットグループには、1 つのネットグループ名が与えられます。ネットグループはアクセス権を直接設定しません。代わりに、ユーザー名またはマシン名が一般に使用される場所ではネットグループ名がほかの NIS マップで使用されます。たとえば、netadmins というネットワーク管理者ネットグループを作成したと仮定します。netadmins ネットグループのすべてのメンバーに特定マシンへのアクセス権を与えるには、そのマシンの /etc/passwd ファイルに netadmin エントリを追加するだけで、ネットグループ名を /etc/netgroup ファイルに追加して、NIS グループマップに追加することもできます。ネットグループの使い方の詳細については、netgroup(4) のマニュアルページを参照してください。

NIS が使用されているネットワーク上では、NIS マスターサーバー上の netgroup 入力ファイルを使用して、次の 3 つのファイルが生成されます。netgroupnetgroup.byuser、および netgroup.byhost です。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 に存在するユーザー haurijuanita、およびマシン altair sirius で構成されます。


admins (altair, hauri), (sirius,juanita,sales)

admins (altair,-), (sirius,-), (-,hauri), (-,juanita,sales)

さまざまなプログラムでは、ログイン、遠隔マウント、遠隔ログイン、および遠隔シェル作成時に NIS ネットグループマップを使用してアクセス権のチェックを行います。さまざまなプログラムとは、mountdloginrloginrsh などです。login コマンドは、passwd データベース内でネットグループ名を見つけた場合に、ネットグループマップでユーザー分類を調べます。mountd デーモンは、/etc/dfs/dfstab ファイル内でネットグループ名を見つけた場合に、ネットグループマップでマシン分類を調べます。rloginrsh (ruserok インタフェースを使用する任意のプログラム) は、/etc/hosts.equiv または .rhosts ファイル内でネットグループ名を見つけた場合に、ネットグループマップでマシン分類とユーザー分類の両方を調べます。

ネットワークに新しい NIS ユーザーまたはマシンを追加する場合は、netgroup 入力ファイルの該当ネットグループに追加してください。次に、make でネットグループマップを作成し、これを yppush コマンドですべての NIS サーバーに転送してください。ネットグループおよびネットグループ入力ファイル構文の使い方の詳細については、netgroup(4) のマニュアルページを参照してください。

NIS マップに関する作業

この節には次の情報が含まれます。

マップ情報の取得

マップ情報は、ypcatypwhichypmatch コマンドを使っていつでも取得できます。次の例では、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 ソースファイルが存在する場合は、このファイルを新しいマスターサーバーにコピーします。

Procedureマップのマスターサーバーを変更する方法

  1. 新しいマスターで、スーパーユーザーになるか、同等の役割になります。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 9 章「役割によるアクセス制御の使用 (手順)」を参照してください。

  2. ディレクトリを変更します。


    newmaster# cd /var/yp
    
  3. 作成するマップを指定する前に、Makefile にこの新しいマップのエントリが必要です。新しいマップのエントリがない場合は、最初に、sites.byname というマップを使用して Makefile を編集します。

  4. マップを更新または再作成するには、次のように入力します。


    newmaster# make sites.byname
    
  5. 古いマスターサーバーが NIS サーバーとして残っている場合は、古いマスターサーバーに遠隔ログイン (rlogin) してから、Makefile を編集します。sites.byname を作成した Makefile 内のセクションをコメントアウトして、このセクションで sites.byname が再び作成されないようにします。

  6. 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 の動作は影響を受けます。

次のファイルを変更する場合は、この節の手順を使用します。

Procedure構成ファイルを更新する方法

NIS のマップまたはマップソースファイルを更新する場合は、NIS を停止および起動する必要はありません。

次の点に注意してください。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 9 章「役割によるアクセス制御の使用 (手順)」を参照してください。

  2. NIS サーバーを停止します。


    # svcadm disable network/nis/server
    
  3. 必要に応じてファイルを変更します。

  4. NIS サーバーを起動します。


    # svcadm enable network/nis/server
    

Makefile の更新と使用

/var/yp で提供されたデフォルトの Makefile を更新することにより、NIS 管理者のニーズを満たすことができます。マップを追加したり削除したり、一部のディレクトリの名前を変更できます。


ヒント –

将来の参照のために、変更していない、元の Makefile のコピーを保存しておいてください。


Makefile での作業

新しい NIS マップを追加するには、マップの ndbm ファイルのコピーをドメインに存在する各 NIS サーバーの /var/yp/domainname ディレクトリに転送する必要があります。通常これは、Makefile によって行われます。どの NIS サーバーがマップのマスターサーバーであるかを決定したら、マップを容易に作成し直せるようにマスターサーバーの Makefile を更新してください。異なるサーバーを異なるマップのマスターサーバーとして設定することも可能ですが、このようにするとたいていの場合、管理上の混乱を招きます。したがって、1 つのサーバーだけをすべてのマップのマスターサーバーとして設定するようにしてください。

一般に、人が読めるテキストファイルは、makedbm に対する入力として適したものにするために awk sedgrep でフィルタリングされます。デフォルトの Makefile を参照してください。make コマンドの概要については、make(1S) のマニュアルページを参照してください。

make が認識する依存性の作成方法を決定する際には、Makefile にすでに備わっているメカニズムを使用してください。make では、依存ルール内の行の始まりにタブが存在するか否かが重要であることに注意してください。ほかの設定が正しくても、タブが存在しないというだけでエントリが無効になることがあります。

Makefile にエントリを追加する場合は、次の作業を行ってください。

たとえば、Makefile をオートマウンタ入力ファイルで動作させるには、auto_direct.time および auto_home.time マップを NIS データベースに追加する必要があります。

これらのマップを NIS データベースに追加するには、Makefile を修正する必要があります。

Makefile のマクロおよび変数の変更

Makefile の先頭で定義されている変数の設定値を変更するには、等号 (=) の右側の値を変更します。たとえば、マップへの入力として /etc に存在するファイルではなく、別のディレクトリに存在するファイル (たとえば /var/etc/domainname など) を使用する場合は、DIRDIR=/etc から DIR=/var/etc/domainname に変更します。また、PWDIRPWDIR=/etc から PWDIR=/var/etc/domainname に変更します。

変数は次のとおりです。

Makefile エントリの変更

次の手順では、Makefile にデータベースを追加したり削除したりする方法を説明します。

Procedure特定のデータベースを使用するために Makefile を変更する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 9 章「役割によるアクセス制御の使用 (手順)」を参照してください。

  2. all という語で始まる行に、追加したいデータベース名 (1 つまたは複数) を追加します。


    all: passwd group hosts ethers networks rpc services protocols \
    	netgroup bootparams aliases netid netmasks \
    	audit_user auth_attr exec_attr prof_attr \
      auto_direct auto_home auto_direct.time auto_home.time

    エントリの順序は任意ですが、継続行の始まりの空白はスペースではなくタブにしてください。

  3. Makefile の終わりに次の行を追加します。


    auto_direct: auto_direct.time
    auto_home: auto_home.time
  4. ファイル中央に 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 は、makefileyppush を呼び出して新しいマップをスレーブサーバーに転送することを防止します。NOPUSH が設定されていない場合は、転送は自動的に行われます。

    継続行の始まりにある while ループは、バックスラッシュで拡張された行を入力ファイルから削除するためのものです。sed スクリプトはコメント行と空行を削除します。

    ほかのすべてのオートマウンタマップ (auto_home やほかのデフォルトでないマップなど) でも、同じ手順が必要となります。

  5. make を実行します。


    # make mapname
    

    mapname は、作成するマップの名前です。

Procedureデータベースを削除するために Makefile を変更する方法

Makefile で特定データベースのマップを作成しない場合は、Makefile を次のように編集してください。

  1. all ルールからデータベース名を削除します。

  2. 削除するデータベースのデータベースルールを削除またはコメントアウトします。

    たとえば、hosts データベースを削除するには、hosts.time エントリを削除します。

  3. time ルールを削除します。

    たとえば、hosts データベースを削除するには、hosts: hosts.time エントリを削除します。

  4. マスターサーバーとスレーブサーバーからマップを削除します。

既存のマップの更新

NIS のインストール終了後、頻繁に更新しなければならないマップとまったく更新する必要がないマップがあることに気づくかもしれません。たとえば、passwd.byname マップは、大企業のネットワークで頻繁に更新されることがありますが、auto_master マップはほとんど更新されません。

「デフォルトの NIS マップ」で説明されているように、デフォルトの NIS マップのデフォルトの位置は、/var/yp/domainname のマスターサーバー上です。domainname は NIS ドメインの名前です。マップを更新する必要がある場合は、マップがデフォルトのマップか否かによって 2 つの更新手順のどちらかを使用できます。

この節では、さまざまな更新ツールの使用方法について説明します。実際にはこれらの更新ツールはシステム起動後に、デフォルトでないマップを追加する場合または一群の NIS サーバーを変更する場合にだけ使用します。

Procedureデフォルトセットに付いているマップを更新する方法

デフォルトセットに付いているマップを更新する場合は、次の手順に従います。

  1. マスターサーバー上でスーパーユーザーになります。

    必ずマスターサーバー上だけで NIS マップを更新します。

  2. 更新するマップのソースファイルを編集します (このファイルが /etc に存在しているか、選択されたほかのディレクトリに存在しているかは問題ではありません)。

  3. 次のように入力します。


    # cd /var/yp
    # make mapname
    

    make コマンドは、対応するファイルに対して NIS 管理者が行った変更に従ってマップを更新します。make コマンドはまた、これらの変更をほかのサーバーに伝播します。

更新したマップを管理する

以降の節では、デフォルトセットで提供されているマップの更新完了後に実行する手順について説明します。

NIS マップを伝播する

マップが更新されると、Makefileyppush を使用して新しいマップをスレーブサーバーに伝播します (ただし、NOPUSHMakefile に設定されている場合を除く)。これは、ypserv デーモンに通知してマップ転送要求を送ることで実行されます。次に、スレーブサーバー上の ypserv デーモンが ypxfr プロセスを起動し、マスターサーバー上の ypxfrd デーモンに連絡します。いくつかの基本検査 (マップが実際に更新されているかどうかの確認など) が行われてマップが転送されます。そのあと、スレーブサーバー上の ypxfr が、転送が成功したかどうかを yppush プロセスに通知します。


注 –

上記手順は、新しく作成されたマップがスレーブサーバー上に存在しない場合は動作しません。スレーブサーバー上で ypxfr を実行して、新しいマップをスレーブサーバーに転送する必要があります。


マップの伝播は失敗することがありますが、失敗した場合は ypxfr を使って手動で新しいマップ情報を転送する必要があります。ypxfr は、2 つの方法で使用できます。 1 つは root の crontab ファイルを定期的に使用する方法であり、もう 1 つはコマンド行から対話形式で使用する方法です。これらの方法については、以降の節で説明します。

cron を使ってマップ転送を行う

マップの更新頻度はマップによってそれぞれ異なります。たとえば、デフォルトのマップである protocols.byname やデフォルトでないマップの auto_master など一部のマップは何ヶ月も更新されないことがありますが、passwd.byname など一部のマップは 1 日に数回更新されることがあります。crontab コマンドでマップ転送をスケジュールすると、個々のマップに対して特定の更新時間を設定できます。

マップに適切な頻度で ypxfr を定期的に実行するには、各スレーブサーバー上の root の crontab ファイルに、該当する ypxfr エントリを入れる必要があります。ypxfr は、マスターサーバー上のコピーがローカルのコピーより新しい場合に限り、マスターサーバーと連絡をとりマップを転送します。


注 –

デフォルトの m オプションが指定されている -rpc.yppasswdd をマスターサーバー上で実行すると、どこかで yp パスワードが変更されるたびに、 passwd デーモンが make を実行して passwd マップを作成し直します。


cronypxfr でシェルスクリプトを使用する

NIS 管理者は、各マップに対する crontab エントリを個々に作成するという方法ではなく、root の crontab コマンドでシェルスクリプトを実行してすべてのマップを定期的に更新するという方法を使用することもできます。マップ更新シェルスクリプトのサンプルは、/usr/lib/netsvc/yp ディレクトリに入っています。スクリプト名は、ypxfr_1perdayypxfr_1perhourypxfr_2perday です。これらのシェルスクリプトを更新または置換することによって、容易にサイト要件に適合させることができます。例 6–1 は、デフォルトの ypxfr_1perday シェルスクリプトを示しています。


例 6–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 を使用してファイルを複数のドメインに転送することもできます。

ypxfr を直接起動する

2 番目の方法である ypxfr の起動とは、ypxfr をコマンドとして実行することです。一般に、ypxfr をコマンドとして実行するのは例外的状況においてだけです。たとえば、一時的に NIS サーバーを設定して試験環境を作成する場合や、動作不能になっていた NIS サーバーをほかのサーバーと迅速に整合させようとする場合などです。

ypxfr のアクティビティーを記録する

ypxfr が試みた転送およびその転送結果は、ログファイルに記録されます。/var/yp/ypxfr.log というファイルが存在する場合は、転送結果はこのファイルに記録されます。このログファイルのサイズには制限がありません。このログファイルのサイズが無限に大きくなることを防止するには、ときどき次のように入力してこのログファイルを空にしてください。


# cd /var/yp
# cp ypxfr.log ypxfr.log.old
# cat /dev/null > /var/yp/ypxfr.log

これらのコマンドは、crontab で 1 週間に 1 回実行させることができます。記録を取らないようにするには、ログファイルを削除してください。

デフォルトでないマップの更新

デフォルトでないマップを更新する場合は、次の手順に従います。

  1. 対応するテキストファイルを作成または編集します。

  2. 新しいマップまたは更新されたマップを作成 (または再作成) します。マップ作成には 2 つの方法があります。

    • Makefile を使用する方法。デフォルトでないマップを作成するには、この方法をお勧めします。Makefile にマップのエントリが存在する場合は、make name を実行します (name は作成するマップ名)。Makefile にマップのエントリが存在しない場合は、Makefile の更新と使用」を参照してエントリを作成してください。

    • /usr/sbin/makedbm プログラムを使用する方法。このコマンドの詳細については、makedbm(1M) のマニュアルページに説明されています。

デフォルトでないマップを makedbm で更新する

入力ファイルが存在しない場合は、makedbm でマップを更新する方法は 2 つあります。

テキストファイルからマップを新たに作成する

テキストファイル /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 でマップを作成する方法について説明してきましたが、実際に必要な作業はほとんど、ypinitMakefile で行うことができます。ただし、システム起動後にデフォルトでないマップをデータベースに追加したり NIS サーバーセットを変更したりしない場合に限ります。

/var/ypMakefile を使用してもほかの手順を使用しても、最終目的は同じです。正しく作成された dbm ファイルの新しいペアをマスターサーバー上の maps ディレクトリに配置しなければなりません。

スレーブサーバーの追加

NIS の実行後、ypinit に指定された初期リストに含まれていなかった NIS スレーブサーバーを必要に応じて作成します。

NIS スレーブサーバーを追加する場合は、次の手順に従います。

Procedureスレーブサーバーを追加する方法

  1. マスターサーバーで、スーパーユーザーになるか、同等の役割になります。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 9 章「役割によるアクセス制御の使用 (手順)」を参照してください。

  2. NIS ドメインディレクトリに移動します。


    # cd /var/yp/domainname
    
  3. ypservers ファイルを分解します。


    # makedbm -u ypservers >/tmp/temp_file
    

    makedbm コマンドは、ypservers ndbm フォーマットから一時 ASCII ファイル、/tmp/temp_file に変換します。

  4. テキストエディタで /tmp/temp_file ファイルを編集します。つまり、新しいスレーブサーバー名をサーバーリストに追加します。このあと、/tmp/temp_file ファイルを保存し、閉じます。

  5. 入力ファイルに temp_file を指定し、出力ファイルに ypservers を指定して、makedbm コマンドを実行します。


    # makedbm /tmp/temp_file ypservers
    

    makedbm は、ypservers を変換して ndbm フォーマットに戻します。

  6. スレーブサーバーで次のように入力して、ypservers マップが正しいことを確認します (ypservers の ASCII ファイルは存在しないため)。


    slave3# makedbm -u ypservers
    

    makedbm コマンドは、画面に ypservers の各エントリを表示します。


    注 –

    ypservers にマシン名が存在しない場合は、ypservers はマップファイルの更新を受信しません。これは、yppush がこのマップでスレーブサーバーリストを調べるからです。


  7. 新しい NIS スレーブサーバーで、スーパーユーザーになるか、同等の役割になります。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 9 章「役割によるアクセス制御の使用 (手順)」を参照してください。

  8. 新しいスレーブサーバーの NIS ドメインディレクトリを設定します。

    マスターサーバーから NIS マップセットをコピーし、NIS クライアントを起動します。ypinit コマンドを実行 (起動) したら、プロンプトに従って、優先順に NIS サーバーを指定してください。


    slave3# cd /var/yp
    slave3# ypinit -c
    slave3# svcadm enable network/nis/client
    
  9. このマシンをスレーブサーバーとして初期設定します。


    slave3# /usr/sbin/ypinit -s ypmaster
    

    ypmaster は、既存の NIS マスターサーバーのマシン名です。

  10. NIS クライアントとして実行されているマシンを停止します。


    # svcadm disable network/nis/client
    
  11. NIS スレーブサービスを開始します。


    # svcadm enable network/nis/server
    

C2 セキュリティーが装備されている NIS の使用

$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 サーバーへのバインド

指定した NIS サーバーにバインドするには、次の手順に従います。詳細は、ypinit(1M)ypstart(1M)、および svcadm(1M) のマニュアルページを参照してください。

  1. NIS サーバーのホスト名と IP アドレスを /etc/hosts ファイルに追加します。

  2. domainname コマンドを実行して、/etc/defaultdomain ファイルを生成します。


    # /usr/bin/domainname name-of-NIS-domain
    
  3. NIS サーバーホスト名を要求します。


    # /usr/sbin/ypinit -c
    Server name: Type the NIS server hostname
    
  4. 次のいずれかの手順を実行して、NIS サービスを再起動します。

    • リブート後を繰り返しても持続するサービスの場合は、svcadm コマンドを実行します。


      # svcadm enable -r svc:/network/nis/client
    • 次のリブートまでしか持続しないサービスの場合は、ypstop および ypstart コマンドを実行します。


      # /usr/lib/netsvc/yp/ypstop
      # /usr/lib/netsvc/yp/ypstart
      

マシンの NIS ドメインの変更

マシンの NIS ドメイン名を変更する場合は、次の手順に従います。

Procedureマシンの NIS ドメイン名を変更する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 9 章「役割によるアクセス制御の使用 (手順)」を参照してください。

  2. マシンの /etc/defaultdomain ファイルを編集して、現在のドメイン名をそのマシンの新しいドメイン名に置き換えます。

    たとえば、現在のドメイン名である sales.doc.comresearch.doc.com に変更します。

  3. domainname `cat /etc/defaultdomain' を実行します。

  4. マシンを NIS クライアント、スレーブサーバー、またはマスターサーバーとして再初期化します。

    詳細は、第 5 章NIS サービスの設定と構成を参照してください。

NIS を DNS と組み合わせて使用する

一般に NIS クライアントは、マシン名とアドレスの検索に NIS だけが使用されるように、nsswitch.conf ファイルで構成されます。このような検索が失敗した場合は、NIS サーバーはこれらの結果を DNS に転送します。

ProcedureNIS と DNS によるマシン名とアドレスの検索を設定する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 9 章「役割によるアクセス制御の使用 (手順)」を参照してください。

  2. hosts.bynamehosts.byaddr という 2 つのマップファイルには、YP_INTERDOMAIN キーが必要です。このキーを検査するために、Makefile を編集し、次の行を変更します。


    #B=-b
    B=

    から


    B=-b
    #B=

    これで、マップの作成時に makedbm-b フラグで起動され、YP_INTERDOMAIN キーが ndbm ファイルに挿入されます。

  3. make コマンドを実行してマップを作成し直します。


    # /usr/ccs/bin/make hosts
    
  4. NIS サーバーのすべての /etc/resolv.conf ファイルが有効なネームサーバーを指していることを確認します。


    注 –

    Solaris リリース 2 を実行していない NIS サーバーがある場合は、YP_INTERDOMAIN キーがホストマップに存在することを確認してください。


  5. DNS 転送を有効にするために、各サーバーを再起動します。


    # svcadm restart network/nis/server:<instance>
    

    この NIS 実装では、ypserv-d オプションを付けることで自動的に起動し、DNS に要求が転送されます。

混在 NIS ドメインの処理

マスターサーバーとスレーブサーバーのどちらも Solaris リリース 2 を実行していない場合は、次の表を参考にして問題が発生しないように対処してください。「4.0.3+」という表記は、「Solaris OS のリリース 4.0.3 以降」であることを意味します。makedm -b コマンドは、Makefile の「B」変数への参照です。

表 6–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

スレーブサーバー: resolv.conf が存在する ypxfr または ypxfr -b

NIS サービスをオフにする

NIS マスターサーバー上の ypserv が使用不可になっている場合は、NIS マップを更新できません。