NFS參數配置詳細說明


摘抄自:http://www.linuxidc.com/Linux/2012-05/61527p3.htm

1、NFS概述
 NFS:Network file system,網絡文件系統;
 由sun公司1984年推出,用來在網絡中的多台計算機間實現資源共享(包括象文件或cd-rom);
 設計的目的是:實現在不同系統間交互使用,所以它的通信協議采用與主機和操作系統無關的技術;
 NFS Server可以看作是File Server,它可以讓你的PC通過網絡將遠端得NFS SERVER共享出來的檔案MOUNT到自己的系統中,在CLIENT看來使用NFS的遠端文件就象是在使用本地文件一樣;
 NFS協議從誕生到現在有多個版本:NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4(rfc3010);
 如何查看nfs當前的版本:
 rpm -qi portmap
 rpm -qi nfs-utils
 NFS服務器的安裝:
 可以由多種安裝方法:
 ----在安裝linux系統時選擇安裝nfs服務對應的組件;(多數linux發行版本默認安裝)
 ----安裝nfs的rpm套件包(手動安裝)
 rpm -ivh rpm包
 需要5個RPM包。
 setup-*:  共享NFS目錄在/etc/exports中定義 (linux默認都安裝)
 initscripts-*: 包括引導過程中裝載網絡目錄的基本腳本 (linux默認都安裝)
 nfs-utils-*:  包括基本的NFS命令與監控程序 
 portmap-*:  支持安全NFS RPC服務的連接 
 quota-*:    網絡上共享的目錄配額,包括rpc.rquotad (這個包不是必須的) 
 ----也可以去下載nfs的源代碼包,進行編譯安裝; 
 RPC(Remote Procedure call) NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因為NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程序。或者說NFS也是一個RPC SERVER.所以只要用到NFS的地方都要啟動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。可以這么理解RPC和NFS的關系:NFS是一個文件系統,而RPC是負責負責信息的傳輸。
 nfs在系統中的后台守護進程:
 nfs
 nfs服務需要啟動的其他進程:
rpc.nfsd:接收從遠程系統發來的NFS請求,並將這些請求轉化為本地文件系統請求;
rpc.mountd:執行被請求的文件系統的掛接和卸載操作;
rpc.portmapper:將遠程請求映射到正確的NFS守護程序;
rpc.statd:在遠程主機重啟時,提供加鎖服務;
rpc.quotaed:提供硬盤容量的管理能力,磁盤限額;
rpcinfo -p 可以查看所要的守護進程時候正常運行;
ps -ef | grep nfsd
ps -ef | grep mountd
ps -ef | grep protmap
現在我們來查看服務器上有關NFS服務器啟動了哪些端口:
 # lsof -i|grep rpc
 portmap   1931 daemon   3u IPv4   4289   UDP *:sunrpc
 portmap    1931 daemon     4u IPv4    4290    TCP *:sunrpc (LISTEN)
 rpc.statd 3206 statd    3u IPv4   7081    UDP *:1029
 rpc.statd 3206 statd    6u IPv4   7072    UDP *:838
 rpc.statd 3206 statd    7u IPv4   7085    TCP *:1031 (LISTEN)
 rpc.mount 3483   root    6u IPv4   7934       UDP *:691
 rpc.mount 3483   root    7u IPv4   7937       TCP *:694 (LISTEN)
NFS服務的主配置文件:
/etc/exports:
格式:[共享的目錄] [主機名或IP(參數,參數)]
當將同一目錄共享給多個客戶機,但對每個客戶機提供的權限不同時,可以這樣: 
[共享的目錄] [主機名1或IP1(參數1,參數2)] [主機名2或IP2(參數3,參數4)]
第一列:欲共享出去的目錄,也就是想共享到網絡中的文件系統;
第二列:可訪問主機
192.168.152.13 指定IP地址的主機 
nfsclient.test.com 指定域名的主機 
192.168.1.0/24 指定網段中的所有主機 
*.test.com        指定域下的所有主機 
*                       所有主機 
第三列:共享參數
下面是一些NFS共享的常用參數: 
下面是一些NFS共享的常用參數: 
 ro                    只讀訪問 
 rw                   讀寫訪問 
 sync                所有數據在請求時寫入共享 
 async              NFS在寫入數據前可以相應請求 
 secure             NFS通過1024以下的安全TCP/IP端口發送 
 insecure          NFS通過1024以上的端口發送 
 wdelay            如果多個用戶要寫入NFS目錄,則歸組寫入(默認) 
 no_wdelay      如果多個用戶要寫入NFS目錄,則立即寫入,當使用async時,無需此設置。 
 Hide                在NFS共享目錄中不共享其子目錄 
 no_hide           共享NFS目錄的子目錄 
 subtree_check   如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(默認) 
 no_subtree_check   和上面相對,不檢查父目錄權限 
 all_squash               共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄。 
 no_all_squash         保留共享文件的UID和GID(默認) 
 root_squash             root用戶的所有請求映射成如anonymous用戶一樣的權限(默認) 
 no_root_squas         root用戶具有根目錄的完全管理訪問權限 
 anonuid=xxx            指定NFS服務器/etc/passwd文件中匿名用戶的UID 
