nsswitch.conf檔案詳解
Linux系統下的/etc/nsswitch.conf檔案
轉載自:https://www.cnblogs.com/besharp/p/8351227.html
一、什麼是nsswithch.conf(服務搜尋順序)檔案呢?
nsswitch.conf(name service switch configuration,名字服務切換配置)檔案位於/etc目錄下,由它規定通過哪些途徑以及按照什麼順序以及通過這些途徑來查詢特定型別的資訊,還可以指定某個方法奏效或失效時系統將採取什麼動作。
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檔案。
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檔案。