Solaris ネーミングの管理

第 2 章 ネームサービススイッチ

この章では、ネームサービススイッチの機能と、これを使用してクライアントが 1 つまたは複数のソースからネーミング情報を入手する方法について説明します。ネームサービススイッチは、異なるネームサービスの使用方法を調整するために使います。

ネームサービススイッチについて

ネームサービススイッチは nsswitch.conf という名前のファイルで、クライアントのワークステーションやアプリケーションがネットワーク情報を得る方法を管理します。ネームサービススイッチは、

のような getXbyY() インタフェースを呼び出すクライアントアプリケーションによって使用されます。ネームサービススイッチは単に「スイッチ」または「スイッチファイル」と呼ばれることもあります。各ワークステーションは、それぞれの /etc ディレクトリの中にスイッチファイルを持っています。ファイルの各行は、hostpasswdgroup などの特定タイプのネットワーク情報を識別します。その後には、クライアントがネットワーク情報を探すための 1 つまたは複数のソースが続きます。

クライアントは、1 つまたは複数のスイッチのソースからネーミング情報を入手できます。たとえば、NIS+ のクライアントは、NIS+ テーブルからホスト情報を、ローカルの /etc ファイルからパスワード情報をそれぞれ入手できます。さらに、スイッチが各ソースを使用する条件を指定することもできます。「検索規準」を参照してください。

Solaris 7 リリースは、インストールの過程において、各ワークステーションの /etc ディレクトリに nsswitch.conf ファイルを自動的にロードします。同時に、次に示すスイッチファイルの 3 つの代替 (テンプレート) バージョンも /etc ディレクトリにロードされます。

これら 3 つのファイルは、代替デフォルトスイッチファイルです。各ファイルはそれぞれ /etc ファイル、NIS、NIS+ という異なる主要なネームサービス用に設計されています。Solaris 7 リリースソフトウェアを初めてワークステーションにインストールするときに、インストール担当者はワークステーションのデフォルトネームサービスを NIS+、NIS、ローカルファイルの中から選択します。インストール中に、対応するテンプレートファイルが nsswitch.conf ファイルにコピーされます。たとえば、クライアントが NIS+ を使用しているワークステーションでは、インストールの過程で nsswitch.nisplus ファイルが nsswitch.conf にコピーされます。特殊な名前空間を持っている場合を除き、通常の操作には nsswitch.conf にコピーされるデフォルトのテンプレートファイルを使用します。DNS 用のデフォルトファイルは提供されませんが、これら 3 つのファイルを編集して DNS 用に使用できます (「DNS とインターネットでのアクセス」を参照してください)。

後からワークステーションの主要なネームサービスを変更する場合は、適切な代替スイッチファイルを nsswitch.conf にコピーするだけで変更できます (「nsswitch.conf テンプレートファイル」を参照)。また、/etc/nsswitch.conf ファイルの適当な行を編集することによって、クライアントが使用するネットワーク情報のソースを変更することもできます。この構文については以下に説明します。詳細は、『Solaris ネーミングの設定と構成』を参照してください。

nsswitch.conf ファイルのフォーマット

nsswitch.conf ファイルは、基本的には 15 種類の情報とそのソース (getXXbyYY() 関数の情報検索先) のリストです。順序は必ずしも以下のとおりではありません。

表 2-1 は、上記の情報タイプのスイッチファイルの中に、一覧表示できるソースの種類の詳細を示しています。

表 2-1 スイッチソースの例

ソース 

説明 

files

クライアントの /etc ディレクトリに格納されているローカルファイル (/etc/passwd など)

nisplus

NIS+ テーブル (hosts テーブルなど)

nis

NIS マップ (hosts マップなど)

compat

パスワードとグループ情報を対象に、/etc/passwd/etc/shadow/etc/group ファイルで旧形式の「+」または「-」構文をサポートする

dns

ホスト情報を DNS から入手するように指定する 

検索規準

「単一ソース」

nisplus のような情報のソースが 1 つだけの場合、スイッチを使用している関数は、そのソースだけで情報を検索します。情報が見つかった場合、success という状態メッセージが渡されます。情報が見つからない場合は、検索が停止され、success 以外の状態メッセージが渡されます。状態メッセージに基づいて何をするかは、関数によって異なります。

「複数ソース」

