NIS+ への移行

第 4 章 NIS 互換モードの使用方法

この章では、 NIS 互換モードについての概略を説明し、さらに NIS 互換モードで NIS+ を実行するときに発生する問題についても詳しく説明します。

NIS 互換モード

NIS と平行して NIS+ を実行するかどうか、実行する場合にはその方法、および停止する時を決定するのは、おそらくユーザーが直面する最も難しい移行問題の 1 つでしょう。 NIS+ には、 NIS といっしょに使用できる機能がいくつかありますが、中でも NIS 互換モードという機能があります。

NIS 互換モードを使用する計画がある場合、 NIS 互換モードで利用できる基本的な利点を考えておく必要があります。 NIS クライアントにはまったく変更を行う必要はありません。基本的な欠点は、完全な NIS+ セキュリティと階層を利用できないことと、クライアントのドメイン名を変更する必要があることです。

図 4-1 は、NIS だけの名前空間から、NIS と NIS+ の両方の要求に応じる名前空間に変換する方法を示しています。

図 4-1 図 4-1 NIS 互換モードへの移行

Graphic

NIS 互換になるドメインを選ぶ

NIS クライアントのリストを作成して、それらを最終的な NIS+ ドメインにグループ化してください。NIS 互換モードで管理される NIS+ ドメインの名前が、その NIS クライアントの元の NIS ドメインと異なる場合は、NIS クライアントのドメイン名を、NIS 互換の NIS+ サーバーによってサポートされる NIS+ ドメインの名前に変更しなければなりません。

まず、NIS は間違いなく一次サービスです。情報共有の複雑さに慣れれば、NIS+ を一次サービスに移行する計画を立てることもできます。NIS+ ユーザーは、主な NIS ドメインと新しい NIS+ ドメインを切り替える機能を必要とする場合があります。nisclient スクリプトを使用すると、バックアップファイルが作成されるとき、この切り替えを行うことができます。

NIS 互換サーバーの構成を決める

NIS+ サーバーの要件を考慮した上で、各自の NIS サーバーについて判断を行います。最終的に、それらのサーバーを NIS+ サービスに使用する場合は、それらを NIS+ で推奨されるものに変更します。どの NIS サーバーを使用してどの NIS+ ドメインを、またどの機能 (マスタか複製か) でサポートするかを明らかにします。NIS+ サーバーは、それらがサポートするドメインよりも上位のドメインに属することを忘れないでください (ルートドメインサーバーは例外です)。NIS+ サーバーは、そのサービス対象となるドメインに属さないため、ドメインに依存する情報を必要とする他のサービスに、そのマシンを使用することはできません。

可能であれば、NIS+ サーバーマシンは、NIS+ にだけ使用するようにしてください。この構成では、DNS ネームサービス、ブートサーバー、ホームディレクトリ、NFS サーバーなどの他のネットワークサービスを、NIS+ ではないサーバーマシンに転送しなけれならない可能性があります。

サイトの多くで、NIS サーバーは、NFS サーバー、計算サーバー、rlogin サーバー、mailhost サーバーなど、複数の役割を果たします。NIS サーバーは、そのクライアントと同じ情報を使用してその名前を解決するため、他のサービスも提供することができます。「ドメインの階層」で説明したように、ルートドメインを除くすべての NIS+ サーバーが、それがサービスを提供するドメインよりも上位のドメインに存在します。したがって、NIS+ サーバー上ではネームサービスを利用しなければならないサービスを実行しないようにするか、あるいは nsswitch.conf のファイルのような他の手段を使用して、これと同じ情報を取得してください。この問題は、階層がない場合には起こりません。この場合、NIS+ ルートサーバーは、そのサービス対象のドメイン内に存在します。NIS+ サーバーの資源の要件は、NIS サーバーの要件よりも大きいため、NIS+ とともに他のサービスを実行しないようにしてください。

Solaris 以外のマシンがネットワーク上にある場合は、NIS 互換モードで NIS+ サーバーを引続き使用することも、このようなマシンをすべて独自のドメインに移動させることもできます。Solaris 以外のマシンをすべて、1 つのサブネットに移動すると、NIS 互換クライアントの場合と同様に、同じサブネットに NIS+ サーバーがなければならないという制約をなくすことができます。これにより、ドメインに必要な複製サーバーの数が減ります。

