|
第十五章 架
設 NFS 及 NIS Server
|
| 15.1 架設 NFS Server | ||
| 15.1.1 | NFS 概述 | |
| 15.1.2 | 安裝 NFS 套件及瀏覽套件內容 | |
| 15.1.3 | 設定 NFS --- 設定 /etc/exports、exportfs | |
| 15.1.4 | Client 掛載 NFS --- showmount 、Client 掛載 NFS 的語法、設定開機時自動掛載、 使用一般 user 身分執行掛載 ( sudo ) |
|
| 15.1.5 | 對分享目錄做進一步的限定 | |
| 15.2 架設 NIS Server | ||
| 15.2.1 | NIS 使用時機 | |
| 15.2.2 | 安裝 NIS Server 套件及瀏覽套件內容 | |
| 15.2.3 | 設定 NIS Server | |
| 15.2.4 | 設定 NIS Client --- Client 端測試 、NIS Client 查詢 NIS Server 相關資訊的指令 |
|
| 15.2.5 | NIS 與 NFS 的整合 | |
| 15.2.6 | 設定 Slave NIS Server | |
15.1
架設 NFS Server
15.1.1 NFS 概述
NFS 全名為 Network File System
( 網路檔案系統 ),主要是讓 Unix-Like 主機之間,能透過掛載的方式來存取對方所分享出來的資源,也就是說 NFS Client 是將 NFS
Server 所提供的分享目錄掛載至本地端主機下,就好比是在本機操作般一樣。
Windows 本身是不支援 NFS 檔案系統的,除非您額外的加裝一些軟體,不過這並不是本章所要探討的範圍,因此我們這裡的重心還是擺在 Unix-Like
上頭。
NFS 早期是由 SUN 這間公司所發展的,其主要是使用 RPC ( Remote Procedure Call:遠端程序呼叫 ) 機制來運作。所謂的
RPC 就是讓用戶端電腦上所執行的程式可以呼叫遠端電腦的程式來幫其執行相關服務,然後再將結果傳回給用戶端。
負責 RPC 服務的一支關鍵 daemon 叫 portmap,當 NFS Server 啟動後,portmap 就會動態分配
port number 給那些提供 NFS 服務的相關 daemon。因此當 Client 端在對 NFS Server
提出服務請求時,必須先通過 portmap ( 監聽 111 port ) 這一關,讓 portmap 來將 NFS 服務相關 daemon 的 port
告知,然後 Client 才曉得要跟哪些 port 做溝通,爾後也才能建立起與 NFS Server 的連線。一般有使用到 RPC 機制的伺服器,就可稱之為
RPC Server。
NFS Server 的執行主程式:
| ˙ | /usr/sbin/rpc.nfsd: 此 daemon 可以用來識別 NFS Client 端的登入身分 ID。 |
| ˙ | /usr/sbin/rpc.mountd : 當接收到 Client 端的掛載請求時,rpc.mountd 會依據 /etc/exports 檔案 (其實真正參考的檔案是 /var/lib/nfs/etab) 來檢查此來源端是否允許掛載,及掛載後該使用者的相關權限為何。另外每次 Server 收到 Client 的掛載需求時,rpc.mountd 會將這個紀錄記載在 /var/lib/nfs/rmtab 內,俟收到卸載請求後,才又將這個紀錄從 rmtab 中移除。 |
| ˙ | /usr/sbin/rpc.rquotad: |
15.1.2 安裝 NFS 套件及瀏覽套件內容
※ 檢查相關套件有無安裝
| suselinux:~ #
rpm -qa | grep nfs nfs-utils-1.0.6-103.7 ← NFS 的主要套件囉。 suselinux:~ # rpm -qa | grep portmap portmap-5beta-728.1 ← 這個套件一般預設都會安裝,不過還是查一下吧。 |
※查詢 nfs-utils 套件清單
suselinux:~ #
rpm -ql nfs-utils
|
NFS 的主要設定檔 /etc/exports,其不屬於 nfs-utils 套件,而是存放在
netcfg 套件內。另外 rpc.rquotad 則是屬於 quota 套件。
※設定下次開機時啟動 NFS 服務:
| suselinux:~ # chkconfig nfsserver 35 |
15.1.3 設定 NFS
以下我們會以兩台 Linux 來實做,一台做 NFS Server (192.168.1.111),一台做 NFS Client (192.168.1.197)。不過在還沒正式開始設定之前,先做個基本的檢查動作:
| 1. | NFS Server 及 NFS Client 先互 ping 看看,以確保雙方都能夠通訊。如果有一方不通時,請先找出問題來,看看是不是防火牆或其他網路因素所造成的,等解決了之後再進行下一步。
|
|||||||||||||||||||||||||||||||||||||||||||||
| 2. | NFS Server 及 NFS Client 雙方都要啟動 RPC 機制,可使用 rpcinfo 指令來做測試。至於
rpcinfo 的用法請參考以下說明: ● rpcinfo:report RPC information.
|
確認以上執行都沒問題之後,就可以開始設定 NFS 了。
※ 設定 /etc/exports
先說明這個檔案的設定格式:
說明:如只打算分享一個目錄,就設定那麼一行便可搞定,夠簡單吧 !
設定檔的內容就大致如此,應該不難吧 ! |
設定範例說明:
範例一:
範例二:
範例三:
範例四:將以上設定結合起來,再加上一個 CDROM 分享的設定。
|
設定完成後請啟動 NFS:
| Server:~ # rcnfsserver start Starting kernel based NFS server done |
| Server:~ # rpcinfo -p localhost Server:~ # netstat -anp |
維護 NFS Server 上的 export table。
參數說明:
補充 一下指令語法中的 [client:/path ..],client 是針對來源端的指派,可以是 IP 位址或主機名稱 ; path 是 NFS 所分享目錄的實際路徑。當您要對 /etc/exports 中沒設定到的分享目錄做 export,或對已設定的分享目錄做新增來源端或修改相同來源端的權限時,這個 exportfs 指令就很好用了,也就是說這個指令可以用來修改 export table ( /var/lib/nfs/etab ) 啦。以下的例子會以範例四做基礎,來看看如何使用 exportfs: 範例說明:
以上是使用 exportfs 指令來修改 export table。接著下來您可嘗試執行以下的指令:
這樣將會把 /etc/exports 的設定內容重新做一次輸出 (reexport),結果當然就是更新 /var/lib/nfs/etab 囉,所以剛剛使用 exportfs 去做的修改,都會從 /var/lib/nfs/etab 中消失。 如果平常您只針對 /etc/exports 在做設定,並無額外使用 exportfs 指令來修改 export table 的話,那麼只要 /etc/exports 異動後,就可以執行 " exportfs -rv " 來讓新的設定值生效。 一般人往往搞不清楚 exportfs 指令中 -a 及 -r 參數的差別,簡單的說,使用 -r 能夠將 /etc/exports 與 export table 做同步更新,而 -a (未搭配 -u 使用時) 則是把 /etc/exports 所有設定的分享目錄輸出至 export table 而已,如果之前已經存在於 export table 內的資料紀錄還是會存在,所以 -a 參數並不能讓 export table 與 /etc/exports 的設定內容取得完全的一致性。假使剛剛您不是執行 " exportfs -rv " 而是執行 " exportfs -av ",就可以很明顯的看出兩者之間的差異。 |
| 顯示 NFS Server 上的掛載資訊。 指令語法:showmount -e [ hostname | IP Address ]
|
| mount [NFS Server 的主機名稱或 IP]:[分享目錄的路徑] [掛載點] 範例說明:
|
若要系統於開機時自動掛載 nfs 的檔案系統,可於 Client 端的 /etc/fstab 做如下設定:
|
剛剛在 Client 端的測試都是使用 root 來進行掛載,如果改成以一般使用者身分來執行的話又如何呢 ?
這時候可以考慮在 Client 端安裝 sudo 套件來解決這個問題:
安裝了這個套件並做好相關設定後,一般使用者只要在欲執行的指令之前加上 sudo,就能以 root ( 當然也可以是其他 user ) 的身分來執行這個指令,如此便可解決一般 user 無法 mount 的問題。 接著來看一下 sudo 設定檔 (/etc/sudoers) 的內容:
先看個簡單的範例:
有些時候,您會希望只授權給少數使用者能以 root 的身分執行一些工作,但又不希望這些 user 能知道 root 的密碼,這時候就得調整一下 sudoers :
了解了 sudo 的用法後,再來就直接以一般 user 身分進行掛載及卸載 NFS:
|
|
| 1.
建立分享目錄: Server:~ # mkdir /secretdir Server:~ # cat > /secretdir/secretfile ← 先建立一個檔案,以方便等會兒實驗用。 It is a secret file. 2. 新增帳號及群組: Server:~ # useradd -u 5000 -m admin ← 新增 UID 為 5000 的帳號 admin。 Server:~ # passwd admin Changing password for admin. New password: Re-enter new password: Password changed. Server:~ # groupadd -g 5000 secretgrp ← 新增 GID 為 5000 的群組 secretgrp。 3. 修改檔案目錄相關屬性: Server:~ # chown -R admin:secretgrp /secretdir Server:~ # chmod 750 /secretdir ; chmod 640 /secretdir/secretfile Server:~ # ls -ld /secretdir drwxr-x--- 2 admin secretgrp 80 Nov 12 23:39 /secretdir Server:~ # ls -l /secretdir -rw-r----- 1 admin secretgrp 21 Nov 12 23:39 secretfile 4. 設定 /etc/exports: Server:~ # vi /etc/exports /secretdir 192.168.1.197(rw,root_squash,sync) Server:~ # exportfs -rv |
| 1.
新增 id 皆為 5000 的使用者及群組: Client:~ # useradd -u 5000 -m admin Client:~ # passwd admin Changing password for admin. New password: Re-enter new password: Password changed. Client:~ # groupadd -g 5000 secretgrp 2. 將使用者 barry 及 mary 加入 secretgrp 群組: Client:~ # vi /etc/group secretgrp : ! : 5000 : barry , mary 3. Client 掛載測試:請先在 /etc/sudoers 中做好相關設定。 barry@Client:~> sudo mount 192.168.1.111:/secretdir nfs barry@Client:~> cd nfs barry@Client:~/nfs> cat secretfile It is a secret file. barry@Client:~/nfs> touch barryfile touch: cannot touch `barryfile': Permission denied admin@Client:~> mkdir nfs admin@Client:~> sudo mount 192.168.1.111:/secretdir nfs admin@Client:~> touch nfs/adminfile admin@Client:~> ls -l nfs -rw-r--r-- 1 admin users 0 Nov 13 2005 adminfile Client:~ # mount 192.168.1.111:/secretdir /mnt/nfs Client:~ # cd /mnt/nfs -bash: cd: /mnt/nfs: Permission denied 以上分別使用 barry、admin 及 root 做測試,應該看得懂吧。 |

