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 パスワードテーブルでの情報変更のためのコマンド

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.x の 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.x NIS クライアントの DNS 転送

NIS クライアントが、 NIS 互換の NIS+ サーバの DNS 転送機能を使用している場合、そのクライアントの nsswitch.conf ファイルは、hosts エントリに hosts: nis dns files という構文があってはいけません。DNS 転送では、ホスト要求が DNS に自動的に転送されるため、この構文があると、NIS+ サーバとネームサービススイッチの両方が、不必要な要求を DNS サーバに転送するため、性能が低下してしまいます。

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

この節で示す表を見ると、Solaris 1.x の NIS コマンド、Solaris 2.x の NISコマンド、およびそれに対応する NIS+ コマンドの間の違いがわかります。

Solaris 2.x リリースでサポートされている NIS コマンド

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

表 4-2 Solaris 2.x リリースでサポートされる NIS コマンド

コマンドの種類 

Solaris 2.x リリースでサポートされる NIS コマンド 

Solaris 2.x リリースでサポートされない 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.x の NIS サーバに接続されている、 Solaris 1.x または 2.x の NIS クライアントで実行されます。表の 2 列目のコマンドは、 NIS 互換モードで実行されている Solaris 2.x の NIS+ サーバに接続されている、 Solaris 1ox または 2.x の NIS クライアント上で実行されます。表の 3 列目のコマンドは、 Solaris 2.x NIS+ サーバに接続されている、Solaris 2.x 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

N/A 

なし 

ypinit -c

nisclient -c

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

対応するサーバコマンド

表 4-4 では、ネームサーバからネームサーバへのコマンドを示しています。 NIS サーバコマンドは、Solaris 2.x リリースに含まれていないため、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 を 除き、サポートしていない