NSSWITCH.CONF(5)

NAME
nsswitch.conf - 系統資料庫及名字服務開關配置檔案

DESCRIPTION
C 程式庫裡很多函式都需要配置以便能在本地環境正常工作, 習慣上是使用檔案(例如`/etc/passwd') 來完成這一任務. 但別的名字服務, 如網路資訊服務NIS, 還有域名服務DNS等, 逐漸通用起來, 並且被加入了C 程式庫裡, 而它們使用的是固定的搜尋順序.

在有NYS 支援的Linux libc5以及GNU C Library 2.x (libc.so.6)裡, 依靠一個更清晰完整的方案來解決該問題. 該方案模仿了Sun Microsystems公司在Solaris 2 的C 程式庫裡的方法, 也沿襲了它們的命名, 稱為 "名字服務開關(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 遠端過程呼叫名及呼叫號, getrpcbyname(3) 及類似函式使用該檔案.

services
    網路服務, getservent(3) 函式使用該檔案.

shadow
    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

第一欄就是上面的表裡所說的資料庫, 每行的其餘部分指明如何查詢. 對每個資料庫都可以分別指明其查詢方法.

每個資料庫的配置規範包含兩個不同的項:
* 服務規範, 如`files', `db', 或者`nis'.
* 對查詢結果的反應, 如`[NOTFOUND=return]'.

在有NYS支援的libc5裡允許服務規範`files', `nis'及`nisplus',此外，還可以對hosts 指明`dns' 為額外服務, 對passwd及group 指明`compat', 但不能對shadow指明`compat'.

在GNU C Library裡, 每個可用的SERVICE都必須有檔案 /lib/libnss_SERVICE.so.1 與之對應. 在標準安裝時, 可以使用`files',`db', `nis'以及`nisplus'. 此外, 還可以對hosts 指明`dns' 為額外服務, 對passwd, group, shadow 指明`compat', 而在有NYS 支援的libc5中, 不支援最後一項服務.

說明中的第二項使使用者可以更好地控制查詢過程. Action項處於兩個服務名之間, 被括弧括著, 常規格式如下:

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

這裡

STATUS => success | notfound | unavail | tryagain
ACTION => return | continue

對關鍵字的大小寫並不敏感. STATUS的值是呼叫指定服務查詢函式的結果, 意義如下:

success
    沒有錯誤發生, 得到想要的結果. 預設action是`return'.

notfound
    查詢順利, 但是沒有得到所要的結果. 預設action是`continue'.

unavail
    服務永久不可用. 這可能意味著必要的檔案不可用, 或者,DNS 服務不可用或不允許查詢.預設action是`continue'.

tryagain
    服務臨時不可用. 可能是檔案被鎖住了或者伺服器當前不 接受過多的連線. 預設action是`continue'.

使用+/-語法的互動(compat 模式)無NYS支援的linux 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' 服務提供了完全的+/-語法. 我們可以對偽資料庫 passwd_compat, group_compat 及 shadow_compat 指明`nisplus'服務來覆蓋預設服務`nis', 但請注意只在GNU C Library裡可以使用偽資料庫.

檔案 FILES
名為SERVICE的服務是透過位於/lib的共享物件libnss_SERVICE.so.1實現的.

/etc/nsswitch.conf
    配置檔案
/lib/libnss_compat.so.1
    為GNU C Library 2.x實現`compat'
/lib/libnss_db.so.1
    為GNU C Library 2.x實現`db'
/lib/libnss_dns.so.1
    為GNU C Library 2.x實現`dns'
/lib/libnss_files.so.1
    為GNU C Library 2.x實現`files'
/lib/libnss_hesoid.so.1
    為GNU C Library 2.x實現`hesoid'
/lib/libnss_nis.so.1
    為GNU C Library 2.x實現`nis'
/lib/libnss_nisplus.so.1
    為GNU C Library 2.x實現`nisplus'

注意 NOTES
每個用到了nsswitch.conf 檔案的程序只完整地讀一次檔案, 如果該檔案後面被改變了, 程序將仍然使用原來的配置. 在Solaris 下, 不能靜態連線使用了NSS Service 的程式, 但是在Linux 下, 則毫無問題.

[中文版維護人]
<mapping@263.net>

[中文版最新更新]
2000.11.11

《中國linux論壇man手冊頁翻譯計劃》:
http://cmpp.linuxforum.net

跋
本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃：https://github.com/man-pages-zh/manpages-zh