天天看點

NFS伺服器配置

NFS伺服器配置

整理修改過的,由于這是早期用的,是以就沒詳細的編輯;但已經比較全了,對于學習linux下nfs的朋友來說,幫助挺大的!

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作為登陸驗證系統

繼續閱讀