NSSWITCH.CONF(5)

名前
nsswitch.conf - システムデータベースとネームサービススイッチの設定ファイル

説明
C ライブラリの機能の中には、ローカルな環境で正しく動作させるには設定が 必要なものが多数存在する。伝統的にこれはファイル (例えば /etc/passwd) を 用いることで実現されてきた。しかし他のネームサービス (Network Information Service (NIS) や Domain Name Service (DNS)) が一般的になり、 これらが C ライブラリに取り込まれるようになっていった。ただし通常、検 索の順序は固定されていた。

NYS をサポートした Linux libc5 や GNU C Linrary 2.x (libc.so.6) では、 この問題はより見通し良く解決できるようになっている。これらは Sun Microsystems が Solaris 2 の C ライブラリで用いた方法にならっている。 以下ではこの仕組みを "Name Service Switch" (NSS) と呼ぶ。データベース の情報源と、それらを閲覧する順序を指定したのが /etc/nsswitch.conf ファイルである。

NSS では以下のデータベースを扱うことができる。

aliases
    sendmail(8) で用いられるメールエイリアス。

ethers
    イーサーネット番号。

group
    ユーザーのグループ。 getgrent(3) 関数によって用いられる。

hosts
    ホスト名とホスト番号。 gethostbyname(3) などの関数によって用いられる。

netgroup
    ネットワークワイドに用いられるホストやユーザーのリスト。アクセス制限に 利用される。

network
    ネットワーク名と番号。 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 ファイルの一例を以下に示す (これは /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

最初のカラムはデータベース名で、上記の表から類推してほしい。行の残りで は閲覧プロセスの動作を指定している。それぞれのデータベースに対して、閲 覧方法は独立に設定できる。

データベースの設定には 2 種類の内容を指定することができる。
* サービスの指定。 `files', `db', `nis' など。
* 閲覧結果に対するリアクション。 `[NOTFOUND=return]' など。

NYS 機能を組み込んだ libc5 では、指定できるサービスは `files'、 `nis'、 `nisplus' のいずれかである。 hosts に対しては `dns' も指定できる。また passwd と group に対しては `compat' も指定できる。 shadow には `compat' の指定はできない。

GNU C ライブラリでは、利用しようとするサービス SERVICE それぞれに対し て /lib/libnss_SERVICE.so.1 というファイルが必要になる。標準的なインストールでは `files'、 `db'、 `nis'、 `nisplus' が利用できるようになっていることが多い。 hosts に対 しては `dns' も指定でき、 passwd、 group、 shadow に対しては `compat' も指定できる。 libnss_SERVICE.so.1 によるサービスは libc5+NYS の環境では利用できない。

二つめの指定方法は閲覧プロセスをより詳細に制御するためのものである。ア クション指定 (action item) はサービス名の間に、角かっこ [] で括られて 記述される。一般的な書式は以下の通り。

`[' ( `!'? STATUS `=' ACTION )+ `]'

ここでそれぞれ

STATUS => success | notfound | unavail | tryagain
ACTION => return | continue
    である。

キーワードの大文字小文字は区別されない。 STATUS の値は特定の機能に対し て閲覧を行った結果である。それぞれの意味は以下の通り。

success
    エラーは起こらず、必要なエントリが返された。この結果に対するデフォルト のアクションは `return' である。

notfound
    閲覧プロセスは機能しているが、必要な値が見つからなかった。デフォルトの アクションは `continue'。

unavail
    サービスが（永続的に）利用できない。必要なファイルが存在しない、DNS の 場合にはサーバに対する問い合わせが許可されていない、などがありうる。 デフォルトのアクションは `continue'。

tryagain
    サービスが一時的に利用できない。ファイルがロックされている、サーバの接 続数がリミットを越えていて現在利用できない、などが考えられる。デフォル トのアクションは `continue'。

  +/- 書式との関係 (compat モード)
NYS 機能を組み込んでいない libc5 は、ネームサービススイッチの機能を持っ ていない。しかしある程度のポリシー制御は行うことができる。 /etc/passwd では +user や +@netgroup (NIS の passwd マップから指定したユーザを取り込 む)、 -user や -@netgroup (指定したユーザを除外する)、 + (NIS の passwd マップから、除外されたユーザ以外の全てのエントリを取り込む) な どを指定することができる。 ほとんどの場合は /etc/passwd の最後に + を付けて NIS のすべてを取り込んでいるだけなので、スイッチを 用いて (`passwd: files nis') のようにすればより高速な動作が期待でき、 また /etc/passwdと/etc/group に + だけのエントリを書かなくてすむ。 より細かな制御を行いたい場合は、 NSS の `compat' サービスを用いれば +/- 書式をフルに用いることができる。デフォルトではソースは `nis' になっ ているが、これは擬似データベース passwd_compat,group_compat,shadow_compat などに `nisplus' を指定することで上書きできる。 擬似データベースは GNU C ライブラリでしか利用できない。

ファイル
SERVICE という名前のサービスは libnss_SERVICE.so.1 という名前の共有オ ブジェクトライブラリで実装されている。これは /lib に置かれる。

/etc/nsswitch.conf
    設定ファイル。
/lib/libnss_compat.so.1
    GNU C ライブラリ 2.x に対して `compat' ソースを実装したもの。
/lib/libnss_db.so.1
    GNU C ライブラリ 2.x に対して `db' ソースを実装したもの。
/lib/libnss_dns.so.1
    GNU C ライブラリ 2.x に対して `dns' ソースを実装したもの。
/lib/libnss_files.so.1
    GNU C ライブラリ 2.x に対して `files' ソースを実装したもの。
/lib/libnss_hesoid.so.1
    GNU C ライブラリ 2.x に対して `hesoid' ソースを実装したもの。
/lib/libnss_nis.so.1
    GNU C ライブラリ 2.x に対して `nis' ソースを実装したもの。
/lib/libnss_nisplus.so.1
    GNU C ライブラリ 2.x に対して `nisplus' ソースを実装したもの。

注意
nsswitch.conf を利用するそれぞれのプロセスでは、ファイルは一度しか読み 込まれない。もし nsswitch.conf があとで書き換えられても、そのプロセス は古い設定のままで動作を継続する。
Solaris では NSS サービスを用いたプログラムをスタティックにリンクする ことはできない。 Linux では問題なくスタティックリンクできる。