テーブルに複数のソースがある場合、スイッチは最初のソースから情報検索を始めるように関数に指示します。情報が見つかれば success という状態メッセージが返されますが、見つからないときは次のソースが検索されます。関数は必要な情報が見つかるか、return 処理によって中止されるまで全ソースの検索を続けます。必要な情報がどのソースにもなかったとき、関数は検索を停止し、non-success という状態メッセージを返します。

スイッチ状態メッセージ

関数は情報を見つけると、success という状態メッセージを返します。また情報が見つからなかった場合、その理由によって、3 種類のメッセージのうちの 1 つを返します。表示される状態メッセージを、以下の表 2-2 に示します。

表 2-2 スイッチ状態メッセージ

状態メッセージ 

意味 

SUCCESS

要求されたエントリがソース内で発見された 

UNAVAIL

ソースが応答しない、または使用不可。つまり、NIS+ テーブル、NIS マップ、/etc ディレクトリのファイルが見つからなかった (アクセスできなかった)

NOTFOUND

エントリなし。テーブル、マップ、ファイルにアクセスしたが、必要な情報は見つからなかった 

TRYAGAIN

ソース使用中のため、再検索の必要あり。テーブル、マップ、ファイルは見つかったが、照会に対して応答しなかった 

スイッチの動作に関するオプション

表 2-3 に示すように、状態メッセージに対して次の 2 つの動作のどちらかで応答するようにスイッチに指示できます。

表 2-3 スイッチ状態メッセージへの応答

動作 

意味 

return

情報の検索を停止する 

continue

次のソースがあれば、それを検索する 

デフォルト検索基準

nsswitch.conf ファイルの状態メッセージと動作オプションの組み合わせによって、関数の各ステップでの動作が決まります。この状態と動作の組み合わせのことを、「検索基準」と呼びます。

スイッチのデフォルト検索規準は、どのソースについても同じです。これらを上記の状態メッセージに基づいて説明すれば次のようになります。

これらはデフォルトの検索基準であるため、自動的に表示されます。つまり、スイッチファイルで、はっきりと指定する必要はありません。ほかの検索基準を明示してデフォルトの検索基準を変更するには、上記の STATUS=action という構文を使用します。たとえば、NOTFOUND 状態に対し、デフォルトの動作では次のソースに移って検索を続行します。networks など、特定の情報を設定して検索すると、検索は NOTFOUND で中止します。スイッチファイルの networks の行を、以下のように編集してください。


networks: nis [NOTFOUND=return] files

networks: nis [NOTFOUND=return] files は、NOTFOUND に関してデフォルトでない検索基準を設定するものです (デフォルト以外の設定をするときは [ ] を使用します)。

この例では、検索関数は以下のような働きをします。

構文が正しくない場合の処理

クライアントのライブラリ関数には、nsswitch.conf ファイルにおいて「必要なエントリがない」、「エントリの構文が誤っている」といった場合に使用されるコンパイル時に組み込まれるデフォルトエントリが含まれています。これらのエントリは nsswitch.conf ファイルのデフォルトエントリと同じものです。ネームサービススイッチは、テーブル名やソース名のスペルが正しいものとして処理をします。スペルが正しくない場合は、デフォルト値が使用されます。

auto_home と auto_master

auto_home テーブル、auto_master テーブルとマップのスイッチ検索基準は、automount と呼ばれる1つのカテゴリに統合されます。

Timezone とスイッチファイル

timezone テーブルはスイッチを使用しないため、スイッチファイルのリストには含まれていません。

nsswitch.conf ファイル中のコメント

nsswitch.conf ファイル中の行のうち、「#」で始まっているものはコメント行として解釈され、ファイルを検索する関数では無視されます。

#」が行の途中にある場合、その左側の文字は nsswitch.conf ファイルを検索する関数の一部となり、右側の文字はコメント行として無視されます。

表 2-4 スイッチファイルのコメント例

行の種類 

コメント例 

コメント行 (無視される) 

# hosts: nisplus [NOTFOUND=return] files

完全に解釈される行 

hosts: nisplus [NOTFOUND=return] file

部分的に解釈される行 (「files」の部分は解釈されない)

hosts: nisplus [NOTFOUND=return] # files

スイッチファイルのキーサーバーと publickey エントリ

キーサーバーは、起動時にだけネームサービススイッチ構成ファイルの publickey エントリを参照します。つまり、スイッチ構成ファイルを更新しても、再起動しない限りキーサーバーはそのことを認識しないということになります。

nsswitch.conf テンプレートファイル