例如可以編輯/etc/exports為: 
/tmp     *(rw,no_root_squash) 
/home/public 192.168.0.*(rw)   *(ro) 
/home/test  192.168.0.100(rw) 
/home/linux  *.the9.com(rw,all_squash,anonuid=40,anongid=40)

相關的命令:
1、exportfs命令: 
如果我們在啟動了NFS之后又修改了/etc/exports,是不是還要重新啟動nfs呢?這個時候我們就可以用exportfs命令來使改動立刻生效,該命
令格式如下: 
exportfs [-aruv] 
-a :全部mount或者unmount /etc/exports中的內容 
-r :重新mount /etc/exports中分享出來的目錄 
-u :umount目錄 
-v :在export的時候,將詳細的信息輸出到屏幕上。 
具體例子: 
# exportfs -au 卸載所有共享目錄
# exportfs -rv 重新共享所有目錄並輸出詳細信息
2、啟動NFS 
# service portmap start 
# service nfs start 
檢查NFS的運行級別: 
# chkconfig --list portmap 
# chkconfig --list nfs 
根據需要設置在相應的運行級別自動啟動NFS: 
# chkconfig --level 235 portmap on 
# chkconfig --level 235 nfs on 
nfsstat: 
查看NFS的運行狀態,對於調整NFS的運行有很大幫助 
rpcinfo: 
查看rpc執行信息,可以用於檢測rpc運行情況的工具
另外,還需要查看系統的iptables、/etc/hosts.allow、/etc/hosts.deny是否設置了正確的NFS訪問規則;
3、客戶端操作和配置
1、showmout命令對於NFS的操作和查錯有很大的幫助,所以我們先來看一下showmount的用法 
showmout 
-a :這個參數是一般在NFS SERVER上使用,是用來顯示已經mount上本機nfs目錄的cline機器。 
-e :顯示指定的NFS SERVER上export出來的目錄。 
 例如: 
 showmount -e 192.168.0.30 
Export list for localhost: 
/tmp         * 
/home/linux *.linux.org 
/home/public (everyone) 
/home/test    192.168.0.100 
客戶端運行以下命令MOUNT NFS文件系統
#mount -t nfs 192.168.70.50:/opt /mnt/disk1
2、mount nfs目錄的方法: 
mount -t nfs hostname(orIP):/directory /mount/point 
 具體例子: 
 Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs 
 mount nfs的其它可選參數: 
 HARD mount和SOFT MOUNT: 
 HARD: NFS CLIENT會不斷的嘗試與SERVER的連接(在后台,不會給出任何提示信息,在LINUX下有的版本仍然會給出一些提示),直到MOUNT
上。 
 SOFT:會在前台嘗試與SERVER的連接,是默認的連接方式。當收到錯誤信息后終止mount嘗試,並給出相關信息。 
例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs 
 rsize和wsize: 
