這就是為什么Sun開發(fā)出了NIS,即網(wǎng)絡(luò)信息系統(tǒng)(Network Information System)。NIS提供了通用數(shù)據(jù)庫訪問設(shè)施,可以實(shí)現(xiàn)向你的網(wǎng)絡(luò)上的所有主機(jī)分發(fā)信息,比如象passwd和groups文件所包含的信息。這使得網(wǎng)絡(luò)看起來象一個獨(dú)立系統(tǒng),在所有的主機(jī)上有著相同的帳號。你可以以同樣的方式通過NIS向網(wǎng)絡(luò)上的所有機(jī)器同步/etc/hosts中的主機(jī)名信息。
你所得到的輸出應(yīng)該與上面顯示的相象。如果你得到了一條錯誤信息指出“Can’t bind to server which serves domain”或者某些類似的信息,那么或者是你設(shè)置的NIS域名在yp.conf中沒有匹配的服務(wù)器,或者是由于某些原因服務(wù)器找不到。在后一種情況下,請確信ping到那個主機(jī)產(chǎn)生正確的結(jié)果,并且它確實(shí)正在運(yùn)行一個NIS服務(wù)器。你可以使用rpcinfo來驗證后者,它將生成以下輸出:
# rpcinfo -u serverhost ypserv
program 100004 version 2 ready and waiting
10.6 選擇正確的maps
在確信能夠與NIS服務(wù)器聯(lián)系之后,你必須決定要用NIS maps替換或添加哪個配置文件。一般地,你將會對主機(jī)和口令查找函數(shù)使用NIS maps。前者對于沒有使用BIND時特別有用。后者允許所有用戶在NIS域的任何系統(tǒng)上登錄進(jìn)他們的帳號;這通常要求通過NFS在所有的主機(jī)之間共享一個中央/home目錄。這將在10.7節(jié)中詳細(xì)討論。其它的maps,如同services.byname,并沒有如此有戲劇性的效能,但能為你省去某些編輯工作如果你安裝了任何網(wǎng)絡(luò)應(yīng)用程序而該應(yīng)用程序使用了一個不在標(biāo)準(zhǔn)services文件中的服務(wù)名。
通常,對于一個查找函數(shù)何時使用本地文件、何時詢問NIS服務(wù)器,你會想有某些自由的選擇。NYS允許你配置函數(shù)訪問這些服務(wù)的順序。這是通過/etc/nsswitch.conf文件來控制的,該文件名是指名稱服務(wù)交換(Name Service Switch),當(dāng)然其并不限制于名稱服務(wù)。對于NYS支持的任何數(shù)據(jù)查找函數(shù),它都包含指定所用服務(wù)的一行。
服務(wù)的正確順序是與數(shù)據(jù)的類型有關(guān)的。并無必要讓services.byname的map一定要含有與本地services文件中不同的條目;它可以包含更多的條目。所以,一個好的選擇可以是首先查詢本地文件,并且只有當(dāng)服務(wù)名稱沒有找到時才查找NIS。另一方面,主機(jī)名信息可能會非常頻繁地改變,所以DNS或NIS服務(wù)器應(yīng)該總是有非常正確的信息,而本地的hosts文件只作為在DNS和NIS不可用時的一個備份而已。在這種情況下,你可能想最后查詢本地文件。
下面的例子顯示出了如何以上面描述的方式配置gethostbyname(2)、gethostbyaddr(2)和getservbyname(2)函數(shù)。它們將依次試用列出的服務(wù);如果一個查找成功,結(jié)果就返回,否則試用下一個服務(wù)。
# small sample /etc/nsswitch.conf
#
hosts: nis dns files
services: files nis