Server:~
# rpm -q ypserv
Server:~ # rpm -ql ypserv
|
| yp 就是 yellow page 之意,也就是所謂的黃頁。黃頁其實指的是一些工商名錄,如地址簿與電話簿之類的,因此透過 yellow page 的查詢,可以讓我們很快速的找到所需的資訊。NIS 就是類似 yp 這樣的一個功能,所以您會注意到 NIS 的相關套件、檔案、程式名稱之前,幾乎都會加上 yp,這樣應該能夠理解吧 ! |
15.2.3 設定 NIS Server
請您參考以下的步驟做相關的設定:
| 1. | 首先在 /etc/hosts 檔內,將 NIS Server 的主機名稱與 IP 位址的對應關係設定進去:
|
||||||||||||||||||||||||||||||
| 2. | 設定 NIS domain name:
|
||||||||||||||||||||||||||||||
| 3. | 設定 ypserv.conf:
Security 的部分可設定成 deny (全部拒絕存取)、none (無任何限制,表示皆可存取)、port (允許小於 1024 port 的來源端作存取)。若無特殊考量,這個地方採用系統預設值即可。但如您考慮到安全性的話,則可做如下的修改:
來源端 " 192.168.1. ",代表的就是 192.168.1.0/255.255.255.0。也就是說除了這個來源端允許存取以外,拒絕其他所有的來源端。 |
||||||||||||||||||||||||||||||
| 4. | 設定 /etc/netgroup: 這個檔案主要是用來設定信任的網路群組,其設定格式如下:
netgroup 是您的群組名稱,而緊接著在 ( ) 內的 host 表示來源端主機,user 表示 username,domain 就是 NIS 網域名稱。筆者在這個地方是沒做任何的設定,這就表示所有的主機、使用者及網域都信任的意思。 |
||||||||||||||||||||||||||||||
| 5. | 初次啟動 ypserv 及 yppasswdd:
|
||||||||||||||||||||||||||||||
| 6. | 確認 RPC 有收到程式正確的回應:
如果您執行的結果不是輸出這樣的訊息,表示 RPC 收不到程式的回應。請您務必要看到正確的回應訊息後,再繼續進行下個步驟。 |
||||||||||||||||||||||||||||||
| 7. | 建立 NIS 資料庫:
這樣就很輕鬆的建立起 NIS 資料庫了。您可至 /var/yp 中看到一個 paching 的目錄及 ypservers 的檔案,paching 目錄這就是存放資料庫檔案之處,至於 ypservers 檔案則是記載著這台 NIS 的主機名稱。 另外在剛剛那輸出內容的最後兩行是告知您 Server.paching.com.tw 這台主機已經被設定成 NIS Master Server 了,如還要設定 NIS Slave,就在 Slave 主機上執行:" ypinit -s Server.paching.com.tw "。 將來您要是在 NIS Server 上去新增帳號或修改帳號密碼相關資訊後,請記得更新資料庫:
|
Server 部分的設定就是如此。另外想讓下次開機時自動啟動 NIS 相關服務,請執行:
| Server:~ # chkconfig ypserv 35 Server:~ # chkconfig yppasswdd 35 |
| Client:~
# rpm -qa | egrep 'ypbind|yp-tools' yp-tools-2.8-188.1 ← NIS Client 查詢 NIS Server 相關資訊時所使用的指令就在這個套件內。 ypbind-1.17.3-1.2 ← NIS Client 的主要套件。 Client:~ # rpm -ql ypbind
Client:~ # rpm -ql yp-tools
|
| 1. | 於 hosts 檔內,將 NIS Server 的資料設定進去:
|
||||||||||||||||||
| 2. | 設定 NIS domain name:
|
||||||||||||||||||
| 3. | 設定 yp.conf:
|
||||||||||||||||||
| 4. | 設定 Client 端查詢的順序:
|
||||||||||||||||||
| 5. | 修改 /etc/passwd:
|
||||||||||||||||||
| 6. | 初次啟動 ypbind:
|
| Client:~ # chkconfig ypbind 35 |
若一切 ok 的話,接著就可以使用一個 Server 上存在但 Client 端不存在的帳號,來看看能否順利從 Client
端登入:
由於 Client 端主機並不存在 vivian 這個帳號,而是經由 NIS 認證來登入的,因此 Client 端主機當然不會有 vivian 這個家目錄存在。要解決這個問題很容易,只要把 NIS 與 NFS 做個整合即可,這部分等一下馬上會說明。 |
以下要介紹的這些指令,請參考 15.2.2 小節的說明,這裡直接以範例來介紹:
|
|
|
NIS Client 成功掛載後,您可以用剛剛那個帳號再登入一次,這回應該就有家目錄可用了。
另外也可嘗試於 NIS Client 的主機上頭去啟動 telnet 服務,然後由另一部電腦對此 NIS Client 做遠端連線,看看能否認證成功。
15.2.6 設定 Slave NIS Server
NIS Server 所扮演的角色非常重要,萬一掛點了,那平常透過 NIS 作認證來存取相關服務的功能就全部停擺,其影響可說是非同小可,所以為了防止有這種事情發生,架設一台以上的
Salve NIS 就有其必要性。Master 與 Slave 角色的扮演就跟 DNS 一樣,Slave 除了可做備援外,亦可分擔 Master 的負擔。
目前我們的 Master NIS 為 Sever.paching.com.tw,那 Slave NIS 就假設為 Slave.paching.com.tw。首先請把
Master 的主機紀錄於 Slave 的 /etc/hosts 檔:
| Slave:~ # vi
/etc/hosts 192.168.1.111 Server.paching.com.tw Server |
再來重複 15.2.3 小節的 2 ~ 6 步驟。如果都沒問題的話,就可以開始與 Master 做資料同步了:
| Slave:~ # /usr/lib/yp/ypinit -s Server.paching.com.tw |
完成後請檢查您的 /var/yp 目錄下有沒有多一個 paching
的目錄,如果有的話,那代表 Master 的資料庫都已經成功傳送至您 Slave 主機了。
目前在我的環境裡,已經存在一台 Master 與一台 Slave NIS,不過先前的
NIS Client 尚未將 Slave 設定進去,那就趕快補上去吧:
| Client:~ # vi
/etc/hosts 192.168.1.111 Server.paching.com.tw Server 192.168.1.112 Slave.paching.com.tw Slave Client:~ # vi /etc/yp.conf domain paching ypserver Server.paching.com.tw ypserver Slave.paching.com.tw ← 補上這筆設定即可。 |
| Client:~ # rcypbind restart |
copyright © 2005 by barry ( 柏青哥
)