この章では、 NIS 互換モードについての概略を説明し、さらに NIS 互換モードで NIS+ を実行するときに発生する問題についても詳しく説明します。
NIS と平行して NIS+ を実行するかどうか、実行する場合にはその方法、および停止する時を決定するのは、おそらくユーザーが直面する最も難しい移行問題の 1 つでしょう。 NIS+ には、 NIS といっしょに使用できる機能がいくつかありますが、中でも NIS 互換モードという機能があります。
NIS 互換モードを使用する計画がある場合、 NIS 互換モードで利用できる基本的な利点を考えておく必要があります。 NIS クライアントにはまったく変更を行う必要はありません。基本的な欠点は、完全な NIS+ セキュリティと階層を利用できないことと、クライアントのドメイン名を変更する必要があることです。
図 4-1 は、NIS だけの名前空間から、NIS と 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+ にだけ使用するようにしてください。この構成では、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+ テーブルのどこに格納されているかによって、別々のパスワードコマンド (passwd、yppasswd、nispasswd) を使用して、パスワード関連の処理を行う必要がありました。Solaris 2.5 からは、パスワード関連の処理をすべて passwd または passwd -r nisplus のコマンドで自動的に行うとともに、ユーザーの nsswitch.conf ファイルの passwd エントリによって管理することになりました。
NIS+ または NIS 互換のネットワーク上に、passwd コマンドとパスワードの有効期限を正しく設定するには、各マシン上の nsswitch.conf ファイルの passwd エントリが正しくなければなりません。このエントリによって、passwd コマンドがパスワード情報を取得する場所と更新する場所が決まります。
次の 5 つのパスワードエントリ構成のみが使用できます。
passwd:files passwd: files nis passwd: files nisplus passwd: compat passwd_compat: nisplus |
使用しているネットワークのワークステーション上に存在するすべての nsswitch.conf ファイルは、必ず上記の passwd 構成のうちの 1 つを使用していなければなりません。別の方法で、passwd エントリを構成した場合、ユーザーがログインできない可能性があります。
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+ クライアントは、NIS クライアントのような暗黙の DNS 転送機能を持ちません。そのかわり、ネームサービススイッチを使用することができます。NIS+ クライアントに DNS 機能を与えるには、その hosts エントリを次のように変更してください。
hosts: nisplus dns [NOTFOUND=return] files |
NIS クライアントが、 NIS 互換の NIS+ サーバーの DNS 転送機能を使用している場合、そのクライアントの nsswitch.conf ファイルは、hosts エントリに次の構文があってはいけません。
hosts: nis dns files |
この節で示す表を見ると、Solaris 1 オペレーティング環境の NIS コマンド、Solaris 2 または Solaris 7 オペレーティング環境の NISコマンド、およびそれに対応する NIS+ コマンドの間の違いがわかります。
表 4-2 は、Solaris 2 および Solaris 7 でサポートされている NIS コマンドを示しています。
表 4-5 には、NIS アプリケーションプログラマ用のインタフェース関数と、それに対応する NIS+ API が示されています。詳細については、該当するマニュアルページを参照してください。
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 |
以下の点に注意してください。
Solaris 2.5 では、passwd コマンドは NIS または NIS+ の状態に関係なく使用できます。以前 nispasswd および yppasswd コマンドによって実行していた機能は、このリリースでは passwd コマンドに含まれました。
ypinit -c コマンドは、Solaris 2 または Solaris 7 の NIS クライアント上でのみ使用できます。
ypcat コマンドは、netgroup テーブルに対する照会ではサポートされません。NIS クライアントの要求は、応答が返される前に時間切れになります。これは、このテーブルの形式が、netgroup
NIS マップの形式と大幅に異なるためです。
表 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+ に移植する必要があります。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() |
表 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 を 除き、サポートしていない |