説明
ネームサービススイッチ
(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
ファイルの例である。
最初の列はデータベース名である。
残りの列で以下を指定する。
- 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.54 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。