NFS文件服務器的配置與使用
作者:Zhaoxiong.Zhang
NFS(Network Files system)是網絡文件系統,它能夠在不同的Linux/UNIX系統上使用,以達到文件的共享。本章將介紹有關網絡文件系統NFS的知識。
本節介紹網絡文件系統NFS的基礎知識。
一、NFS簡介
什么是NFS呢?它是Network File system的縮寫,即網絡文件系統。
NFS是由SUN公司開發,并于1984年推出的一個RPC服務系統,它使我們能夠達到文件的共享,在不同的系統間使用,所以它的通信協議設計與主機及操作系統無關。當用戶想使用遠程文件時只要用“mount”命令就可把遠程文件系統掛接在自己的文件系統之下,使遠程的文件與使用本地計算機上的文件一樣。
例如在計算機A上,要把計算機B上的/usr/man掛接到A的/usr/man只需執行如下命令即可:
mount B:/usr/man /usr/man
用戶不但可以mount(掛接)目錄,而且可以掛接一個文件。在掛接之后用戶只能對文件做讀取(或者寫入)的操作,而不能在遠程計算機上把此文件或目錄移動或刪除,但是如果掛接 /usr/man后,則不能再掛接 /usr/man底下的目錄,否則會發生錯誤。
NFS就是一種促使servers(服務器)上的文件能被其他的計算機掛接而達到資源共享的網絡文件系統,使用這些文件的計算機就可稱為Client(客戶機),一個客戶機可以從服務器上掛接一個文件或者一個層次的目錄。然而,事實上任何一臺計算機都可以是NFS服務器或NFS客戶機,甚至同時為NFS 服務器和NFS客戶機。
NFS服務器所共享出來的文件或目錄都記錄在/etc/exports文件中,當啟動NFS服務器時,腳本/etc/rc.d/rc會自動啟動exportfs程序,搜索/etc/exports這一個文件是否存在,并且賦予正確的權限給所有共享出去的文件或目錄。
但需要注意的是,只有服務器所共享出去的文件或目錄,NFS客戶機才能夠掛接。同樣,當啟動客戶機時,系統會自動去掛接所有服務器共享的目錄或文件,而掛接到的所有路徑都會記錄在/etc/fstab下。
當客戶機掛接一個目錄或文件時,并不是說復制服務器上的這一個目錄或文件到本地的計算機上,而是在使用時從服務器上讀取文件到本地的內存中,因此,可以用cd進入這一個掛接到的目錄,就如同進入本地的目錄一樣
二、配置NFS服務器時的幾個重點
配置NFS服務器的一般步驟:
(1)確定計算機為NFS文件系統的服務器。
(2)對服務器上的硬盤進行分區,確定哪一些分區是要用來作為客戶機所共享的文件系統。
(3)確定每一臺客戶機的訪問參數(即讀寫的權限)。
(4)創建/etc/exports文件(一般系統都有一個缺省的exports文件,可以直接修改;如果沒有,自己創建一個)
(5)重新啟動NFS服務器或者用命令exportfs -a輸出所有的目錄,并且用nfsd &啟動nfsd守護進程。
配置時的注意事項:
(1)檢查/etc/exports輸出路徑的權限,確定只有root才能修改,其他用戶只能讀。
(2)假如計算機沒有NIS服務,當更改資料時要修改下面的文件:
/etc/passwd
/etc/group
/etc/hosts
/etc/ethers
(3)為自己的網絡設置安全。
/etc/exports文件的例子
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
exports文件的格式為:
共享目錄 主機(選項)
這里需要注意:
ro 該主機有只讀的權限
rw 該主機對該共享目錄有即可讀又可寫的權限
root_squash 客戶機用root用戶訪問該共享文件夾時,將root用戶映射成nobody用戶。
no_root_squash 客戶機用root用戶訪問該共享文件夾時,不映射root用戶。
all_squash 客戶機上的任何用戶訪問該共享目錄時都映射成nobody用戶。
anonuid 將客戶機上的用戶映射成指定的uid的用戶。
上面的示例文件中:
/ zhang(rw) wang(rw,no_root_squash)
該命令行表示共享服務器上的 / 目錄,只有zhang和wang兩臺主機可以訪問,并且兩臺主機對該共享目錄都有可讀可寫的權限;zhangr主機在用root身份訪問時,將客戶機的root用戶映射成服務器上的nobody用戶(root_squash參數,該參數為缺省參數),相當于在服務器上使用nobody用戶訪問該目錄;wang主機在用root用戶訪問該共享目錄時,不映射root用戶(no_root_squash參數),即相當于在服務器上用root身份訪問該目錄。
/projects proj*.local.domain(rw)
該命令行表示共享/projects目錄,local.domain域中所有以proj開頭的主機都可以訪問該目錄,并且都有讀寫的權限,客戶機上的任何用戶在訪問時都映射成nobody用戶(all_squash參數,該參數為缺省參數)。這里需要特別說明的是,如果客戶機要在該共享目錄上保存文件,則服務器上的nobody用戶對/projects目錄必須要有寫的權限。
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
該命令行表示共享/home/joe目錄,只有名為pc001的主機可以訪問,pc001主機對該目錄有讀寫的權限,并且所有的用戶都映射成服務器上的uid為150、gid為100的用戶。
設置NFS客戶機的操作步驟:
(1)編輯好/etc/fstab這一個文件,確定要掛接的路徑都在fstab中。
(2)依照fstab所設置的內容,在客戶機上設置好掛接點(mount point)。(mount_points就是用mkdir設置exports所輸出的路徑)
(3)確定所要掛接的路徑,都會出現在/etc/exports文件中
(4)可以執行mount命令連結server上的共享目錄(mount-a)
如果只是臨時使用,可以直接用mount命令:
mount servername:共享目錄 本地目錄,例如:
mount 192.168.100.1:/share /mnt
該命令將192.168.100.1上的/share目錄掛接到本地的/mnt目錄(當然,服務器端必須要先設置共享該目錄)。
/etc/fstab文件的例子
192.168.100.1:/home/joe /mnt nfs rw 0 0
? mount的語法
mount –t type[-rv] -o[option] server:pathname mount_point
mount:
mount-a把/etc/fstab中所列的路徑全部掛上
mount myhost:/usr/local /usr/local/myshare
把myhost的/usr/local目錄掛接到client的 /usr/local/myshare上并且是readonly上。
-t type:用戶所要掛接的文件系統類型,如nfs
-r:所掛接的路徑定為readonly
-v:掛接過程的每一個動作,都有消息傳回到屏幕上
umount命令:
不使用該共享目錄時,可以把該目錄卸載。
umount mount_point,例如:
umount /mnt
umount-a卸載所有已經掛接上的路徑
某公司需要在網絡上共享一個文件夾,所有人都只有只讀權限,且只有192.168.1.0/24子網的用戶可以訪問,試通過NFS共享該文件夾。NFS服務器的IP地址是192.168.1.1。
具體操作步驟如下:
(1)以root身份登錄,在/目錄下創建目錄share。
[root@bearzhang /]#mkdir share
(2)編輯/etc/exports文件,在該文件中加入下面的命令行。
/share 192.168.1.0/24(ro,root_squash)
“/share”表示要共享的目錄,192.168.1.0/24表示允許訪問的主機(這里是一個子網的主機),括號內的ro表示客戶機上的用戶對該共享目錄只有只讀權限,root_squash表示當客戶機上的root用戶訪問該共享目錄時,映射該用戶為匿名用戶,即當客戶機上的root用戶訪問該共享目錄時相當于服務器上的anonymous(nobody)用戶。
(3)在192.168.1.0/24子網上的任意一臺客戶機上安裝共享目錄。
[root@bearzhang root]#mount 192.168.1.1:/share /mnt
上面命令行的意思是:將192.168.1.1上的/share目錄作為一個分區掛接到本機的/mnt目錄下。
(4)測試權限。
進入/mnt目錄建立目錄test,此時會出現下面的提示
root@bearzhang mnt]#mkdir: cannot create directory `mydir': Permission denied
因為在步驟(2)中的命令行中加了參數ro,任何人對該共享目錄都只有只讀權限。