Linux系統下的/etc/nsswitch.conf文件

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()函數使用該文件


二、方法(method)
    下面列出了nsswich.conf文件控制搜索信息類型的方法,對於每一種信息類型,均可以指定下面的一種或多種方法:

files:

搜索本地文件,如/etc/passwd和/etc/hosts

nis:

搜索NIS數據庫,nis還有一個別名,即yp

dns:

查詢DNS(只查詢主機)

compat:

passwd、group和shadow文件中的±語法(參見本節後面的相關內容)


三、搜索順序(從左至右)
       兩個或者更多方法所提供的信息可能會重疊。舉例來講,files和nis可能都提供同一個用戶的口令信息。若是出現信息重疊現象,就須要考慮將哪種方法做爲權威方法(優先考慮),並將該方法放在方法列表中靠左的位置上。
    默認nsswitch.conf文件列出的方法並無動做項,並假設沒有信息重疊(正常狀況)。在這種狀況下,搜索順序可有可無:當一種方法失敗以後,系統就會嘗試下一種方法,只是時間上受到一點損失。若是在方法之間設置了動做,或者重疊的項的內容不一樣,那麼搜索順序就變得重要起來。
例以下面兩行nsswitch.conf文件配置行:
passwd files nis
host nis files dns
       第一行讓系統在/etc/passwd文件中搜索口令信息,若是失敗的話,就使用NIS來查找信息。若是正在查找的用戶同時出如今這兩個地方,就會使用本地文件中的信息,所以它就是權威信息。第二行先使用NIS搜索;若是失敗的話,就搜索/etc/hosts文件;若是再次失敗的話,覈對DNS以找出主機信息。
四、動做項([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文件)。


五、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文件。
 
相關文章
相關標籤/搜索