名前


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
 ネットワークワイドに用いられるホストやユーザーのリスト。アクセス制限に 利用される。 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 ファイルの一例を以下に示す (ここに示す内容は /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’ の指定はできない。
glibc では、利用しようとするサービス SERVICE それぞれに対し て /lib/libnss_SERVICE.so.X というファイルが必要になる。標準的なインストールでは ‘files’、 ‘db’、 ‘nis’、 ‘nisplus’ が利用できるようになっていることが多い。 hosts に対 しては ‘dns’ も指定でき、 passwd、 group、 shadow に対しては ‘compat’ も指定できる。 これらのサービスは libc5+NYS の環境では利用できない。 バージョン番号 X は、 glibc 2.0 用なら 1、 glibc 2.1 用なら 2 である。
二つめの指定方法は閲覧プロセスをより詳細に制御するためのものである。ア クション指定 (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, /etc/shadow に + だけのエントリを書かなくてすむ。 より細かな制御を行いたい場合は、 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.X glibc2 に対して ‘compat’ ソースを実装したもの。
/lib/libnss_db.so.X glibc2 に対して ‘db’ ソースを実装したもの。
/lib/libnss_dns.so.X glibc2 に対して ‘dns’ ソースを実装したもの。
/lib/libnss_files.so.X glibc2 に対して ‘files’ ソースを実装したもの。
/lib/libnss_hesoid.so.X glibc2 に対して ‘hesoid’ ソースを実装したもの。
/lib/libnss_nis.so.X glibc2 に対して ‘nis’ ソースを実装したもの。
/lib/libnss_nisplus.so.X glibc2 に対して ‘nisplus’ ソースを実装したもの。
/lib/libnss_nisplus.so.2 glibc 2.1 に対して ‘nisplus’ ソースを実装したもの。

注意


nsswitch.conf を利用するそれぞれのプロセスでは、ファイルは一度しか読み込まれない。 もし nsswitch.conf があとで書き換えられても、 そのプロセスは古い設定のままで動作を継続する。

Solaris では NSS サービスを用いたプログラムをスタティックにリンクする ことはできない。 Linux では問題なくスタティックリンクできる。

openSUSE Logo

コンテンツ