Solaris 7 リリースでは、nsswitch.conf のテンプレートファイルが 3 種類提供されます。デフォルトの情報ソース (一次ソース、およびそれに続くもの) としては、それぞれ異なったものが指定されています。

3 種類のテンプレートファイルの詳細は以下のとおりです。

要求するものに最も近いテンプレートファイルを nsswitch.conf にコピーし、必要に応じて修正します。この手順の詳細は、『Solaris ネーミングの設定と構成』のスイッチに関する章を参照してください。

たとえば、NIS+ テンプレートファイルを使用するには、以下のコマンドを入力します。


mymachine# cp nsswitch.nisplus nsswitch.conf

デフォルトスイッチテンプレートファイル

3 つのスイッチファイルは、Solaris 7 リリースでは、以下のようになります。


例 2-1 NIS+ スイッチファイルテンプレート (nsswitch.nisplus)


#
# /etc/nsswitch.nisplus:
# 
# An example file that could be copied over to /etc/nsswitch.conf;
# it uses NIS+ (NIS Version 3) in conjunction with files.
# 
# "hosts:" and "services:" in this file are used only if the
# /etc/netconfig file has a "-" for nametoaddr_libs of "inet"
# transports.
# the following two lines obviate the "+" entry in /etc/passwd
# and /etc/group.
passwd: files nisplus
group: files nisplus
# consult /etc "files" only if nisplus is down.
hosts: nisplus [NOTFOUND=return] files
# Uncomment the following line, and comment out the above, to use
# both DNS and NIS+. You must also set up the /etc/resolv.conf
# file for DNS name server lookup. See resolv.conf(4).
# hosts: nisplus dns [NOTFOUND=return] files
services: nisplus [NOTFOUND=return] files
networks: nisplus [NOTFOUND=return] files
protocols: nisplus [NOTFOUND=return] files
rpc: nisplus [NOTFOUND=return] files
ethers: nisplus [NOTFOUND=return] files
netmasks: nisplus [NOTFOUND=return] files
bootparams: nisplus [NOTFOUND=return] files
publickey: nisplus
netgroup: nisplus
automount: files nisplus
aliases: files nisplus
sendmailvars: files nisplus


例 2-2 NIS スイッチファイルテンプレート


# 
# /etc/nsswitch.nis:
#
# An example file that could be copied over to /etc/nsswitch.conf;
# it uses NIS (YP) in conjunction with files.
#
# "hosts:" and "services:" in this file are used only if the
# /etc/netconfig file has a "-" for nametoaddr_libs of "inet"
# transports.
#
# the following two lines obviate the "+" entry in /etc/passwd
# and /etc/group.
passwd: files nis
group: files nis
# consult /etc "files" only if nis is down.
hosts: nis [NOTFOUND=return] files
networks: nis [NOTFOUND=return] files
protocols: nis [NOTFOUND=return] files
rpc: nis [NOTFOUND=return] files
ethers: nis [NOTFOUND=return] files
netmasks: nis [NOTFOUND=return] files
bootparams: nis [NOTFOUND=return] files
publickey: nis [NOTFOUND=return] files
netgroup: nis
automount: files nis
aliases: files nis 
# for efficient getservbyname() avoid nis 
services: files nis 
sendmailvars: files


例 2-3 Files スイッチファイルテンプレート


# 
# /etc/nsswitch.files:
#
# An example file that could be copied over to /etc/nsswitch.conf;
# it does not use any naming service.
#
# "hosts:" and "services:" in this file are used only if the
# /etc/netconfig file has a "-" for nametoaddr_libs of "inet"
# transports.
passwd: files
group: files
hosts: files
networks: files
protocols: files
rpc: files
ethers: files
netmasks: files
bootparams: files
publickey: files
# At present there isn't a 'files' backend for netgroup;
# the system will figure it out pretty quickly, and won't use
# netgroups at all.
netgroup: files
automount: files
aliases: files
services: files
sendmailvars: files

デフォルト nsswitch.conf ファイル

Solaris の環境を初めてインストールするときのデフォルトの nsswitch.conf ファイルは、Solaris のソフトウェアをインストールする際に選択したネームサービスで決まります。ネームサービスが選択されると、そのサービスのスイッチテンプレートファイルがコピーされ、新しい nsswitch.conf ファイルが作成されます。たとえば、NIS+ が選択された場合は、nsswitch.nisplus ファイルがコピーされて nsswitch.conf ファイルが作成されます。