文件傳輸尺寸設定:wsize 來進行設定。這兩個參數的設定對於NFS的執行效能有較大的影響 
 bg:在執行mount時如果無法順利mount上時,系統會將mount的操作轉移到后台並繼續嘗試mount,直到mount成功為止。(通常在設
定/etc/fstab文件時都應該使用bg,以避免可能的mount不上而影響啟動速度) 
 fg:和bg正好相反,是默認的參數 
 nfsvers=n:設定要使用的NFS版本,默認是使用2,這個選項的設定還要取決於server端是否支持NFS VER 3 
 mountport:設定mount的端口 
 port:根據server端export出的端口設定,例如如果server使用5555端口輸出NFS,那客戶端就需要使用這個參數進行同樣的設定 
 timeo=n:設置超時時間,當數據傳輸遇到問題時,會根據這個參數嘗試進行重新傳輸。默認值是7/10妙(0.7秒)。如果網絡連接不是很穩定的話就要加大這個數值,並且推薦使用HARD MOUNT方式,同時最好也加上INTR參數,這樣你就可以終止任何掛起的文件訪問。 
 intr 允許通知中斷一個NFS調用。當服務器沒有應答需要放棄的時候有用處。 
 udp:使用udp作為nfs的傳輸協議(NFS V2只支持UDP) 
 tcp:使用tcp作為nfs的傳輸協議 
 namlen=n:設定遠程服務器所允許的最長文件名。這個值的默認是255 
 acregmin=n:設定最小的在文件更新之前cache時間,默認是3 
 acregmax=n:設定最大的在文件更新之前cache時間,默認是60 
 acdirmin=n:設定最小的在目錄更新之前cache時間,默認是30 
 acdirmax=n:設定最大的在目錄更新之前cache時間,默認是60 
 actimeo=n:將acregmin、acregmax、acdirmin、acdirmax設定為同一個數值,默認是沒有啟用。 
 retry=n:設定當網絡傳輸出現故障的時候,嘗試重新連接多少時間后不再嘗試。默認的數值是10000 minutes 
 noac:關閉cache機制。 
同時使用多個參數的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs 
請注意,NFS客戶機和服務器的選項並不一定完全相同,而且有的時候會有沖突。比如說服務器以只讀的方式導出,客戶端卻以可寫的方式mount,雖然可以成功mount上,但嘗試寫入的時候就會發生錯誤。一般服務器和客戶端配置沖突的時候,會以服務器的配置為准。

3、/etc/fstab的設定方法 
/etc/fstab的格式如下: 
fs_spec   fs_file  fs_type   fs_options  fs_dump fs_pass  
fs_spec:該字段定義希望加載的文件系統所在的設備或遠程文件系統,對於nfs這個參數一般設置為這樣:192.168.0.1:/NFS 
fs_file:本地的掛載點 
fs_type:對於NFS來說這個字段只要設置成nfs就可以了 
fs_options:掛載的參數,可以使用的參數可以參考上面的mount參數。 
fs_dump - 該選項被"dump"命令使用來檢查一個文件系統應該以多快頻率進行轉儲,若不需要轉儲就設置該字段為0 
fs_pass - 該字段被fsck命令用來決定在啟動時需要被掃描的文件系統的順序,根文件系統"/"對應該字段的值應該為1,其他文件系統應
該為2。若該文件系統無需在啟動時掃描則設置該字段為0 。 


4、可能出現的問題
rpc超時問題
在服務器上的hosts文件加上了客戶機的ip地址解析。


5、NFS安全 
NFS的不安全性主要體現於以下4個方面: 
1、新手對NFS的訪問控制機制難於做到得心應手,控制目標的精確性難以實現 
2、NFS沒有真正的用戶驗證機制,而只有對RPC/Mount請求的過程驗證機制 
3、較早的NFS可以使未授權用戶獲得有效的文件句柄 
4、在RPC遠程調用中,一個SUID的程序就具有超級用戶權限. 

加強NFS安全的方法: 
1、合理的設定/etc/exports中共享出去的目錄,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT僅僅有最小的權限,最好不要
使用root_squash。 
2、使用IPTABLE防火牆限制能夠連接到NFS SERVER的機器范圍 
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24   --dport 111 -j ACCEPT 
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24   --dport 111 -j ACCEPT 
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8    --dport 111 -j ACCEPT 
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8    --dport 111 -j ACCEPT 
如果我們的NFS服務器在防火牆后邊,則需要在防火強策略中加入如下策略:
iptables -A INPUT -p tcp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
iptables -A INPUT -p udp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
3、為了防止可能的Dos攻擊,需要合理設定NFSD 的COPY數目。 
4、使用 /etc/hosts.allow和/etc/hosts.deny 控制客戶端的訪問
/etc/hosts.allow 
portmap: 192.168.0.0/255.255.255.0 : allow 
portmap: 140.116.44.125         : allow 
/etc/hosts.deny 
portmap: ALL : deny 
5、改變默認的NFS 端口 
NFS默認使用的是111端口,但同時你也可以使用port參數來改變這個端口,這樣就可以在一定程度上增強安全性。 
6、使用Kerberos V5作為登陸驗證系統


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM