Solaris のシステム管理 (ネーミングとディレクトリサービス : FNS、NIS+ 編)

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

この章では、ネームサービススイッチ、その機能、およびこのスイッチを使用してクライアントが 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 ファイルを自動的にロードします。スイッチファイルの 4 つの代替ファイル (テンプレート) も、LDAP、NIS、NIS+ またはローカルファイルの /etc にロードされます。nsswitch.conf テンプレートファイル を参照してください。

これら 4 つのファイルは、代替デフォルトスイッチファイルです。各ファイルはそれぞれ /etc ファイル、NIS、NIS+ 、LDAP という異なる主要なネームサービス用に設計されています。Solaris ソフトウェアがマシンに最初にインストールされると、インストーラはマシンのデフォルトのネームサービス (NIS+、NIS、ローカルファイル、または LDAP) を選択します。 インストール中に、対応するテンプレートファイルが nsswitch.conf ファイルにコピーされます。たとえば、LDAP を使用するマシンクライアントの場合、インストーラは nsswitch.ldapnsswitch.conf にコピーします。特殊な名前空間を持っている場合を除き、通常の操作には nsswitch.conf にコピーされるデフォルトのテンプレートファイルを使用できます。

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

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

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

次の表では、上記の情報タイプにスイッチファイルの中で指定できるソースについて説明します。

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

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

これらはデフォルトの検索基準であるため、自動的に表示されます。つまり、スイッチファイルで、明示的に指定する必要はありません。ほかの検索基準を明示的に指定してデフォルトの検索基準を変更するには、上記の 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 ファイルを検索するルーチンによって解釈されます。コメント文字よりあとの文字列は、コメントとして解釈され、無視されます。

表 1–4 スイッチファイルのコメント例

行の種類 

例 

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

#hosts: nisplus [NOTFOUND=return] files 

完全に解釈される行 

hosts: nisplus [NOTFOUND=return] file 

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

hosts: nisplus [NOTFOUND=return] # files 

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


注意 – 注意 –

nsswitch.conf を変更した場合、キーサーバーを再起動する必要があります。


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

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

Solaris オペレーティング環境では、4 つの nsswitch.conf テンプレートを用意して、異なるネームサービスに対応しています。各テンプレートでは、デフォルトの情報ソース (一次ソース、およびそれに続くソース) として、それぞれ異なる内容が指定されています。

4 つのテンプレートファイルについて説明します。

要件に一番近いテンプレートファイルを nsswitch.conf 構成ファイルにコピーして、必要に応じてファイルを変更します。

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


mymachine# cp nsswitch.ldap nsswitch.conf

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

Solaris オペレーティング環境の 4 つのスイッチファイルを、以下に示します。


例 1–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


例 1–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


例 1–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 will notuse
# netgroups at all.
netgroup: files
automount: files
aliases: files
services: files
sendmailvars: files


例 1–4 LDAP スイッチファイルテンプレート


#
# /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

nsswitch.conf ファイル

Solaris の環境を初めてインストールするときのデフォルトの nsswitch.conf ファイルは、Solaris のソフトウェアをインストールする際に選択したネームサービスで決まります。このファイルの各行は、ネットワーク情報の種類 (ホスト、パスワード、グループなど) と、それに対する 1 つ以上の情報源 (NIS+ テーブル、NIS マップ、DNS ホストテーブル、同一ワークステーション上の /etc など) を対応させています。クライアントは、この情報源から各情報を検索します。ネームサービスが選択されると、そのサービスのスイッチテンプレートファイルがコピーされ、新しい nsswitch.conf ファイルが作成されます。たとえば、NIS+ を選択した場合は、nsswitch.nisplus ファイルがコピーされ新しい nsswitch.conf ファイルが作成されます。

/etc/nsswitch.conf ファイルは、Solaris 9 ソフトウェアにより各マシンの /etc ディレクトリに自動的にロードされます。また次の代替テンプレートファイルも作成されます。

これらの代替テンプレートファイルには、それぞれネットワーク情報の情報源として NIS+、NIS、ローカルファイル、 または LDAP を使用する標準的なスイッチ構成が設定されています。Solaris オペレーティング環境をマシンに最初にインストールすると、マシンのデフォルトのネームサービスが NIS+、NIS、ローカルファイル、または LDAP から選択されます。 インストールの途中、選択されたネームサービスに対応するテンプレートファイルが /etc/nsswitch.conf にコピーされます。たとえば、NIS+ を使用するマシンクライアントの場合、インストーラは nsswitch.nisplusnsswitch.conf にコピーします。

特殊な名前空間を持っている場合を除き、通常の操作には nsswitch.conf にコピーされるデフォルトのテンプレートファイルを使用します。

構成ファイルの変更

特定のマシンのネームサービスを変更した場合は、そのマシンのスイッチファイルも変更する必要があります。たとえば、マシンのネームサービスを NIS から NIS+ に変更する場合、スイッチファイルを NIS+ に対応したものに変更する必要があります。スイッチファイルを変更するには、対応するテンプレートファイルを nsswitch.conf にコピーします。

NIS+ インストールスクリプトを使って NIS+ をマシンにインストールすると、NIS+ テンプレートファイルが自動的に nsswitch.conf にコピーされます。この場合、特にスイッチファイルをカスタマイズしたいというのでなければ、スイッチファイルを明示的に変更する必要はありません。

スイッチファイルを変更する前に、ファイルに列挙されている情報源が正しく設定されていることを確認してください。たとえば、NIS+ 用スイッチファイルに変更するのであれば、ワークステーションには NIS+ サービスへのアクセス権が必要になり、ローカルファイル用スイッチファイルに変更するのであれば、それらのローカルファイルがワークステーション上に正しく設定されている必要があります。

ネームサービススイッチを変更する

スイッチファイルの変更は次の手順で行います。

  1. クライアントにスーパーユーザーとしてログインします。

  2. 使用するネームサービス用のテンプレートファイルを 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
  3. マシンをリブートします。

    nscd ネームサービスキャッシュデーモンはスイッチ情報をキャッシュに書き込みます。また、ライブラリ関数には nsswitch.conf ファイルが変更されてもスイッチ情報を読み直さないものがあります。このため、マシンを再起動して、nscd とこれらのライブラリ関数が確実に最新スイッチの情報を持つようにする必要があります。

NIS+ クライアントで IPv6 を使用できるようにする方法

  1. スーパーユーザーとしてログインします。

  2. /etc/nsswitch.conf ファイルを編集します。

  3. 新しい ipnodes ソースを追加して、ネームサービス (ldap など) を指定します。


    ipnodes: ldap [NOTFOUND=return] files

    ipnodes は、デフォルトでは files です。IPv4 から IPv6 への変更中すべてのネームサービスが IPv6 のアドレスを認識できるわけではないので、 デフォルトの files を使用してください。デフォルトを使用しない場合は、アドレスの解決中に不必要な遅延が生じることがあります。

  4. ファイルを保存してマシンを再起動します。

    nscd デーモンはこの情報をキャッシュに保存して起動時にこの情報を読み取るため、 ここでマシンをリブートする必要があります。

+/- 構文との互換性を追加する

/etc/passwd/etc/shadow 、および/etc/group ファイルに +/- が使用される場合は、互換性を確保するために、nsswitch.conf ファイルを変更する必要があります。


注 –

NIS+ サーバーが NIS 互換モードで動作している場合、クライアントマシンでは netgroup テーブルに対して ypcat を実行できません。実行すると、エントリの有無に関わらず「テーブルが空である」という結果が返されます。


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


注意 – 注意 –

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


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


passwd: files nisplus

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


passwd: files nis