1、什麼是nsswithch.conf(服務搜索順序)文件呢?數據庫
nsswitch.conf(name service switch configuration,名字服務切換配置)文件位於/etc目錄下,由它規定經過哪些途徑以及按照什麼順序以及經過這些途徑來查找特定類型的信息,還能夠指定某個方法奏效或失效時系統將採起什麼動做。服務器
Nsswitch.conf中的每一行配置都指明瞭如何搜索信息,每行配置的格式以下:
Info: method[[action]] [method[[action]]...]
其中,info指定該行所描述的信息的類型,method爲用來查找該信息的方法,action是對前面的method返回狀態的響應。action要放在方括號裏。網絡
2、nsswitch.conf的工做原理函數
當須要提供nsswitch.conf文件所描述的信息的時候,系統將檢查含有適當info字段的配置行。它按照從左向右的順序開始執行配置行中指定的方法。在默認狀況下,若是找到指望的信息,系統將中止搜索。若是沒有指定action,那麼當某個方法未能返回結果時,系統就會嘗試下一個動做。有可能搜索結束都沒有找到想要的信息。測試
一、信息(Info).net
Nsswitch.conf文件一般控制着用戶(在passwd中)、口令(在shadow中)、主機IP和組信息(在group中)的搜索。下面的列表描述了nsswitch.conf文件控制搜索的大多數信息(Info項)的類型。dns
automount:rpc |
自動掛載(/etc/auto.master和/etc/auto.misc)get |
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()函數使用該文件 |
files: |
搜索本地文件,如/etc/passwd和/etc/hosts |
nis: |
搜索NIS數據庫,nis還有一個別名,即yp |
dns: |
查詢DNS(只查詢主機) |
compat: |
passwd、group和shadow文件中的±語法(參見本節後面的相關內容) |
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文件)。 |