2006 年 5 月 25 日
了解如何使用網絡信息服務(Network Information Service,NIS)來在 Linux® 和 UNIX® 間共享核心數據庫,以及如何使用網絡文件系統(Network File System,NFS)來通過直接鏈接或自動加載器共享文件系統。盡管 UNIX 和 Linux 相似,但二者之間仍然存在一些差異,可能會導致集成這兩個系統的過程復雜化。例如,這兩類系統均采用相同的身份驗證系統,但大部分系統都是彼此獨立的。通過共享此身份驗證信息,可以為網絡中的任何服務器提供單點登錄(single sign-on,SSO)功能。
通過 NIS 共享數據
網絡信息訪問 (NIS) 是由 Sun Microsystems 開發的,也稱為黃頁 (Yellow Pages) 服務。該系統的機制非常簡單——將標准系統數據庫(如 /etc/hosts 和 /etc/passwd)轉換為通用數據庫格式(使用 DBM 格式,DBM 是一個早已失去其含義的縮寫)。
這些數據庫保存在 NIS 服務器上(也稱為 NIS 主服務器)。所有數據庫均放置在一個指定的域中,然後從使用遠程過程調用(Remote Procedure Call,RPC)接口的主服務器共享。支持一系列不同的文件,包括:
從服務器(例如希望提供 NIS 主服務器數據庫備份的計算機)將從服務器復制已發布的數據庫。NIS 客戶端在需要查找信息時(例如用登錄時)將查詢 NIS 服務器。NIS 客戶端永遠不會存儲信息,因為客戶端綁定到 NIS 服務器(通過 ypbind 工具)。所得到的結構如下面的圖 1 中所示。
只要進行了更改,對 NIS 數據庫的更改將傳播到從服務器,或通過使用 yppush 命令以手動方式傳播。
由用戶驅動的對 NIS 數據庫的直接更改(例如,當用戶更改其密碼時)將直接發送到 NIS 主服務器,從而更新數據庫,並將更改傳播給任何從服務器。
選擇 NIS 或 NIS+
NIS 和 NIS+ 間的主要區別在於,後者支持 NIS 主計算機和從計算機間的身份驗證和數據交換加密。不過,由於安全方面的要求,NIS+ 的設置和正常運行較為困難,更為復雜。NIS+ 還對命名系統進行了擴展,因此數據庫將放入樹形結構中(而不是單個域中),以便允許更為復雜、范圍更廣的分布。
NIS 通常適合在任何標准環境中使用,而且在配置正確的網絡中,如果此網絡附加到 Internet,並不會帶來任何安全威脅。在私有網絡更為開放的環境中(如在通過公共網絡交換 NIS 數據的大學或多站點安裝中),應該僅使用 NIS+。
設置 NIS 服務器
Solaris、AIX® 和 HP-UX 安裝在缺省情況下都包含對 NIS 系統的支持。Linux® 分發通常都包含 NIS 作為標准配置,glibc 庫提供了對 NIS 的支持。不過,您可能需要安裝配置和管理 NIS 安裝所需的工具包。對於 Linux 下的 NIS 服務器,需要以下程序包:
安裝了這些程序包後,需要對所提供的 makefile 進行編輯,該文件通常位於 /var/yp/Makefile 中。該文件中包含將用於構建初始 YP 數據庫的配置參數。您需要編輯 all 的定義,以包含希望通過 NIS 支持的文件類型。在缺省情況下,該規則包括所有文件,如清單 1 中所示。
all: passwd group hosts ipnodes ethers networks rpc services protocols \ netgroup bootparams aliases publickey netid netmasks c2secure \ timezone auto.master auto.home ageing \ auth.attr exec.attr prof.attr user.attr audit.user
可以將任何不需要的文件類型刪除;例如,可能會只想共享 passwd、group 和 hosts 文件。
現在已經准備好,可以對數據庫進行填充了。首先,設置 NIS 域名:
$ domainname mcslp.nis
在 Linux 服務器上,編輯 /var/yp/securenets 和 /etc/ypserv.conf 文件,以與本地網絡的情況匹配。這些文件控制哪些計算機可以共享和訪問 NIS 域中的信息。
現在對數據庫進行初始化:
$ ypinit -m
ypinit 命令將為您完成使用 makefile 將源文件(例如,/etc/passwd)轉換為 NIS 格式的剩余任務。
如果在任何時間更改了源文件的內容,請轉到 /var/yp 目錄並再次運行 make 來重新構建數據庫:
$ cd /var/yp $ make
如果希望允許各個用戶以遠程方式更新登錄密碼,請確保 rpc.yppasswdd 後台程序在運行;它可直接接受客戶端要求更新 NIS 數據庫的請求,以便更改通過主服務器和從服務器傳播,並由任何客戶端正確拾取。
設置 NIS 客戶端
要設置 NIS 客戶端,需要定義 NIS 域名,啟動本地 NIS 訪問,然後初始化這些服務,以從 NIS 主服務器或從服務器查找其信息。該過程的關鍵在於 ypbind,該工具可將客戶端計算機附加到 NIS 服務器。
在 UNIX 下,將在調用 ypbind 時自動確定 NIS 服務器。在大多數 Linux 版本下,必須在 /etc/yp.conf 文件中設置有效 NIS 服務器列表,例如:
ypserver 192.168.0.22
將客戶端連接到 NIS 服務器的基本過程如下:
現在通過使用 ypcat 直接查詢數據庫,以確定 NIS 連接為活動狀態。例如,為了獲得按名稱排序的 NIS passwd 文件的轉儲,您將使用以下命令:
$ ypcat passwd.byname
這將轉儲整個 passwd 數據庫。在系統實際使用 NIS 數據庫信息前,必須對系統用於查找信息的數據源進行重新配置。
nsswitch.conf
Linux 和 UNIX 上的 nsswitch.conf 文件通常用於確定系統在何處查找有關不同數據的信息。例如,可以將 nsswitch.conf 文件配置為在文件中查找主機信息、查詢 DNS 或使用 NIS 系統查找該信息。
該文件不僅對用於查找信息的源進行配置,而且也用於配置不同源的查詢順序。選擇正確的順序可以影響是否能查詢正確的數據源以及在出現故障時網絡的恢復能力。
該文件的格式如下:首先是簡單的系統數據庫列表,後跟按照所需順序排列的數據源列表,每行一個服務。例如,清單 2 顯示了為 NIS、DNS 和本地文件解析設置的簡單 nsswitch.conf 文件的前幾行數據。
passwd: nis files shadow: nis files group: nis files hosts: nis dns files networks: nis dns files
在清單 2 中,可以看到 passwd 的定義為首先使用 NIS 數據庫(如果可用)。當用戶登錄時,將首先構造 NIS 表。如果服務返回用戶無法找到的錯誤,則系統將查詢列表中的第二項——在本例中為本地文件。