説明
ネームサービススイッチ (Name Service Switch; NSS) の設定ファイル /etc/nsswitch.conf は、 GNU C ライブラリが いろいろなカテゴリの名前サービス情報を、どの情報源から どの順序で取得するかを判断するのに使用される (情報の各カテゴリはデータベース名で識別される)。設定ファイルは通常の ASCII テキストで、列はスペースかタブ文字で 区切られる。最初の列はデータベース名を示す。 残りの列は、情報を問い合わせる情報源の順序と、 検索結果に対して実行するアクションを規定する。
GNU C ライブラリでは以下のデータベースを扱うことができる。
- aliases
- メールのエイリアス。 getaliasent(3) や関連する関数が使用する。
- ethers
- イーサーネット番号。
- group
- ユーザーのグループ。 getgrent(3) や関連する関数が使用する。
- hosts
- ホスト名とホスト番号。 gethostbyname(3) や関連する関数が使用する。
- initgroups
- 補助グループアクセスリスト。 getgrouplist(3) 関数が使用する。
- netgroup
- ネットワークワイドに用いられるホストやユーザーのリスト。アクセス制限に利用 される。 glibc 2.1 より前の C ライブラリは、 NIS による netgroup のみを サポートしていた。
- networks
- ネットワーク名と番号。 getnetent(3) と関連する関数が使用する。
- passwd
- ユーザーパスワード。 getpwent(3) や関連する関数が使用する。
- protocols
- ネットワークプロトコル。 getprotoent(3) や関連する関数が使用する。
- publickey
- NIS+ と NFS によって用いられる secure_rpc の公開鍵と秘密鍵。
- rpc
- リモート手続き呼び出し (remote procedure call) の名前と番号。 getrpcbyname(3) と関連する関数が使用する。
- services
- ネットワークサービス。 getservent(3) や関連する関数が使用する。
- shadow
- シャドウユーザーパスワード。 getspnam(3) や関連する関数が使用する。
以下は /etc/nsswitch.conf ファイルの例である。
-
- passwd:
- compat
- group:
- compat
- shadow:
-
compat
- hosts:
- dns [!UNAVAIL=return] files
- networks:
- nis [NOTFOUND=return] files
- ethers:
- nis [NOTFOUND=return] files
- protocols:
- nis [NOTFOUND=return] files
- rpc:
- nis [NOTFOUND=return] files
- services:
- nis [NOTFOUND=return] files
最初の列はデータベース名である。 残りの列で以下を指定する。
- *
- 1 個以上のサービス指定 (例: "files", "db", "nis")。この行に記載された サービスの順序で、結果が得られるまで、指定されたサービスに対する 問い合わせが順番に行われる。
- *
- 特定の結果が直前のサービスで得られた場合に実行されるアクション (例: "[NOTFOUND=return]")。アクションは省略可能である。
利用しているシステムでどのサービス指定が利用できるかは、共有ライブラリ があるかどうかに依存しており、そのためサービス指定は拡張できるように なっている。/lib/libnss_SERVICE.so.X という名前のライブラリが SERVICE という名前のサービスを提供する。標準のインストールを行った 場合、"files", "db", "nis", "nisplus" が利用できる。 データベース hosts の場合には、追加で "dns" も指定できる。 データベース passwd, group, shadow の場合には、追加で "compat" (下記の 互換モード を参照)。バージョン番号 X は、 glibc 2.0 の場合は 1、glibc 2.1 の場合は 2 で、それ以降も同様である。 追加のライブラリがインストールされているシステムでは、"hesiod", "ldap", "winbind", "wins" などの追加のサービスが利用できる。
サービス指定の次にアクションを指定することもできる。アクションを 使うと、直前のデータ源から結果が得られた後の動作を変更できる。 アクション指定は、一般的には以下の形式となる。
-
[STATUS=ACTION]
[!STATUS=ACTION]
STATUS と ACTION はそれぞれ以下の値を取る。
-
STATUS => success | notfound | unavail | tryagain
ACTION => return | continue
! はテスト結果を反転させる。 つまり、指定された以外の全ての結果にマッチする。 キーワードの大文字、小文字は無視される。
STATUS は、直前のサービス指定で呼び出しされた検索処理の結果に 対して照合が行われる。 STATUS には以下のいずれかを指定できる。
-
- success
- エラーは発生せず、要求されたエントリが返された。 この場合のデフォルトのアクションは "return" である。
- notfound
- 検索は成功したが、要求されたエントリが見つからなかった。 この場合のデフォルトのアクションは "continue" である。
- unavail
- サービスが永続的に利用できない。 必要なファイルを読み込むことができない、 ネットワークサービスの場合には、サーバが利用できないとか、 サーバが問い合わせを許可していない、などが考えられる。 この場合のデフォルトのアクションは "continue" である。
- tryagain
- サービスが一時的に利用できない。 ファイルがロックされている、サーバがこれ以上接続を受け付けることができない、 などが考えられる。デフォル トのアクションは "continue" である。
ACTION には以下のいずれかを指定できる。
-
- return
- 結果をすぐに返す。 これ以上検索処理は呼び出されない。 ただし、互換性のため、 選択されたアクションが group データベースに対するもので、 ステータスが notfound であった場合で、 設定ファイルに initgroups の行が含まれていない場合には、次の検索処理は常に呼び出される (検索結果への影響はない)。
- continue
- 次の検索処理を呼び出す。
互換モード (compat)
NSS "compat" サービスは "files" と似ているが、システムにアクセスできる ユーザやネットグループ (netgroup) のメンバの指定に /etc/passwd で 特別なエントリを追加で使うことができる点が異なる。 このモードでは、以下のエントリを使うことができる。-
- +user
- NIS パスワードマップの指定された user を含める。
- +@netgroup
- 指定された netgroup の全ユーザを含める。
- -user
- NIS パスワードマップの指定された user を除外する。
- -@netgroup
- 指定された netgroup の全ユーザを除外する。
- +
- NIS パスワードマップのユーザのうち、 それまでに除外されていない全てのユーザを含める。
デフォルトでは、データ源は "nis" だが、 擬似データベース passwd_compat, group_compat, shadow_compat ではデータ源として "nisplus" を指定することもできる。
ファイル
SERVICE という名前のサービスは libnss_SERVICE.so.X という 名前の共有オブジェクトライブラリで実装されている。 これは /lib に置かれる。-
- /etc/nsswitch.conf NSS の設定ファイル。
- /lib/libnss_compat.so.X
- "compat" ソースを実装したもの。
- /lib/libnss_db.so.X
- "db" ソースを実装したもの。
- /lib/libnss_dns.so.X
- "dns" ソースを実装したもの。
- /lib/libnss_files.so.X
- "files" ソースを実装したもの。
- /lib/libnss_hesiod.so.X
- "hesoid" ソースを実装したもの。
- /lib/libnss_nis.so.X
- "nis" ソースを実装したもの。
- /lib/libnss_nisplus.so.X
- "nisplus" ソースを実装したもの。
注意
nsswitch.conf を利用するプロセスは、ファイルは一度しか読み込まない。 その後で nsswitch.conf が書き換えられても、そのプロセスは古い設定のままで 動作を継続する。伝統的には、サービス情報の情報源は一つだけであり、 その設定ファイルの形式も一つであった (例えば /etc/passwd)。 一方で、 Network Information Service (NIS) や Domain Name Service (DNS) などの他の名前サービスが一般的になるに連れて、C ライブラリに埋め 込まれた固定順序ではなく、検索順序を柔軟に指定する方法が必要になった。 ネームサービススイッチ機構は、この問題に対するよりきれいな解決方法と なっている。ネームサービススイッチ機構は、 Sun Microsystems が Solaris 2 の C ライブラリで使った機構が基になっている。
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。