ネームサービススイッチは nsswitch.conf という名前のファイルで、クライアントのワークステーションやアプリケーションがネットワーク情報を得る方法を管理します。ネームサービススイッチは、
のような getXbyY() インタフェースを呼び出すクライアントアプリケーションによって使用されます。ネームサービススイッチは単に「スイッチ」または「スイッチファイル」と呼ばれることもあります。各ワークステーションは、それぞれの /etc ディレクトリの中にスイッチファイルを持っています。ファイルの各行は、host、passwd、group などの特定タイプのネットワーク情報を識別します。その後には、クライアントがネットワーク情報を探すための 1 つまたは複数のソースが続きます。
クライアントは、1 つまたは複数のスイッチのソースからネーミング情報を入手できます。たとえば、NIS+ のクライアントは、NIS+ テーブルからホスト情報を、ローカルの /etc ファイルからパスワード情報をそれぞれ入手できます。さらに、スイッチが各ソースを使用する条件を指定することもできます。「検索規準」を参照してください。
Solaris オペレーティング環境では、インストールの過程において、各ワークステーションの /etc ディレクトリに nsswitch.conf ファイルを自動的にロードします。同時に、次に示すスイッチファイルの 4 つの代替 (テンプレート) バージョンも /etc ディレクトリにロードされます。
/etc/nsswitch.files
/etc/nsswitch.nis
/etc/nsswitch.nisplus
/etc/nsswitch.ldap
これら 4 つのファイルは、代替デフォルトスイッチファイルです。各ファイルはそれぞれ /etc ファイル、NIS、NIS+ 、LDAP という異なる主要なネームサービス用に設計されています。Solaris リリースソフトウェアを初めてワークステーションにインストールするときに、インストール担当者はワークステーションのデフォルトネームサービスを NIS+、NIS、ローカルファイル、LDAP の中から選択します。インストール中に、対応するテンプレートファイルが nsswitch.conf ファイルにコピーされます。たとえば、クライアントが NIS+ を使用しているワークステーションでは、インストールの過程で nsswitch.nisplus ファイルが nsswitch.conf にコピーされます。特殊な名前空間を持っている場合を除き、通常の操作には nsswitch.conf にコピーされるデフォルトのテンプレートファイルを使用します。DNS または IPv6 用のデフォルトファイルは提供されませんが、これら 4 つのファイルを編集して DNS または IPv6 用に使用できます (「DNS とインターネットでのアクセス」および「IPv6 とインターネットでのアクセス」を参照してください)。
後からワークステーションの主要なネームサービスを変更する場合は、適切な代替スイッチファイルを nsswitch.conf にコピーするだけで変更できます (「nsswitch.conf テンプレートファイル」を参照)。また、/etc/nsswitch.conf ファイルの適当な行を編集することによって、クライアントが使用するネットワーク情報のソースを変更することもできます。この構文については以下に説明します。詳細は、『Solaris ネーミングの設定と構成』を参照してください。
nsswitch.conf ファイルは、基本的には 16 種類の情報とそのソース (getXXbyYY() 関数の情報検索先) のリストです。順序は必ずしも以下のとおりではありません。
aliases
bootparams
ethers
group
hosts
ipnodes
netgroup
netmasks
networks
passwd (シャドウ情報含む)
protocols
publickey
rpc
services
automount
sendmailvars
表 2-1 は、上記の情報タイプのスイッチファイルの中に、一覧表示できるソースの種類の詳細を示しています。
表 2-1 スイッチソースの例
ソース |
説明 |
---|---|
files |
クライアントの /etc ディレクトリに格納されているローカルファイル (/etc/passwd など) |
nisplus |
NIS+ テーブル (hosts テーブルなど) |
nis |
NIS マップ (hosts マップなど) |
compat |
パスワードとグループ情報を対象に、/etc/passwd、/etc/shadow、/etc/group ファイルで旧形式の「+」または「-」構文をサポートする |
dns |
ホスト情報を DNS から入手するように指定する |
ldap |
エントリを LDAP ディレクトリから入手するように指定する |
「単一ソース」
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 ファイルの状態メッセージと動作オプションの組み合わせによって、関数の各ステップでの動作が決まります。この状態と動作の組み合わせのことを、「検索基準」と呼びます。
スイッチのデフォルト検索規準は、どのソースについても同じです。これらを上記の状態メッセージに基づいて説明すれば次のようになります。
SUCCESS=return
UNAVAIL=continue
次のソース (nsswitch.conf ファイルに指定されたもの) を使用して検索を続行する。次のソースがなければ、NOTFOUND という状態メッセージを返す
NOTFOUND=continue
次のソース (nsswitch.conf ファイルに指定されたもの) を使用して検索を続行する。次のソースがなければ、NOTFOUND という状態メッセージを返す
TRYAGAIN=continue
次のソース (nsswitch.conf ファイルに指定されたもの) を使用して検索を続行する。次のソースがなければ、NOTFOUND という状態メッセージを返す
これらはデフォルトの検索基準であるため、自動的に表示されます。つまり、スイッチファイルで、はっきりと指定する必要はありません。ほかの検索基準を明示してデフォルトの検索基準を変更するには、上記の STATUS=action という構文を使用します。たとえば、NOTFOUND 状態に対し、デフォルトの動作では次のソースに移って検索を続行します。networks など、特定の情報を設定して検索すると、検索は NOTFOUND で中止します。スイッチファイルの networks の行を、以下のように編集してください。
networks: nis [NOTFOUND=return] files |
networks: nis [NOTFOUND=return] files は、NOTFOUND に関してデフォルトでない検索基準を設定するものです (デフォルト以外の設定をするときは [ ] を使用します)。
この例では、検索関数は以下のような働きをします。
networks
マップが見つかり、必要な情報があった場合、関数は SUCCESS という状態メッセージを返します。
networks
マップが見つからなかった場合、関数は UNAVAIL という状態メッセージを返し、デフォルトにより適当な /etc ファイルの検索を続行します。
networks
マップは見つかったが必要な情報がなかった場合、関数は NOTFOUND という状態メッセージを返します。そして /etc ファイルの検索を続行する (デフォルトの設定) 代わりに検索を停止します。
networks
マップが使用中の場合、関数は TRYAGAIN という状態メッセージを返し、デフォルトで適当な /etc ファイルの検索を続行します。
クライアントのライブラリ関数には、nsswitch.conf ファイルにおいて「必要なエントリがない」、「エントリの構文が誤っている」といった場合に使用されるコンパイル時に組み込まれるデフォルトエントリが含まれています。これらのエントリは nsswitch.conf ファイルのデフォルトエントリと同じものです。ネームサービススイッチは、テーブル名やソース名のスペルが正しいものとして処理をします。スペルが正しくない場合は、デフォルト値が使用されます。
auto_home テーブル、auto_master テーブルとマップのスイッチ検索基準は、automount と呼ばれる1つのカテゴリに統合されます。
timezone テーブルはスイッチを使用しないため、スイッチファイルのリストには含まれていません。
nsswitch.conf ファイル中の行のうち、「#」で始まっているものはコメント行として解釈され、ファイルを検索する関数では無視されます。
「#」が行の途中にある場合、その左側の文字は nsswitch.conf ファイルを検索する関数の一部となり、右側の文字はコメント行として無視されます。
表 2-4 スイッチファイルのコメント例
行の種類 |
コメント例 |
---|---|
コメント行 (無視される) |
# hosts: nisplus [NOTFOUND=return] files |
完全に解釈される行 |
hosts: nisplus [NOTFOUND=return] file |
部分的に解釈される行 (「files」の部分は解釈されない) |
hosts: nisplus [NOTFOUND=return] # files |
キーサーバーは、起動時にだけネームサービススイッチ構成ファイルの publickey エントリを参照します。つまり、スイッチ構成ファイルを更新しても、再起動しない限りキーサーバーはそのことを認識しないということになります。