この章では、ネームサービススイッチについて説明します。 ネームサービススイッチは、異なるネームサービスの使用方法を調整するために使います。
ネームサービススイッチは nsswitch.conf という名前のファイルです。 クライアントのマシンやアプリケーションがネットワーク情報を得る方法を管理します。 ネームサービススイッチは、次のような getXbyY() インタフェースのいずれかを呼び出すクライアントアプリケーションによって使用されます。
各マシンの /etc ディレクトリには、スイッチファイルがあります。 ファイルの各行は、ホスト、パスワード、グループなどの特定タイプのネットワーク情報を識別します。その後に 1 つまたは複数のネットワーク情報の場所が続きます。
クライアントは、1 つまたは複数のスイッチのソースからネーミング情報を入手できます。 たとえば、NIS+ のクライアントは、NIS+ テーブルからホスト情報を、ローカルの /etc ファイルからパスワード情報をそれぞれ入手できます。 さらに、クライアントはスイッチが各ソースを使用する条件を指定することもできます。 表 2–1 を参照してください。
Solaris オペレーティング環境では、インストールの過程で、各マシンの /etc ディレクトリに nsswitch.conf ファイルが自動的にロードされます。 LDAP、NIS、NIS+ またはローカルファイル用にスイッチファイルの 4 つの代替 (テンプレート) バージョンも /etc にロードされます。 nsswitch.conf テンプレートファイル を参照してください。
これら 4 つのファイルは、代替デフォルトスイッチファイルです。 各ファイルはそれぞれ /etc ファイル、NIS、NIS+、LDAP という異なる主要なネームサービス用に設計されています。 Solaris ソフトウェアをマシンに最初にインストールする時に、インストール担当者はマシンのデフォルトのネームサービス (NIS+、NIS、ローカルファイル、または LDAP) を選択します。 インストール中に、対応するテンプレートファイルが nsswitch.conf ファイルにコピーされます。 たとえば、LDAP を使用するクライアントマシンでは、インストールの過程で nsswitch.ldap が nsswitch.conf にコピーされます。 特殊な名前空間を持っている場合を除き、通常の操作には nsswitch.conf にコピーされるデフォルトのテンプレートファイルを使用します。
DNS 用のデフォルトファイルは提供されませんが、これら 4 つのファイルのどれでも編集して DNS 用に使用できます。 詳細は、DNS とインターネットでのアクセス を参照してください。
マシンの主要なネームサービスを後から変更する場合は、該当する代替スイッチファイルを nsswitch.conf にコピーします。 nsswitch.conf テンプレートファイル を参照してください。 NIS 管理者はまた、/etc/nsswitch.conf ファイルの該当行を編集することによって、クライアントで使用する特定タイプのネットワーク情報のソースを変更できます。 構文について、以下に説明します。 詳細については、ネームサービススイッチを変更する方法 を参照してください。
nsswitch.conf ファイルは、基本的には 16 種類の情報とそのソース (getXXbyYY() 関数の情報検索先) のリストです。 16 種類の情報は次のとおりです (順序は、必ずしも次のとおりではありません)。
aliases
bootparams
ethers
group
hosts
ipnodes
netgroup
netmasks
networks
passwd (シャドウ情報含む)
protocols
publickey
rpc
services
automount
sendmailvars
次の表に、上記の情報タイプのスイッチファイルの中に表示できるソースの種類とその説明を示します。
表 2–1 スイッチファイルの情報ソース
ソース |
説明 |
---|---|
files |
クライアントの /etc ディレクトリに格納されているローカルファイル (/etc/passwd など) |
nisplus |
NIS+ テーブル。 hosts テーブルなど |
nis |
NIS マップ。 hosts マップなど。 |
compat |
compat パスワードとグループ情報を対象に、/etc/passwd、/etc/shadow、/etc/group ファイルで旧形式の「+」または「-」構文をサポートする |
dns |
ホスト情報を DNS から入手するように指定する |
ldap |
エントリを LDAP ディレクトリから入手するように指定する |
単一ソース。 nisplus のような情報のソースが 1 つだけの場合、スイッチを使用している関数は、そのソースだけで情報を検索します。 情報が見つかった場合、「success」という状態メッセージが返されます。 情報が見つからない場合は、検索が停止され、「success」 以外の状態メッセージが返されます。 状態メッセージに基づいて何をするかは、関数によって異なります。
複数ソース。 テーブルに特定の情報タイプのソースが複数ある場合、スイッチは最初のソースから検索を行うように関数に指示します。 情報が見つかった場合、「success」という状態メッセージが返されます。 最初のソースで情報が見つからない場合は、次のソースが検索されます。 関数は情報が見つかるか、return 処理によって中止されるまで全ソースを検索します。 必要な情報がどのソースにもなかったとき、関数は検索を停止し、non-success という状態メッセージを返します。
情報が見つかると、「success」という状態メッセージが返されます。 探している情報が見つからない場合は、3 種類のエラー状態メッセージのいずれかが返されます。 表示される状態メッセージを次の表に示します。
表 2–2 スイッチ状態メッセージ
状態メッセージ |
意味 |
---|---|
SUCCESS |
要求されたエントリがソース内で発見された |
UNAVAIL |
ソースが応答しない、または使用不可。 つまり、NIS+ テーブル、NIS マップ、または /etc ディレクトリのファイルが見つからなかったかアクセスできなかった |
NOTFOUND |
ソースが「エントリなし」と応答した。テーブル、マップ、ファイルにアクセスしたが、必要な情報は見つからなかった。 |
TRYAGAIN |
ソース使用中のため 再検索の必要あり。 テーブル、マップ、ファイルは見つかったが、照会に対して応答しなかった |
次の表に示すように、状態メッセージに対して 2 つの「動作」のどちらかで応答するようにスイッチに指示できます。
表 2–3 スイッチ状態メッセージへの応答
動作 |
意味 |
---|---|
return |
情報の検索を停止する |
continue |
次のソースの検索を試みる |
nsswitch.conf ファイルの状態メッセージと動作オプションの組み合わせによって、関数の各ステップでの動作が決まります。 状態と動作を組み合わせて、「検索基準」を構成します。
スイッチのデフォルト検索基準は、どのソースについても同じです。 これらを上記の状態メッセージに基づいて説明すると、次のようになります。
UNAVAIL=continue。 次のソース (nsswitch.conf ファイルに指定されたもの) を使用して検索を続行する。 次のソースがなければ、「NOTFOUND」という状態メッセージを返す
NOTFOUND=continue。 次のソース (nsswitch.conf ファイルに指定されたもの) を使用して検索を続行する。 次のソースがなければ、「NOTFOUND」という状態メッセージを返す
TRYAGAIN=continue。 次のソース (nsswitch.conf ファイルに指定されたもの) を使用して検索を続行する。 次のソースがなければ、「NOTFOUND」という状態メッセージを返す
ほかの検索基準を明示的に指定してデフォルトの検索基準を変更するには、上記の STATUS=action という構文を使用します。 たとえば、NOTFOUND 状態に対し、デフォルトの動作では次のソースに対する検索を続行しますが、 NOTFOUND 状態の場合に検索を停止するように networks の設定を変更するには、スイッチファイルの 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 |
nsswitch.conf に変更を加えた後は、キーサーバーを再起動する必要があります。
キーサーバーは、起動時にだけネームサービススイッチ構成ファイルの publickey エントリを参照します。 スイッチ構成ファイルを変更しても再起動しない限り、キーサーバーは変更を登録しません。
Solaris オペレーティング環境では、さまざまなネームサービスに対応できるように、スイッチテンプレートファイルが 4 つ用意されています。 ファイルごとに、異なるデフォルトの情報ソースセットが提供されます。
4 つのテンプレートファイルは、次のとおりです。
「LDAP テンプレートファイル」(nsswitch.ldap ファイル)。 この構成ファイルでは、マシンの情報の一次ソースとして LDAP ディレクトリが指定されています。
LDAP ネームサービスを使用するには、すべての LDAP クライアントマシンを正しく設定し、nsswitch.conf を変更する必要があります。 詳細については、第 16 章「クライアントの設定 (手順)」を参照してください。
「NIS+ テンプレートファイル」(nsswitch.nisplus ファイル)。 nsswitch.nisplus 構成ファイルでは、passwd、group、automount、aliases を除くすべての情報の一次ソースとして NIS+ が指定されています。 これら 4 つのファイルでは、一次ソースはローカルの /etc ディレクトリのファイルで、 二次ソースは NIS+ テーブルです。 [NOTFOUND=return] という検索基準は、スイッチが「No such entry」というメッセージを受け取ったら NIS+ テーブルの検索を停止するという意味です。 スイッチは、NIS+ サーバーを使用できない場合、ローカルファイルのみ検索します。
「NIS テンプレートファイル」(nsswitch.nis ファイル)。 この構成ファイルは、NIS+ テーブルではなく NIS マップを使用するという点を除けば、NIS+ テンプレートファイルとほぼ同じです。 passwd、group の情報に関しては files nis という順序で検索するよう指定されているため、/etc/passwd と /etc/group に + エントリを指定する必要はありません。
「Files テンプレートファイル」(nsswitch.files ファイル)。 この構成ファイルでは、マシンの情報ソースとしてローカルの /etc ディレクトリのファイルだけが指定されています。 netgroup に関する files のソースは存在しないため、クライアントがスイッチファイルでこのエントリを使用することはありません。
要件に一番近いテンプレートファイルを nsswitch.conf 構成ファイルにコピーして、必要に応じてファイルを変更します。
たとえば、LDAP テンプレートファイルを使用する場合は、次のコマンドを入力します。
mymachine# cp /etc/nsswitch.ldap /etc/nsswitch.conf |
Solaris オペレーティング環境で用意されている 4 つのスイッチファイルは、次のとおりです。
# # # /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 |
# # /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 |
# # /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 will notuse # netgroups at all. netgroup: files automount: files aliases: files services: files sendmailvars: files |
# # /etc/nsswitch.ldap: # # An example file that could be copied over to /etc/nsswitch.conf; it # uses LDAP 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 ldap group: files ldap hosts: ldap [NOTFOUND=return] files networks: ldap [NOTFOUND=return] files protocols: ldap [NOTFOUND=return] files rpc: ldap [NOTFOUND=return] files ethers: ldap [NOTFOUND=return] files netmasks: ldap [NOTFOUND=return] files bootparams: ldap [NOTFOUND=return] files publickey: ldap [NOTFOUND=return] files netgroup: ldap automount: files ldap aliases: files ldap # for efficient getservbyname() avoid ldap services: files ldap sendmailvars: files |
Solaris オペレーティング環境と共にインストールされるデフォルトの nsswitch.conf ファイルは、インストール時に選択したネームサービスで決まります。 ファイルの各行は、ネットワーク情報の種類 (ホスト、パスワード、グループなど) と、それに対する情報ソース (NIS+ テーブル、NIS マップ、DNS ホストテーブル、同一マシン上の /etc など) を対応させています。 ネームサービスを選択すると、そのサービスのスイッチテンプレートファイルがコピーされ新しい nsswitch.conf ファイルが作成されます。 たとえば、NIS+ を選択した場合は、nsswitch.nisplus ファイルがコピーされ新しい nsswitch.conf ファイルが作成されます。
nsswitch.conf ファイルは、Solaris 9 リリースをインストールすると各マシンの /etc ディレクトリに自動的に作成されます。また、次の 4 つの代替テンプレートファイルも作成されます。
これらの 4 つの代替テンプレートファイルには、それぞれネットワーク情報の情報ソースとして NIS+、NIS、ローカルファイル、 または LDAP を使用する標準的なスイッチ構成が設定されています。 DNS 用のデフォルトファイルは提供されませんが、これら 4 つのファイルのどれでも編集して DNS 用に使用できます。 第 5 章「DNS の管理 (参照情報)」を参照してください。 Solaris オペレーティング環境をマシンに最初にインストールするとき、インストーラによりマシンのデフォルトのネームサービスが選択されます。 インストール中に、選択されたネームサービスに対応するテンプレートファイルが /etc/nsswitch.conf にコピーされます。 たとえば、NIS+ を使用しているクライアントマシンでは、インストールの過程で nsswitch.nisplus が nsswitch.conf にコピーされます。
ネットワークがインターネットに接続されており、ユーザーが DNS を使用してインターネット上のホストにアクセスする必要がある場合は、DNS 転送を有効にする必要があります。
特殊な名前空間を持っている場合を除き、通常の操作には nsswitch.conf にコピーされるデフォルトのテンプレートファイルを使用します。
マシンのネームサービスを変更するときは、そのマシンのスイッチファイルを新しいネームサービスに対応させて変更する必要があります。 たとえば、マシンのネームサービスを NIS から NIS+ に変更する場合、スイッチファイルを NIS+ に対応したものに変更する必要があります。 スイッチファイルを変更するには、対応するテンプレートファイルを nsswitch.conf にコピーします。
NIS+ インストールスクリプトを使って NIS+ をマシンにインストールすると、NIS+ テンプレートファイルが自動的に nsswitch.conf にコピーされます。 この場合、特にスイッチファイルをカスタマイズしたいというのでなければ、スイッチファイルを明示的に変更する必要はありません。
スイッチファイルを変更する前に、ファイルに列挙されている情報ソースが正しく設定されていることを確認してください。 たとえば、NIS+ 用スイッチファイルに変更するのであれば、ワークステーションには NIS+ サービスへのアクセス権が必要になり、 ローカルファイル用スイッチファイルに変更するのであれば、それらのローカルファイルがワークステーション上に正しく設定されている必要があります。
スイッチファイルを変更する場合は、次の手順に従います。
スーパーユーザーになります。
使用するネームサービス用のテンプレートファイルを nsswitch.conf にコピーします。
「NIS+ 用」(NIS+ スクリプトにより自動的にコピーされる)
client1# cd /etc client1# cp nsswitch.nisplus nsswitch.conf |
「NIS 用」
client1# cd /etc client1# cp nsswitch.nis nsswitch.conf |
「ローカルの /etc ファイル用」
client1# cd /etc client1# cp nsswitch.files nsswitch.conf |
マシンをリブートします。
nscd デーモンによってスイッチ情報がキャッシュに書き込まれます。 ライブラリ関数の中には、nsswitch.conf ファイルが変更されたかどうかを定期的にチェックしないものがあります。 このため、マシンをリブートして、nscd とこれらのライブラリ関数が確実に最新スイッチの情報を持つようにする必要があります。
LDAP ネームサービスを使用するには、すべての LDAP クライアントマシンを正しく設定し、nsswitch.conf を変更する必要があります。 詳細については、第 16 章「クライアントの設定 (手順)」を参照してください。
nsswitch.conf ファイルでは、以下のいくつかのセクションで説明するとおり、クライアントの DNS 転送も制御されます。 DNS 転送によって、クライアントへのインターネットでのアクセスが可能になります。 NIS と NIS+ 用に DNS 転送を設定する方法については、『Solaris のシステム管理 (ネーミングとディレクトリサービス : FNS、NIS+ 編)』を参照してください。
NIS、NIS+、および LDAP では、IPv6 データを格納できるだけでなく、プロトコルのトラフィックに IPv6 トランスポートを使用することもできます。 DNS は、クライアント側でのみ IPv6 トランスポートの使用をサポートします。 BIND Version 8.3.3 では、DNS サーバーは IPv6 トランスポートをサポートしません。
nsswitch.conf ファイルは、IPv6 アドレスの検索基準を制御します。 IPv6 は、32 ビットから 128 ビットまで IP アドレスサイズを大きくして、より多くのアドレス階層をサポートし、 より多くのノードにアドレス指定できるようにします。 IPv6 の構成と実装の詳細については、『Solaris のシステム管理 (IP サービス)』を参照してください。
IPv6 アドレスには、新しい ipnodes ソースを使用してください。 /etc/inet/ipnodes ファイルには、IPv4 と IPv6 のアドレスが格納されています。 /etc/inet/ipnodes ファイルは、/etc/hosts ファイルと同じフォーマットを使用します。
IPv6 のネームサービスでは、 検索用に新しい ipnodes ソースを使用しています。 たとえば、LDAP で IPv6 アドレスを認識させる場合は、次のように指定します。
ipnodes: ldap [NOTFOUND=return] files |
起こり得る遅延の問題について
ipnodes は、デフォルトでは files です。 IPv4 から IPv6 への変更中には、すべてのネームサービスが、IPv6 アドレスを認識できるわけではないので、デフォルトの files を使用します。 このデフォルトを使用しない場合には、アドレスの解決中に不必要な遅延が生じることがあります (ブート時の遅延など)。
アプリケーションは、IPv4 のアドレスを ipnodes データベースで検索してから、hosts データベースを検索します。 ipnodes を指定する前に、IPv4 アドレスの両方のデータベースを検索する時間を考慮にいれる必要があります。
/etc/passwd、/etc/shadow、/etc/group の各ファイルで +/- 構文を使用する場合は、nsswitch.conf ファイルを変更して互換性を確保する必要があります。
「NIS+」。 NIS+ で +/- 構文と同じ効果を得るには、passwd および groups のソースを compat に変更します。 次に、passwd_compat: nisplus というエントリを、nsswitch.conf ファイルの passwd または group エントリの後に追加します。
passwd: compat passwd_compat: nisplus group: compat group_compat: nisplus |
上記の指定により、/etc ファイルと NIS+ テーブルから +/- エントリで指定されているとおりにネットワーク情報が入手されます。
「NIS」。 Sun オペレーティング環境 4.x リリースの構文と同じ効果を得るには、passwd と groups の各ソースを compat に変更します。
passwd: compat group: compat |
この指定により、 /etc ファイルと NIS マップから+/- エントリで指定されているとおりにネットワーク情報が入手されます。
NIS+ サーバーが NIS 互換モードで動作している場合、クライアントマシンでは netgroup テーブルに対して ypcat を実行できません。 実行すると、エントリの有無に関わらず「テーブルが空である」という結果が返されます。
nsswitch.conf ファイルでは、passwd 情報のために files を 1 番目のソースにしてください。 files が 1 番目のソースでない場合は、ネットワークセキュリティが低くなるか、ログインが難しくなります。
たとえば、NIS+ の環境では、nsswitch.conf ファイルの passwd 行は次のようになります。
passwd: files nisplus |
NIS の環境では、nsswitch.conf ファイルの passwd 行は次のようになります。
passwd: files nis |