翻譯與整理:Nica < nicaliu at gmail dot com >
.
建置 NFS Server 有三個重點組態檔:/etc/exports, /etc/hosts.allow 與 /etc/hosts.deny。
理論上,編輯 /etc/exports 就能讓 NFS 運作,這個檔案裡會有很多 entry,每個 entry 代表一個共享的 volume。
只要 man exports 就可以瞭解這個檔案的基本設定方式,通常這個檔案長得會像這樣:
directory machine1(option11,option12) machine2(option21,option22)
.directory – 指要分享的目錄,此目錄下所有相同檔案系統的目錄也會一併共享。
.machine1 與 machine2 – 會存取這個目錄的 client,設定方式可以是 DNS 或 IP 位址。用 IP 會比較可靠也比較安全。
.optionXX – 指定該 client 存取該目錄的權限。常用的有:
..ro:此目錄的共享方式為唯讀。client 不能寫入,這是預設值。
..rw:client 可以讀取與寫入此目錄。
..no_root_squash:這個設定有很大的安全性疑慮 ! 一般來說,client 上的 root 到這台伺服器上時只是 nobody,但設定此選項後,client 上的 root 存取伺服器上的這個共享目錄時,即擁有 root 權限。
..no_subtree_check:若只有部份 volume 需要匯出,一般來說還是會呼叫整個子目錄樹,檢查所有 client 發出需求要確認的檔案,停用這樣的檢查,可以加速傳輸速度。
..sync:預設下,除了最新版本(1.11)之外,所有 exportfs 命令都會用 async 的方式,告知 client 所有檔案已完成寫入 – NFS 已完成寫入檔案系統的動作,這種作法在伺服器重開機時會引發訛誤,而設定 sync 選項可以避免這件事。
.
/etc/exports 的設定可以是這樣:
/usr/local 192.168.0.1(ro) 192.168.0.2(ro)
/home 192.168.0.1(rw) 192.168.0.2(rw)
.
兩台 client 對 /usr/local 這個目錄都只能讀不能寫,而對 /home 則具寫入權限。
.
機器很多的情況下也可以這樣設:
.
/usr/local 192.168.0.0/255.255.255.0(ro)
/home 192.168.0.0/255.255.255.0(rw)
.
匯出共享目錄的限制:
一、目錄被匯出時,它的父目錄與子目錄 – 在相同檔案系統下,都不能再匯出了。事實上也沒這個必要,當目錄被匯出時,它下面所有相同檔案系統的目錄也會一併匯出。
二、在 NFS 下匯出 FAT 或 VFAT (例如 MS-DOS 或 Windows 95/98) 檔案系統不是個好主意。首先 FAT 的設計本來就不是給多使用者的機器使用,因此,它的操作權限也無從管理起。事實上有些底層作業系統的設計,已直接說明它不適用於 NFS 的作業。
三、裝置或其它特殊檔案無法確切匯出到非 Linux 的用戶端。
.
【關於 /etc/hosts/allow 與 /etc/hosts.deny】
當一個 request 進來,伺服器會依序這樣作:
一、先檢查是不是 hosts.allow 裡列的機器,如果是就允許存取。
二、若機器並非 hosts.allow 裡列出來的那些,伺服器接著查 hosts.deny,看是不是列在裡頭,若是,則拒絕該機器存取。
三、若這個 client 不在 hosts.allow 裡也不在 hosts.deny 裡,那就允許它存取。
.
一些和 NFS 有關的 service 應該也要在這兩個檔案裡作設定,建議是:
一、 /etc/hosts.deny 裡設定:
portmap: ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
有些系統管理者習慣把這個檔案設為 ALL: ALL,雖然這樣很安全,不過有時裝了新的服務,會因為這個設定而找不出為什麼新的服務不能動。
二、/etc/hosts.allow 裡必須設定,才能讓 NFS 的連線順利:
portmap: 192.168.0.1 , 192.168.0.2
lockd: 192.168.0.1 , 192.168.0.2
rquotad: 192.168.0.1 , 192.168.0.2
mountd: 192.168.0.1 , 192.168.0.2
statd: 192.168.0.1 , 192.168.0.2
.
語法:service: host [or network/netmask] , host [or network/netmask]
.
以上設定完成後 NFS 應該就能運作了 – 在你擁有夠新 kernel 版本與 nfs-utils 套件的情況下。
設定完成後必須重開機讓 nfs 服務開始跑,若 nfsd 已經在跑了,那你只要 flush 組態檔就好。
NFS 仰賴 portmapper daemon,稱之為 portmap 或 rpc.portmap,必須先啟動它們才能使用,近期的 Linux 分支套件在開機時都會啟動它,不過在用 NFS 前,最好還是確認它有沒有在運作 (執行 ps aux | grep portmap 即可)
.
NFS 服務下有五個 daemon:
rpc.nfsd - 控制絕大多數的運作;
rpc.lockd 與 rpc.statd – 掌控檔案的鎖定;
rpc.mount – 初始化掛載需求;
rpc.rquotad – 控制匯出 volumes 上,使用者檔案的容量限制。
.
2.2.18 的 kernel 開始,lockd 由 nfsd 呼叫,使用者無須手動啟動它,不過 statd 就需要另外啟動了。
這些 daemon 都在 nfs-utils 套件裡,在 /sbin 或 /usr/sbin 目錄下就找得到。
.
【確認 nfs 運作】
rpcinfo -p 可以找出 portmapper 有哪些服務在跑。
.
當你變更 /etc/exports 檔案內容,變更的部份不見得會馬上有作用,得執行 exportfs -ra 強制 nfsd 重新讀取 /etc/exports 檔,若找不到 exportfs 這個指令,可 先砍掉 nfsd 服務再重新啟動它。若還是不能動就查查 hosts.allow 與防火牆的設定吧。
.

谢谢教程,晚上回家试试安装