サービス間で情報を転送する方法を決める

情報を同期させるには、一方の名前空間がもう一方の名前空間に従属する関係になるようにしてください。まず、NIS 名前空間を「主」とします。この場合、NIS マップを変更すると、次にその変更内容を「従」である NIS+ テーブルに反映します。したがって、NIS 名前空間がマスタデータベースになります。

NIS 互換モードの NIS+ サーバーは、標準の NIS マップをサポートします。これらのマップの完全なリストは、ypfiles(4) のマニュアルページの注意事項の節にあります。ただし、マップのサポートにはいくつかの制約があります。NIS+ サーバーは、ネットグループマップに対する ypmatch 要求には応じますが、逆マップに対する要求には応じません。また、ypcat などのネットグループマップの表示要求をサポートしません。passwd.adjunct マップもサポートしません。

最終的には NIS+ 名前空間が「主」になります。この場合は、NIS+ テーブルで変更を行って、それを NIS マップにコピーします。

NIS+ コマンドの nisaddent と NIS+ スクリプトの nispopulate を使用すると、表 4-1 に示すように、NIS マップと NIS+ テーブルの間で、情報を転送することができます。

表 4-1 passwd テーブルでの情報変更のためのコマンド

NIS+ コマンド 

説明 

/usr/lib/nis/nisaddent -y

ypxfr を実行して、NIS サーバーからローカルディスクへマップを転送した後で、NIS マップから NIS+ テーブルへ情報を転送する。標準以外の NIS マップは、情報がキーと値のペアになっていれば、NIS+ テーブルに転送できる。複数列のマップは転送されない

/usr/lib/nis/nisaddent -d

NIS+ テーブルからファイルへ情報をコピーする。この情報は、標準 NIS ユーティリティを使って、さらに NIS マップに転送することができる 

/usr/lib/nis/nispopulate -Y

NIS マップから NIS+ テーブルへ情報を転送する 

Solaris 2.5 より前のリリースの NIS+ のバージョンでは、ユーザーのパスワード情報が /etc 内のファイル、NIS マップ、NIS+ テーブルのどこに格納されているかによって、別々のパスワードコマンド (passwdyppasswdnispasswd) を使用して、パスワード関連の処理を行う必要がありました。Solaris 2.5 からは、パスワード関連の処理をすべて passwd または passwd -r nisplus のコマンドで自動的に行うとともに、ユーザーの nsswitch.conf ファイルの passwd エントリによって管理することになりました。

NIS+ または NIS 互換のネットワーク上に、passwd コマンドとパスワードの有効期限を正しく設定するには、各マシン上の nsswitch.conf ファイルの passwd エントリが正しくなければなりません。このエントリによって、passwd コマンドがパスワード情報を取得する場所と更新する場所が決まります。

次の 5 つのパスワードエントリ構成のみが使用できます。


例 4-1 nsswitch.conf ファイルにおける使用可能な passwd エントリ


passwd:files

passwd: files nis

passwd: files nisplus

passwd: compat

passwd_compat: nisplus


注意 - 注意 -

使用しているネットワークのワークステーション上に存在するすべての nsswitch.conf ファイルは、必ず上記の passwd 構成のうちの 1 つを使用していなければなりません。別の方法で、passwd エントリを構成した場合、ユーザーがログインできない可能性があります。


DNS 転送を実装する方法を決める

