この章では、ネームサービススイッチの機能と、これを使用してクライアントが 1 つまたは複数のソースからネーミング情報を入手する方法について説明します。ネームサービススイッチは、異なるネームサービスの使用方法を調整するために使います。Solaris ネームサービスとディレクトリサービスの DNS、NIS、および LDAP の概要については、『Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)』の「ネームサービスとディレクトリサービス (概要)」を参照してください。
ネームサービススイッチは nsswitch.conf という名前のファイルで、クライアントのマシンやアプリケーションがネットワーク情報を得る方法を管理します。これは、クライアントマシンまたはクライアントアプリケーションがネットワーク情報を取得する方法を制御します。ネームサービススイッチは、次のような getXbyY() インタフェースのいずれかを呼び出すクライアントアプリケーションによって使用されます。
各マシンの /etc ディレクトリには、スイッチファイルがあります。ファイルの各行は、host、passwd、group などの特定タイプのネットワーク情報を識別します。その後には、クライアントがネットワーク情報を探すための 1 つまたは複数のソースが続きます。
クライアントは、1 つまたは複数のスイッチのソースからネーミング情報を入手できます。たとえば、NIS+ のクライアントは、NIS+ テーブルからホスト情報を、ローカルの /etc ファイルからパスワード情報をそれぞれ入手できます。さらに、スイッチが各ソースを使用する条件を指定することもできます。 表 1–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 にコピーされるデフォルトのテンプレートファイルを使用します。
マシンの主要なネームサービスを後から変更する場合は、該当する代替スイッチファイルを nsswitch.conf にコピーします (「nsswitch.conf テンプレートファイル」 を参照)。また、/etc/nsswitch.conf ファイルの該当行を編集することで、クライアントが使用するネットワーク情報のソースを変更することもできます。この構文については以下で説明します。詳細については、「ネームサービススイッチの変更」を参照してください。
nsswitch.conf ファイルは、基本的には 16 種類の情報とそのソース (getXXbyYY() 関数の情報検索先) のリストです。順序は必ずしも以下のとおりではありません。
aliases
bootparams
ethers
group
hosts
ipnodes
netgroup
netmasks
networks
passwd (シャドウ情報含む)
protocols
publickey
rpc
services
automount
sendmailvars
次の表に、スイッチファイル内で上記の各情報タイプ用に指定できるソースの種類の詳細を示します。
表 1–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 つを返します。表示される状態メッセージを次の表に示します。
表 1–2 スイッチ状態メッセージ
状態メッセージ |
意味 |
---|---|
SUCCESS |
要求されたエントリがソース内で発見された |
UNAVAIL |
ソースが応答しない、または使用不可。つまり、NIS+ テーブル、NIS マップ、または /etc ディレクトリのファイルが見つからなかった (アクセスできなかった) |
NOTFOUND |
エントリなし。テーブル、マップ、ファイルにアクセスしたが、必要な情報は見つからなかった |
TRYAGAIN |
ソース使用中のため再検索の必要あり。テーブル、マップ、ファイルは見つかったが、照会に対して応答しなかった |
次の表に示すように、状態メッセージに対して次の 2 つの動作のどちらかで応答するようにスイッチに指示できます。
表 1–3 スイッチ状態メッセージへの応答
動作 |
意味 |
---|---|
return |
情報の検索を中止する |
continue |
次のソースがあれば、それを検索する |
nsswitch.conf ファイルの状態メッセージと動作オプションの組み合わせによって、関数の各ステップでの動作が決まります。この状態と動作の組み合わせのことを、「検索基準」と呼びます。
スイッチのデフォルト検索規準は、どのソースについても同じです。これらを上記の状態メッセージに基づいて説明すれば次のようになります。
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 ファイル内の検索は、項目の記載順に実行されます。ただし、passwd -r repository コマンドで指定されていない限り、パスワードの更新は逆順で実行されます。詳細については、「スイッチファイルとパスワード情報」を参照してください。
クライアントのライブラリ関数には、nsswitch.conf ファイルにおいて「必要なエントリがない」、「エントリの構文が誤っている」といった場合に使用されるコンパイル時に組み込まれるデフォルトエントリが含まれています。これらのエントリは nsswitch.conf ファイルのデフォルトエントリと同じものです。
ネームサービススイッチは、テーブル名やソース名のスペルが正しいものとして処理をします。スペルが正しくない場合は、デフォルト値が使用されます。
auto_home テーブル、auto_master テーブルとマップのスイッチ検索基準は、automount と呼ばれる1つのカテゴリに統合されます。
timezone テーブルはスイッチを使用しないため、スイッチファイルのリストには含まれていません。
nsswitch.conf ファイル中の行のうち、「#」で始まっているものはコメント行として解釈され、ファイルを検索する関数では無視されます。
行の途中にコメント文字 (#) が含まれる場合、コメント文字の前の文字列は nsswitch.conf ファイルを検索するルーチンによって解釈されます。コメント文字よりあとの文字列は、コメントとして解釈され、無視されます。
表 1–4 スイッチファイルのコメント例
行の種類 |
コメント例 |
---|---|
コメント行 (無視される) |
# hosts: nisplus [NOTFOUND=return] files |
完全に解釈される行 |
hosts: nisplus [NOTFOUND=return] file |
部分的に解釈される行 (「files」の部分は解釈されない) |
hosts: nisplus [NOTFOUND=return] # files |
nsswitch.conf に変更を加えた後は、キーサーバーを再起動する必要があります。
キーサーバーは、起動時にだけネームサービススイッチ構成ファイルの publickey エントリを参照します。つまり、スイッチ構成ファイルを更新しても、再起動しない限りキーサーバーは publickey エントリへの変更を認識しません。
Solaris ソフトウェアでは、4 つの nsswitch.conf テンプレートファイルを用意して、さまざまなネームサービスに対応しています。デフォルトの情報ソース (一次ソース、およびそれに続くもの) としては、それぞれ異なったものが指定されています。
4 つのテンプレートファイルについて説明します。
「NIS+ テンプレートファイル」(nsswitch.nisplus ファイル)。このテンプレートファイルで passwd、group、automount、aliases を除くすべての情報の一次ソースとして指定されているのは、NIS+ です。passwd、group、automount、aliases の一次ソースとして指定されているのは /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 nsswitch.ldap 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 |
Solaris ソフトウェアをはじめてインストールするときのデフォルトの nsswitch.conf ファイルは、Solaris ソフトウェアをインストールする際に選択したネームサービスで決まります。このファイルの各行は、ネットワーク情報の種類 (ホスト、パスワード、グループなど) と、それに対する 1 つ以上の情報源 (NIS+ テーブル、NIS マップ、DNS ホストテーブル、同一ワークステーション上の /etc など) を対応させています。クライアントは、この情報源から各情報を検索します。ネームサービスが選択されると、そのサービスのスイッチテンプレートファイルがコピーされ、新しい nsswitch.conf ファイルが作成されます。たとえば、NIS+ が選択された場合は、nsswitch.nisplus ファイルがコピーされて nsswitch.conf ファイルが作成されます。
/etc/nsswitch.conf ファイルは、Solaris 10 ソフトウェアにより各マシンの /etc ディレクトリに自動的に配置されます。また次の代替テンプレートファイルも作成されます。
これらの代替テンプレートファイルには、NIS+ と NIS サービス、ローカルファイル、および LDAP で使用されるデフォルトのスイッチ構成が入っています。Solaris ソフトウェアをマシンに最初にインストールする時に、インストール担当者はマシンのデフォルトのネームサービス (NIS+、NIS、ローカルファイル、または LDAP) を選択します。インストール時には、対応するテンプレートファイルが /etc/nsswitch.conf にコピーされます。たとえば、クライアントが NIS+ を使用しているマシンでは、インストールの過程で nsswitch.nisplus ファイルが nsswitch.conf にコピーされます。
特殊な名前空間を持っている場合を除き、通常の操作には 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 デーモンとそれらのライブラリ関数が確実に最新のスイッチ情報を持つようにする必要があります。
スーパーユーザーとしてログインします。
/etc/nsswitch.conf ファイルを編集します。
新しい ipnodes ソースを追加して、ネームサービス (ldap など) を指定します。
ipnodes: ldap [NOTFOUND=return] files |
ipnodes は、デフォルトでは files です。IPv4 から IPv6 への変更中には、すべてのネームサービスが IPv6 のアドレスを認識できるわけではないので、デフォルトの files を使用する必要があります。デフォルトを使用しない場合は、アドレスの解決中に不必要な遅延が生じることがあります。
ファイルを保存して、マシンを再起動します。
nscd デーモンはこの情報をキャッシュに保存して起動時にこの情報を読み取るので、 ここでマシンを再起動する必要があります。
/etc/passwd、/etc/shadow、および /etc/group ファイルに +/- が使用される場合は、互換性を確保するために、nsswitch.conf ファイルを変更する必要があります。
「NIS+」。NIS+ で +/- 構文と同じ効果を得るには、passwd ソースと group ソースを compat に変更し、nsswitch.conf ファイルの passwd エントリまたは group エントリの後に passwd_compat: nisplus というエントリを追加します (下記参照)。
passwd: compat passwd_compat: nisplus group: compat group_compat: nisplus |
この指定により、クライアント関数のネットワーク情報獲得先は、ファイル中に +/- エントリを指定したのと同じように、/etc ディレクトリのファイルと NIS+ テーブルになります。
「NIS」。SunOSTM 4 と同じ構文を使用するには、passwd ソースと group ソースを compat に変更します。
passwd: compat group: compat |
この指定により、クライアント関数のネットワーク情報獲得先は、ファイル中に +/- エントリを指定したのと同じように、/etc ファイルと NIS マップになります。
NIS+ サーバーが NIS 互換モードで動作している場合、クライアントマシンでは netgroup テーブルに対して ypcat を実行できません。実行すると、エントリの有無に関わらず「テーブルが空である」という結果が出ます。
files や nisplus など複数のリポジトリ内のパスワード情報全体にアクセスすることが可能です。nsswitch.conf ファイルを使って、この情報の検索順序を設定できます。
nsswitch.conf ファイルでは、files を passwd 情報の 1 番目のソースにしてください。
NIS+ 環境では、nsswitch.conf ファイルの passwd 行に、以下の順番でリポジトリを指定する必要があります。
passwd: files nisplus |
NIS 環境では、nsswitch.conf ファイルの passwd 行に、以下の順番でリポジトリを指定する必要があります。
passwd: files nis |
files を先頭に指定することで、大半の状況では (システムでネットワークまたはネームサービスに関係した問題が発生している場合でも) root でのログインが許可されます。
同一ユーザーを複数のリポジトリで管理することは、推奨されていません。ユーザーごとに単一のリポジトリ内でパスワードを集中管理することで、混乱やエラーが発生する可能性を低減できます。ユーザーごとに複数のリポジトリを管理する場合は、passwd -r コマンドを使用して、パスワード情報を更新してください。
passwd -r repository |