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)接口的主服務器共享。支持一系列不同的文件,包括:
passwd(如果支持,還包括 /etc/shadow 文件) groups hosts netmask netgroup automount services protocols ethers aliases(對於郵件)從服務器(例如希望提供 NIS 主服務器數據庫備份的計算機)將從服務器復制已發布的數據庫。NIS 客戶端在需要查找信息時(例如用登錄時)將查詢 NIS 服務器。NIS 客戶端永遠不會存儲信息,因為客戶端綁定到 NIS 服務器(通過 ypbind 工具)。所得到的結構如下面的圖 1 中所示。
圖 1. NIS 主服務器或從服務器結構只要進行了更改,對 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 服務器,需要以下程序包:
ypserver makedbm安裝了這些程序包後,需要對所提供的 makefile 進行編輯,該文件通常位於 /var/yp/Makefile 中。該文件中包含將用於構建初始 YP 數據庫的配置參數。您需要編輯 all 的定義,以包含希望通過 NIS 支持的文件類型。在缺省情況下,該規則包括所有文件,如清單 1 中所示。
清單 1. all 的定義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 服務器的基本過程如下:
設置 NIS 域: $ domainname mcslp.nis. 啟動 portmap——RPC 映射器後台程序(如果尚未運行): $/sbin/portmap. 創建 /var/yp 目錄,該目錄將用於保存一些 NIS 信息。 啟動 ypbind: $ /usr/sbin/ypbind.現在通過使用 ypcat 直接查詢數據庫,以確定 NIS 連接為活動狀態。例如,為了獲得按名稱排序的 NIS passwd 文件的轉儲,您將使用以下命令:
$ ypcat passwd.byname
這將轉儲整個 passwd 數據庫。在系統實際使用 NIS 數據庫信息前,必須對系統用於查找信息的數據源進行重新配置。
nsswitch.conf
Linux 和 UNIX 上的 nsswitch.conf 文件通常用於確定系統在何處查找有關不同數據的信息。例如,可以將 nsswitch.conf 文件配置為在文件中查找主機信息、查詢 DNS 或使用 NIS 系統查找該信息。
該文件不僅對用於查找信息的源進行配置,而且也用於配置不同源的查詢順序。選擇正確的順序可以影響是否能查詢正確的數據源以及在出現故障時網絡的恢復能力。
該文件的格式如下:首先是簡單的系統數據庫列表,後跟按照所需順序排列的數據源列表,每行一個服務。例如,清單 2 顯示了為 NIS、DNS 和本地文件解析設置的簡單 nsswitch.conf 文件的前幾行數據。
清單 2. 簡單 nsswitch.conf 文件的前幾行數據passwd: nis files shadow: nis files group: nis files hosts: nis dns files networks: nis dns files
在清單 2 中,可以看到 passwd 的定義為首先使用 NIS 數據庫(如果可用)。當用戶登錄時,將首先構造 NIS 表。如果服務返回用戶無法找到的錯誤,則系統將查詢列表中的第二項——在本例中為本地文件。
正確設置和使用 nsswitch.conf 文件的幾點提示:
始終將文件指定為最後一個選項,特別對於 passwd、shadow 和 hosts 數據更要如此。未能這樣做將可能導致計算機不能使用,因為如果 NIS 系統失敗,甚至會拒絕 root 用戶。 請確保文件數據包含關鍵的登錄、主機和其他信息。 對於連接到 Internet 的計算機,通常使用 DNS 進行基於 Internet 的解析比依賴於 NIS 中的轉發系統更為高效。通過遵從這些提示,應該能確保不會出現無法登錄到自己系統的情況。
通過 NFS 共享文件
網絡文件系統 (NFS) 也是由 Sun Microsystems 開發的,作為在計算機間共享文件的一種方法使用。當使用 NFS 共享目錄時,可以像本地磁盤一樣從另一個計算機加載目錄。將會在 NFS 客戶端和 NFS 服務器之間復制相同的安全設置、文件權限和其他數據。這就是應通過 NIS 共享用戶數據的原因,因為用戶 ID、組 ID 和其他信息都將應用到 NFS 共享文件。
通常,在啟動 NFS 服務器前,應首先將目錄配置為共享。在 Linux 內,可以通過 /etc/eXPorts 文件進行此操作,該文件將定義共享目錄的相關目錄和選項(如安全限制)。例如,如果要將 /export/data 僅共享給您的網絡中的計算機,則可以使用與以下類似的配置行:
/export/data *.mcslp.pri(rw,sync) *(sync)
rw 選項設置您網絡中的所有客戶端的共享讀取或寫入權限,而對所有其他主機將缺省設置為只讀。sync 選項可確保遠程加載會與服務器同步其文件系統。
在 Solaris 內,可以使用 /etc/dfs/dfstab 文件來指定運行共享命令,以便通過 NFS 導出給定目錄。例如,可以使用以下配置行共享相同的目錄,以便允許進行讀取或寫入:
share -F nfs -o rw /export/data
在 AIX 上,可使用 smit 工具來共享特定目錄,或在 HP-UX 上使用 SAM 工具。
在所有情況下,只要創建了文件和配置,就應該啟動 NFS 服務器進程。
在客戶端上,只需要啟動 NFS 客戶端進程。然後可以使用 mount 命令加載 NFS 文件系統。應指定服務器名,後跟一個英文冒號和遠程目錄的完整路徑,如下所示:
$ mount bear:/export/data /mnt/data
還可以使用相同的基本格式來自動加載 NFS 目錄,方法是使用 /etc/fstab 或 /etc/vfstab 文件在啟動時加載 NFS 目錄。還有一種更好的辦法,即使用自動加載系統簡化加載過程,並同時獲得服務器的最佳性能。
使用自動加載器
作為對 NFS 的擴展,應當考慮使用自動加載系統。此組件將在引用目錄時自動加載這些目錄。例如,通過使用為 /mnt/data 配置的 NFS 共享,與 /mnt/data 關聯的 NFS 共享將在鍵入以下內容時自動加載和提供:
$ cd /mnt/data
目錄停止了頻繁使用後,該目錄將會被卸載。自動加載器在共享用戶目錄時尤為有用——個人可以登錄到任何計算機並自動從遠程 NFS 服務器加載其主目錄並向其提供。
使用自動加載器,不僅可以簡化從 NFS 服務器加載遠程目錄的方式,還可以幫助減少使用 NFS 共享向不活動的客戶端提供統計數據和檢測信號 通信帶來的負載。
各個 UNIX 變體均包括自動加載功能。在 Linux 內,必須在內核中配置自動加載功能,並在配置自動加載配置和啟動自動加載器前重新啟動計算機。為了配置自動加載器,必須首先編輯 /etc/auto.master 或 /etc/autofs/auto.master 文件。這將定義頂級共享設置,將頂級目錄映射到另一個映射文件。例如,以下文件會將 /home 和 /mnt 映射到其他兩個映射:
/home /etc/autofs/auto.home /mnt /etc/autofs/auto.mnt
可以隨後在 /mnt Directory 和對應的映射內配置其映射到的子目錄和 NFS 目錄。例如,清單 3 就是 mnt 映射中的一個片段。
清單 3. mnt 映射中的片段applications atuin:/Volumes/Shared1/Applications archiveprepare atuin:/Volumes/Shared1/ArchivePrepare backupprepare atuin:/Volumes/Shared1/BackupPrepare build atuin:/Volumes/Shared1/Build correspondence atuin:/Volumes/Shared1/Correspondence devprojects atuin:/Volumes/Shared1/DevProjects docarchive atuin:/Volumes/Shared1/DocArchive incoming atuin:/Volumes/Shared1/Incoming information atuin:/Volumes/Shared1/Information
由於清單 3 中所示的片段位於 /mnt 映射中,因此,當用戶訪問 /mnt/applications 時,自動加載器將運行相關命令加載映射的 NFS 共享,在本例中為 atuin:/Volumes/Shared1/Applications。
在 UNIX 上,您將需要隨後啟動自動加載後台程序。該程序在大部分 UNIX 變體上都稱為 automount 或 automountd,而在很多 Linux 變體中,稱為 autofs 且使用以下命令啟動:
同步時間
當將 NIS 或 NIS+ 與 NFS 一起使用時,最好確定服務器之間的時間得到了正確的同步。這對 NIS 或 NIS+ 至關重要,因為將在信息分布期間使用時間來確保數據庫保持最新。如果計算機沒有同步,則從服務器可能會停止從主服務器下載信息,或可能會拒絕對主服務器的更新。
實現時間同步的最簡單方法是使用網絡時間協議(Network Time Protocol,NTP),這是大部分 Linux 上的標准組件或可安裝組件,在各個 UNIX 變體中也變得越來越普遍。
下載並編譯或獨立安裝了相應程序包後,就可以得到關鍵組件 ntpd 後台程序。ntpd 後台程序在後台執行,可以配置為提供時間同步信息和根據服務器自動更新本地計算機的時間。
如果使用 NIS,請設置 NIS 主服務器為網絡的其他計算機提供同步信息。將服務器配置為使用其內置時鐘,或者,如果連接到 Internet,則使其從一個公共服務器獲取其時間同步信息。例如,我的 ISP 就提供 NTP 服務。/etc/ntp.conf 配置文件中保存著我的 ISP 的 NTP 服務器的名稱,如下所示:
server ntp0.zen.co.uk minpoll 12 maxpoll 17
網絡中的每個 NIS 服務器和客戶端都將配置為使用相同的 /etc/ntp.conf 文件來與 NIS 主服務器通信,以獲取時間信息:
server atuin.mcslp.pri minpoll 12 maxpoll 17
配置了兩個系統後,使用以下命令在 NIS 主服務器上啟動 NTP 後台程序:
/etc/init.d/ntp start
然後在每個 NIS 從服務器和客戶端上重復該過程。
總結
通過傳遞和共享信息,可更為方便地將 UNIX 和 Linux 系統集成到一起。共享了登錄和其他信息後,您的用戶便可連接並使用您的 UNIX 和 Linux 計算機,而不需要考慮為其各自使用單獨的密碼。如果將此系統與 NFS 共享結合使用,還可以共享文件;而且,如果使用自動加載器處理用戶個人的主目錄,則他們可以繼續使用自己的文件和資源以及那些通過文件系統共享的內容,而不受其當前所在的操作系統和計算機的限制。