NIS サーバーは、Solaris 1.x の NIS クライアントからの DNS 要求を転送することができます。 NIS 互換モードで実行される NIS+ サーバーにも、DNS 転送機能がありますが、Solaris 2.3 以降のリリースからしか使用できません (この機能は、パッチ#101022-06 を使用すれば、Solaris 2.2 でも使用できます)。このため、Solaris 2 または Solaris 7 オペレーティング環境で動作している NIS クライアントは、 /etc/nsswitch.conf ファイルと /etc/resolv.conf ファイルをローカルに設定しておく必要があります。

NIS 互換モードで実行される Solaris 2.0 または 2.1 のサーバーによってサポートされている Solaris 1.X NIS クライアントは、DNS 転送を利用することができません。これらのサーバーは、Solaris 2.3 以降のリリースにアップグレードする必要があります。

DNS ドメインの区分を再度作成するときは、新しい DNS ゾーンファイルを定義しなければなりません。ただし、クライアントによっては、/etc/resolv.conf ファイルの変更が必要な場合があります。クライアントが DNS クライアントでもある場合は、そのネームサービススイッチ構成ファイルを設定して、NIS+ テーブルだけでなく、DNS ゾーンファイルまたは NIS マップのホスト情報を検索することができます。

NIS+ クライアントの DNS 転送

NIS+ クライアントは、NIS クライアントのような暗黙の DNS 転送機能を持ちません。そのかわり、ネームサービススイッチを使用することができます。NIS+ クライアントに DNS 機能を与えるには、その hosts エントリを次のように変更してください。


hosts: nisplus dns [NOTFOUND=return] files

Solaris 2 または Solaris 7 オペレーティング環境の NIS クライアントの DNS 転送

NIS クライアントが、 NIS 互換の NIS+ サーバーの DNS 転送機能を使用している場合、そのクライアントの nsswitch.conf ファイルは、hosts エントリに次の構文があってはいけません。


hosts: nis dns files
DNS 転送では、ホスト要求が DNS に自動的に転送されるため、この構文があると、NIS+ サーバーとネームサービススイッチの両方が、不必要な要求を DNS サーバーに転送してしまいます。この結果、性能が低下します。

Solaris 1、Solaris 2、Solaris 7 における NIS コマンドと NIS+ コマンドの比較

この節で示す表を見ると、Solaris 1 オペレーティング環境の NIS コマンド、Solaris 2 または Solaris 7 オペレーティング環境の NISコマンド、およびそれに対応する NIS+ コマンドの間の違いがわかります。

Solaris 2 および Solaris 7 でサポートされている NIS コマンド

Solaris 2 および Solaris 7 では、一部の NIS コマンドだけがサポートされています。NIS サーバーコマンドは、Solaris 2 および Solaris 7 では提供されません。NIS クライアントコマンドだけがこのリリースに含まれています。これらの NIS コマンドが実行されるかどうかも、Solaris 2 または Solaris 7 の NIS クライアントが、NIS サーバーまたは NIS 互換モードの NIS+ サーバーにサービスを要求するかどうかによって決まります。NIS クライアントは、NIS 互換モードで実行されている NIS+ サーバーに更新を依頼することができません。たとえば、このようなクライアントは、chkey、newkey の各コマンドを実行することができません。表 4-2 は、Solaris 2 および Solaris 7 でサポートされている NIS コマンドの一覧です。

表 4-2 Solaris 2 および Solaris 7 オペレーティング環境でサポートされる NIS コマンド

コマンドの種類 

Solaris 2 および 7 でサポートされる NIS コマンド 

Solaris 2 および 7 でサポートされない NIS コマンド 

ユーティリティ 

ypinit ypxfr ypcat ypmatch yppasswd ypset ypwhich

yppush yppoll ypchsh ypchfn ypmake

デーモン 

ypbind 

ypserv ypxfrd rpc.ypupdated rpc.yppasswdd

NIS API 

yp_get_default_domain()

yp_bind()

yp_unbind()

yp_match()

yp_first

yp_next()

yp_all()

yp_master()

yperr_string()

ypprot_err()

yp_order() yp_update()

クライアントコマンドとサーバーコマンドの対応

この節で示す 2 つの表には、NIS コマンドと、それに相当する NIS+ コマンドを示してあります。これらのコマンドは、2 つのカテゴリに分けられます。表 4-3 では、ネームサービスクライアントからネームサービスサーバーへのコマンドを示しています。 表 4-4 では、ネームサービスサーバーからネームサービスサーバーへのコマンドを示しています。

対応するクライアントコマンド

表 4-3 では、ネームクライアントからネームサーバーへのコマンドを示しています。これらのコマンドを、ネームサービスのクライアントマシン上で入力してネームサービスサーバーの情報を要求します。表の 1 列目のコマンドは、Solaris 1 の NIS サーバーに接続されている、 Solaris 1、Solaris 2 または Solaris 7 の NIS クライアントで実行されます。表の 2 列目のコマンドは、 NIS 互換モードで実行されている Solaris 2 または Solaris 7 の NIS+ サーバーに接続されている、 Solaris 1、Solaris 2 または Solaris 7の NIS クライアント上で実行されます。表の 3 列目のコマンドは、 Solaris 1 または Solaris 7 の NIS+ サーバーに接続されている、Solaris 2 または Solaris 7 の NIS+ クライアント上でのみ実行されます。1 つの行に示されたコマンドは、ほぼ同じ機能を持ちます。「なし」は、対応するコマンドがないことを示しています。

表 4-3 NIS クライアントコマンドと対応する NIS+ コマンド

SunOS 4.x NIS サーバー 

NIS 互換モードの NIS+ サーバー 

NIS+ サーバー 

ypwhich -m

ypwhich -m

niscat -o org_dir

ypcat

ypcat

niscat

ypwhich

ypwhich

なし  

ypmatch

ypmatch

nismatch/nisgrep

yppasswd

passwd

passwd

ypbind

ypbind

なし  

yppoll

なし 

なし 

ypset

ypset

なし 

なし 

ypinit -c

nisclient -c

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

対応するサーバーコマンド

表 4-4 では、ネームサーバーからネームサーバーへのコマンドを示しています。 NIS サーバーコマンドは、Solaris 2 または Solaris 7 に含まれていないため、NIS+ サーバーにも NIS 互換モードの NIS+ サーバーにも使用できません。また、NIS サーバーは、NIS+ サーバーに変更を依頼することができません。この逆もできません。このテーブルの 3 番目の列には、最初の列の NIS サーバーコマンドに対応する NIS+ サーバーコマンドが示されています。NIS 互換モードはクライアントコマンドだけを参照するため、NIS 互換モードのサーバーには同じ機能を提供するコマンドはありません。

表 4-4 NIS サーバーコマンドと対応する NIS+ コマンド

SunOS 4.x NIS サーバー 

NIS 互換モードの NIS+ サーバー 

NIS+ サーバー 

ypxfr

なし 

なし 

makedbm

なし 

nisaddent

ypinit -m ypinit -s

なし 

nisserver

ypserv

rpc.nisd -Y

rpc.nisd

ypserv -d

rpc.nisd -Y -B

DNS 転送は不要、/etc/nsswitch.conf を使用すること

ypxfrd

なし 

なし 

rpc.ypupdated

なし 

なし 

rpc.yppasswd

rpc.nispasswdd

rpc.nispasswdd

yppush

なし 

nisping

ypmake

なし 

nissetup、nisaddent

ypxfr

なし 

なし 

NIS と NIS+ の API 関数の対応

サイトを完全に NIS+ に移行するには、ネームサービスを変更するだけでなく、すべてのアプリケーションを NIS+ に移植する必要があります。NIS の呼び出しを行う、サイトの内部で作成されたアプリケーションはすべて、NIS+ の呼び出しを実行するように変更しなければなりません。そうしないと、常に NIS 互換モードで NIS+ サーバーを実行しなければならず、このモードの欠点をすべて抱えることになります。サイトの外部で作成されたアプリケーションでは、必要な変更が行われるまで、NIS 互換モードで名前空間を管理しなければならないことがあります。

表 4-5 では、NIS API 機能と、それに対応する NIS+ API 機能を示しています。

表 4-5 NIS の API の関数と NIS+ の API の関数の対応

NIS API の関数 

NIS API の関数 

yp_get_default_domain()

nis_local_directory()

ypbind()

なし 

ypunbind()

なし 

ypmatch()

nis_list()

yp_first()

nis_first_entry()

yp_next()

nis_next_entry()

yp_all()

nis_list()

yp_master()

nis_lookup()

yperr_string()

nis_perror() nis_sperrno()

ypprot_err()

nis_perror() nis_sperrno()

yp_order()

なし 

yp_update()

nis_add_entry()、nis_remove_entry()、nis_modify_entry()

NIS 互換モードのプロトコルサポート

表 4-6 は、NIS 互換モードで動作する NIS+ サーバー によってサポートされる NIS プロトコルについて示しています。

表 4-6 NIS+ サーバーによる NIS プロトコルのサポート

NIS プロトコル 

互換性についての説明 

NIS クライアント V2 プロトコル 

サポートしている 

NIS サーバー間プロトコル(NIS server-to-server プロトコル) 

サポートしていない 

NIS クライアント更新プロトコル 

yppasswdプロトコルをサポートしている

NIS クライアント V1 プロトコル 

YPPROC_NULL、YPPROC_DOMAIN、YPPROC_DOMAIN_NONACK を 除き、サポートしていない