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