Linux/nsswitch

nsswitch (2015-12-23)


nsswitch は Name Service Switch で、設定は /etc/nsswich.conf などに記載する。
各カテゴリーの名前サービス情報を、どの情報源から どの順序で取得するかを判断する。

以下、記載例

$ cat /etc/nsswitch.conf
      passwd:         compat
      group:          compat
      hosts:          dns [!UNAVAIL=return] files
      networks:       nis [NOTFOUND=return] files

例えば、ホスト名 hoge.co.jp のIPアドレスを解決する時には、
「hosts:」行にある通り、dns を利用して解決を試みて、検索が成功した場合以外は終了、(DNSサーバに接続できないなど)失敗した場合はファイル /etc/hosts で解決しようとする。
という内容になります。*1

最初の passwd: やら group: やらはサービス名ですね。
/etc/passwd のように、大体の場合は同じ名前の情報ファイルが /etc 配下にありそうです。

compatやdns、files などが情報収集先の指定ですね。
files と compat*2 はファイルから情報を収集する。
dns は Domain Name Servive から、
nis は Network Information Service から情報を取得するということ。
左から、書いた順番の情報収集先から取得しようとします。

[NOTFOUND=return] の記載は「検索したけど情報が見つからない」場合に「終了する」ということ。
情報の取得に失敗した場合(NOTFOUND、UNAVAIL、TRYAGAIN)のデフォルト動作はcontinue(次の情報源へ進む)なのですが、あえて中断するならば return させるようです。
!マークはその逆。!UNAVAIL は接続失敗以外(接続成功と、たぶんNOTFOUNDやTRYAGAINも含む)になります。


いままで見たケースだと、nsswitch の書式があっているか云々よりも、そもそも nsswitch の存在を忘れている場合が多かったです。
/etc/hosts ファイル修正したのに何で反映されないんだろうとか悩んでいたら、files の前に nis や dns が先だったことに気が付かなかったとか。


*1 経験上、nsswitch の hosts: の設定を忘れていて名前解決が上手くいかないことが多々ありました。ちなみに上に記載した例だと、DNSで Not Found の(みつからない) 場合は次に /etc/hosts を見るのではなく不明のまま「終了する(return)」になるのかと。
*2 /etc/passwd を読込む場合の特殊な指定方法。つまり、「group: compat」は /etc/group ではなく /etc/passwd を読込むということらしい