DNS とインターネットでのアクセス

nsswitch.conf ファイルでは、以下のいくつかのセクションで説明するとおり、クライアントの DNS 転送も制御されます。DNS 転送によって、クライアントへのインターネットでのアクセスが可能になります。


注 -

NIS+ クライアントには、正しく設定された /etc/resolv.conf ファイルが必要です (「DNS クライアントとリゾルバ」を参照)。


NIS+ および NIS クライアントによる DNS 転送ができるよう設定するための手順については、『Solaris ネーミングの設定と構成』 のスイッチファイルに関する説明を参照してください。

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

NIS+ クライアントには、NIS クライアントにあるような DNS 転送機能はありません。その代わりに、スイッチを使用した DNS 転送が可能です。NIS+ のクライアントに DNS 転送機能を持たせるには、hosts のエントリを以下のように変えます。


hosts: nisplus dns [NOTFOUND=return] files

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

NIS ネームサービスでは、本来 DNS 転送が可能です。DNS 転送を可能にするためには、NIS 一次スイッチファイルの hosts の行に以下の書式を使用します。


hosts: nis [NOTFOUND=return] files

注意 - 注意 -

NIS のクライアントが、NIS と互換性のある NIS+ サーバーの DNS 転送機能を使用している場合、ホストファイルの構文として nsswitch.conf ファイルに hosts: nis dns files を使用することはできません。使用した場合、DNS 転送によってホスト要求が自動的に DNS に転送され、この構文によって NIS+ サーバーが DNS サーバーにエラーステータスメッセージを 2 度転送することになり、性能が低下します。DNS 転送機能を十分に利用するには nsswitch.nis ファイルのデフォルト構文を使用してください。


+/- 構文との互換性を確保する

nsswitch.conf ファイルに、/etc/passwd/etc/shadow/etc/group などでときおり使用される +/- 構文との互換性を持たせる方法を以下に示します。


注 -

NIS+ サーバーが NIS 互換モードで動作している場合、クライアントマシンでは netgroup テーブルに対して ypcat を実行できません。実行してもテーブルにエントリがない場合と同じような動作をします。


nsswitch.conf ファイルに +/- 構文と同じ意味を持つ指定をする手順の詳細は、『Solaris ネーミングの設定と構成』のスイッチファイルに関する説明を参照してください。

スイッチファイルとパスワード情報

passwd 情報では、常に files が初めに検索されるソースになります。

たとえば、NIS+ の環境では、nsswitch.conf ファイルの passwd 行は以下のようになります。


passwd: files nisplus

NIS の環境では、nsswitch.conf ファイルの passwd 行は以下のようになります。


passwd: files nis

注意 - 注意 -

passwd 情報の nsswitch.conf ファイルでは、files を 1 番目のソースにしてください。files が 1 番目のソースでない場合は、ネットワークセキュリティが低くなり、ログの扱いが難しくなります。


FNS とネームサービススイッチ

FNS (フェデレーテッド・ネーミング・サービス) の詳細は、パート V「FNS の管理」を参照してください。

FNS (XFN API を Solaris 上に実装したもの) は、クライアントがネーム情報を照会するためのネームサービスを指定するときにも使用できます。XFN API は、X、Y 両次元において、スイッチファイルを使用する最新の getXbyY() インタフェースよりも一般的です。たとえば、XFN API を使用して、NIS+ と NIS の両方からホストとユーザーに関する情報を調べることができます。アプリケーションは、getXbyY()、XFN、あるいはその両方のクライアントとして使用できます。

FNS とスイッチファイルに一貫性を持たせる

FNS による名前空間データの変更を、スイッチファイルを使用して名前空間情報を入手しているクライアントが常に把握できるようにするために、スイッチと FNS には常に同じネームサービスを設定してください。

名前空間の更新

XFN API によるデータ更新は、getXbyY() インタフェースによる更新よりも優れています。ほとんどの名前空間は複数ソースのデータで構成されています。たとえば、groups の名前空間には、/etc/group ファイルと NIS+ group.org_dir オブジェクトの両方の情報があるかもしれません。しかし、スイッチファイルは、グループデータの特定の部分のソースや更新するソースを識別するための、アプリケーションの更新関数に十分な情報を提供しません。

各 FNS の従属名前空間は、すべてが 1 つのネームサービスから取られます。更新がどのネームサービスに行われるかというような混乱がないため、更新は簡単明瞭なものになります。