この章では、ネームサービススイッチについて説明します。ネームサービススイッチは、異なるネームサービスの使用方法を調整するために使います。
ネームサービススイッチは nsswitch.conf という名前のファイルです。クライアントのマシンやアプリケーションがネットワーク情報を得る方法を管理します。ネームサービススイッチは、次のような getXbyY() インタフェースのいずれかを呼び出すクライアントアプリケーションによって使用されます。
各マシンの /etc ディレクトリには、スイッチファイルがあります。ファイルの各行は、ホスト、パスワード、グループなどの特定タイプのネットワーク情報を識別します。そのあとに 1 つまたは複数のネットワーク情報の場所が続きます。
クライアントは、1 つまたは複数のスイッチのソースからネーミング情報を入手できます。たとえば、NIS のクライアントは、NIS マップからホスト情報を、ローカルの /etc ファイルからパスワード情報をそれぞれ入手できます。さらに、クライアントはスイッチが各ソースを使用する条件を指定することもできます。表 2–1 を参照してください。
Solaris システムは、インストールの過程で、nsswitch.conf ファイルを各マシンの /etc ディレクトリに自動的にロードします。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 用のデフォルトファイルは提供されませんが、これらのファイルのどれでも編集して 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 |
パスワードとグループ情報を対象に、/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 ファイル内の検索は、項目の記載順に実行されます。ただし、passwd -r repository コマンドを使用して特に指定しない限り、パスワードの更新は逆順で実行されます。詳細は、「スイッチファイルとパスワード情報」を参照してください。
クライアントのライブラリルーチンには、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 を変更する必要があります。詳細は、第 12 章LDAP クライアントの設定 (手順)を参照してください。
NIS+ テンプレートファイル。nsswitch.nisplus 構成ファイルでは、passwd、group、automount、aliases を除くすべての情報の一次ソースとして NIS+ が指定されています。これら 4 つのファイルでは、一次ソースはローカルの /etc ディレクトリのファイルで、二次ソースは NIS+ テーブルです。[NOTFOUND=return] という検索基準は、スイッチが「No such entry」というメッセージを受け取ったら NIS+ テーブルの検索を停止するという意味です。スイッチは、NIS+ サーバーを使用できない場合のみ、ローカルファイルを検索します。
NIS テンプレートファイル。nsswitch.nis 構成ファイルでは、passwd、group、automount、aliases を除くすべての情報の一次ソースとして NIS が指定されています。これら 4 つのファイルでは、一次ソースはローカルの /etc ディレクトリのファイルで、二次ソースは NIS マップです。[NOTFOUND=return] という検索基準は、スイッチが「No such entry」というメッセージを受け取ったら 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 製品で用意されているスイッチファイルは、次のとおりです。
# # # /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 |
publickey エントリでは、nisplus を値のリストの先頭にしてください。たとえば、publickey: nisplus files が、複数の NIS+ ドメインから参照される nsswitch.conf ファイルの正しいエントリです。
# # /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' back end 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.nis ファイルがコピーされ新しい nsswitch.conf ファイルが作成されます。
nsswitch.conf ファイルは、次の代替 (テンプレート) バージョンと一緒に、Solaris 9 リリースソフトウェアによって各マシンの /etc ディレクトリに自動的にロードされます。
これらの代替テンプレートファイルには、NIS+ および NIS サービス、ローカルファイル、および LDAP によって使用されるデフォルトのスイッチ構成が含まれています。DNS 用のデフォルトファイルは提供されませんが、これら 4 つのファイルのどれでも編集して DNS 用に使用できます。Solaris ソフトウェアをマシンに最初にインストールするとき、インストール担当者はマシンのデフォルトのネームサービスを選択します。インストール中に、対応するテンプレートファイルが /etc/nsswitch.conf にコピーされます。たとえば、NIS を使用しているクライアントマシンでは、インストールの過程で nsswitch.nis が nsswitch.conf にコピーされます。
ネットワークがインターネットに接続されており、ユーザーが DNS を使用してインターネット上のホストにアクセスする必要がある場合は、DNS 転送を有効にする必要があります。
特殊な名前空間を持っている場合を除き、通常の操作には nsswitch.conf にコピーされるデフォルトのテンプレートファイルを使用します。
マシンのネームサービスを変更するときは、そのマシンのスイッチファイルを新しいネームサービスに対応させて変更する必要があります。たとえば、マシンのネームサービスをファイルから NIS に変更する場合、スイッチファイルを NIS に対応したものに変更する必要があります。スイッチファイルを変更するには、対応するテンプレートファイルを nsswitch.conf にコピーします。
NIS+ インストールスクリプトを使って NIS+ をマシンにインストールすると、NIS+ テンプレートファイルが自動的に nsswitch.conf にコピーされます。この場合、特にスイッチファイルをカスタマイズしたいというのでなければ、スイッチファイルを明示的に変更する必要はありません。
スイッチファイルを変更する前に、ファイルに列挙されている情報ソースが正しく設定されていることを確認してください。たとえば、NIS 用スイッチファイルに変更するのであれば、ワークステーションには NIS サービスへのアクセス権が必要になり、ローカルファイル用スイッチファイルに変更するのであれば、それらのローカルファイルがワークステーション上に正しく設定されている必要があります。
スイッチファイルを変更する場合は、次の手順に従います。
LDAP ネームサービスを使用するには、すべての LDAP クライアントマシンを正しく設定し、nsswitch.conf を変更する必要があります。詳細は、第 12 章LDAP クライアントの設定 (手順)を参照してください。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 9 章「役割によるアクセス制御の使用 (手順)」を参照してください。
マシンのネームサービスに適した代替ファイルを 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 デーモンによってスイッチ情報がキャッシュに書き込まれます。nscd(1M) のマニュアルページを参照してください。
ライブラリルーチンの中には、nsswitch.conf ファイルが変更されたかどうかを定期的にチェックしないものがあります。 このため、マシンをリブートして、nscd とこれらのライブラリルーチンが確実に最新スイッチの情報を持つようにする必要があります。
nsswitch.conf ファイルでは、次のいくつかのセクションで説明するとおり、クライアントの DNS 転送も制御されます。DNS 転送によって、クライアントへのインターネットでのアクセスが可能になります。NIS との互換性を持つ NIS+ 用に DNS 転送を設定する方法については、『Solaris のシステム管理 (ネーミングとディレクトリサービス : NIS+ 編)』を参照してください。
NIS、NIS+、および LDAP では、IPv6 データを格納できるだけでなく、プロトコルのトラフィックに IPv6 トランスポートを使用することもできます。BIND Version 8.3.3 から、Solaris OS 上の DNS でクライアント側での IPv6 トランスポートの使用がサポートされています。BIND Version 8.4.2 以降は、DNS が Solaris での 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 および group のソースを compat に変更します。次に、passwd_compat: nisplus というエントリを、nsswitch.conf ファイルの passwd または group エントリのあとに追加します。
passwd: compat passwd_compat: nisplus group: compat group_compat: nisplus |
上記の指定により、/etc ファイルと NIS+ テーブルからファイルの +/- エントリで指定されているとおりにクライアントルーチンでネットワーク情報が入手されます。
NIS。Solaris 4.x リリースの構文と同じ効果を得るには、passwd と group の各ソースを compat に変更します。
passwd: compat group: compat |
この指定により、/etc ファイルと NIS マップから +/- エントリで指定されているとおりにネットワーク情報が入手されます。
NIS+ サーバーが NIS 互換モードで動作している場合、クライアントマシンでは netgroup テーブルに対して ypcat を実行できません。実行すると、エントリの有無に関わらず「テーブルが空である」という結果が返されます。
files、nisplus などの複数のリポジトリ内のパスワード情報全体にアクセスできます。nsswitch.conf ファイルを使用して、その情報の検索順序を設定できます。
nsswitch.conf ファイルでは、files を passwd 情報の最初のソースにしてください。
NIS+ の環境では、nsswitch.conf ファイルの passwd 行に次の順序でリポジトリを指定します。
passwd: files nisplus |
NIS の環境では、nsswitch.conf ファイルの passwd 行に次の順序でリポジトリを指定します。
passwd: files nis |
files を最初に指定すると、システムのネットワークまたはネームサービスにいくつか問題があっても、ほとんどの場合 root でログインできます。
同一ユーザーを複数のリポジトリで管理することは、推奨されていません。ユーザーごとに 1 つのリポジトリで集中的にパスワードを管理することによって、混乱や誤りを減らすことができます。ユーザーごとに複数のリポジトリを管理する場合は、 passwd -r コマンドを使用してパスワード情報を更新します。
passwd -r repository |
-r オプションによってリポジトリを指定しないと、passwd は nsswitch.conf に指定されているリポジトリを逆順に更新します。