名前
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) によって用いられる。 |
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 では問題なくスタティックリンクできる。