文件/etc/nsswitch.conf(name service switch configuration,名字服務切換配置)規定通過哪些途徑以及按照什么順序通過這些途徑來查找特定類型的信息。還可以指定某個方法奏效或失效時系統將采取什么動作。
Nsswitch.conf中的每一行配置都指明了如何搜索信息,每行配置的格式如下:
Info: method[[action]] [method[[action]]...]
其中,info指定該行所描述的信息的類型,method為用來查找該信息的方法,action是對前面的method返回狀態的響應。action要放在方括號里。
二、nsswitch.conf的工作原理
當需要提供nsswitch.conf文件所描述的信息的時候,系統將檢查含有適當info字段的配置行。它按照從左向右的順序開始執行配置行中指定的方法。在默認情況下,如果找到期望的信息,系統將停止搜索。如果沒有指定action,那么當某個方法未能返回結果時,系統就會嘗試下一個動作。有可能搜索結束都沒有找到想要的信息。
1、信息(Info)
Nsswitch.conf文件通常控制着用戶(在passwd中)、口令(在shadow中)、主機IP和組信息(在group中)的搜索。下面的列表描述了nsswitch.conf文件控制搜索的大多數信息(Info項)的類型。
automount: |
自動掛載(/etc/auto.master和/etc/auto.misc) |
bootparams: |
無盤引導選項和其他引導選項(參見bootparam的手冊頁) |
ethers: |
MAC地址 |
group: |
用戶所在組(/etc/group),getgrent()函數使用該文件 |
hosts: |
主機名和主機號(/etc/hosts),gethostbyname()以及類似的函數使用該文件 |
networks: |
網絡名及網絡號(/etc/networks),getnetent()函數使用該文件 |
passwd: |
用戶口令(/etc/passwd),getpwent()函數使用該文件 |
protocols: |
網絡協議(/etc/protocols),getprotoent()函數使用該文件 |
publickey: |
NIS+及NFS所使用的secure_rpc的公開密鑰 |
rpc: |
遠程過程調用名及調用號(/etc/rpc),getrpcbyname()及類似函數使用該文件 |
services: |
網絡服務(/etc/services),getservent()函數使用該文件 |
shadow: |
映射口令信息(/etc/shadow),getspnam()函數使用該文件 |
aiases: |
郵件別名,sendmail()函數使用該文件 |
2、方法(method)
下面列出了nsswich.conf文件控制搜索信息類型的方法,對於每一種信息類型,都可以指定下面的一種或多種方法:
files: |
搜索本地文件,如/etc/passwd和/etc/hosts |
nis: |
搜索NIS數據庫,nis還有一個別名,即yp |
dns: |
查詢DNS(只查詢主機) |
compat: |
passwd、group和shadow文件中的±語法(參見本節后面的相關內容) |
3、搜索順序(從左至右)
兩個或者更多方法所提供的信息可能會重疊。舉例來說,files和nis可能都提供同一個用戶的口令信息。如果出現信息重疊現象,就需要考慮將哪一種方法作為權威方法(優先考慮),並將該方法放在方法列表中靠左的位置上。
默認nsswitch.conf文件列出的方法並沒有動作項,並假設沒有信息重疊(正常情況)。在這種情況下,搜索順序無關緊要:當一種方法失敗之后,系統就會嘗試下一種方法,只是時間上受到一點損失。如果在方法之間設置了動作,或者重疊的項的內容不同,那么搜索順序就變得重要起來。
例如下面兩行nsswitch.conf文件配置行:
passwd files nis
host nis files dns
第一行讓系統在/etc/passwd文件中搜索口令信息,如果失敗的話,就使用NIS來查找信息。如果正在查找的用戶同時出現在這兩個地方,就會使用本地文件中的信息,因此它就是權威信息。第二行先使用NIS搜索;如果失敗的話,就搜索/etc/hosts文件;如果再次失敗的話,核對DNS以找出主機信息。
4、動作項([action])
在每個方法后面都可以選擇跟一個動作項,用來指定如果由於某種原因該方法成功抑或失敗需要做些什么。動作項的格式如下:
[[!]STATUS =action]
其中,開頭和末尾的方括號屬於格式的一部分,並不是用來指出括號中的內容是可選的。STATUS(按照約定使用大寫字母,但本身並不區分大小寫)是待測試的狀態,action是如果STATUS匹配前面的方法所返回的狀態將要執行的動作。開頭的感嘆號(!)是可選的,其作用是將狀態取反。
STATUS: |
STATUS的取值如下: NOTFOUND:方法已經執行,但是並沒有找到待搜索的值。 默認的動作是continue。 SUCCESS:方法已經執行,並且已經找到待搜索的值,沒有返回錯誤。默認動作是return。 UNAVAIL:方法失敗,原因是永久不可用。舉例來說,所需的文件不可訪問或者所需的服務器可能停機。默認的動作是continue。 TRYAGAIN:方法失敗,原因是臨時不可用。舉例來說,某個文件被鎖定,或者某台服務器超載。默認動作是continue。 |
action: |
action的取值如下: return:返回到調用例程,帶有返回值,或者不帶返回值。 continue:繼續執行下一個方法。任何返回值都會被下一個方法找到的值覆蓋。 |
示例: |
舉例來說,下面這行取自nsswitch.conf文件,它的作用是讓系統首先使用DNS來搜索給定主機的IP地址。DNS方法后面的動作項是測試該方法所返回的狀態是否為“非(!)UNAVAIL”。 hosts dns [!UNAVAIL=return] files 如果DNS方法沒有返回UNAVAIL(!UNAVAIL),也就是說DNS返回SUCCESS、NOTFOUND或者TRYAGAIN,那么系統就會執行與該STATUS相關的動作(return)。其結果就是,只有在DNS服務器不可用的情況下才會使用后面的方法(files)。 如果DNS服務器並不是不可用(兩次否定之后就是“可用”),那么搜索返回域名或者報告未找到域名。只有當服務器不可用的時候,搜索才會使用files方法(檢查本地的/etc/hosts文件)。 |
5、compat方法:passwd、group和shadow文件中的"±"
可以在/etc/passwd、/etc/group和/etc/shadow文件中放入一些特殊的代碼,(如果在nsswitch.conf文件中指定compat方法的話)讓系統將本地文件和NIS映射表中的項進行合並和修改。
在這些文件中,如果在行首出現加號'+',就表示添加NIS信息;如果出現減號'-',就表示刪除信息。舉例來說,要想使用passwd文件中的這些代碼,可以在nsswitch.conf文件中指定passwd: compat。然后系統就會按照順序搜尋passwd文件,當它遇到以+或者 開頭的行時,就會添加或者刪除適當的NIS項。
雖然可以在passwd文件的末尾放置加號,在nsswitch.conf文件中指定passwd: compat,以搜索本地的passwd文件,然后再搜尋NIS映射表,但是更高效的一種方法是在nsswitch.conf文件中添加passwd: file nis而不修改passwd文件。