《linux學習》之NFS的測試

今天收到一份題目:

1. Please create a test plan to test NFS(Network File System)
2. Please design then implement 3~5 test cases through python/shell
====================================================================================================================================

那麼我對NFS一無所知。

計劃如下:

day1:

1、弄明白什麼是NFS

2、實際操作下

day2:

1、弄明白怎麼測試NFS

測試哪些功能、有哪些測試節點、(待完善)

2、寫一個初步簡單的測試plan

day3:

修改

day4:

修改

day5:

練習講解

====================================================================================================================================

Day1:

1、什麼是NFS

待會再寫

2、需要安裝的軟件

3、NFS的配置文件

查看了一下nfs的配置文件 /etc/exports


第6行表示:對/srv/homes這個共享文件,hostname1具有讀寫權限(rw)、同步寫入到內存與硬盤(sync)、不檢查子目錄(no_subtree_check),hostname2具有隻讀權限(ro)、同步寫入到內存與硬盤(sync)、不檢查子目錄(no_subtree_check)

第10行表示:對共享文件/srv/nfs4這個共享文件,gss/krb5i具有讀寫權限(rw),同步寫入到內存與硬盤(sync)、只能共享一個目錄(fsid=0,表示只能共享一個目錄,這個目錄將還成爲NFS服務器的根目錄???)、crossmnt(????)、不檢查子目錄(no_subtree_check)

對共享文件/srv/nfs4/home這個共享文件,gss/krb5i具有讀寫權限(rw),同步寫入到內存與硬盤(sync)、不檢查子目錄(no_subtree_check)

4、啓動NFS

5、聯機觀察

6、防火牆


7、NFS客戶端配置

---------------------------------------------------------------------------------

系統:ubuntu 16.04

1、檢查是否安裝 rpcbind

dpkg -s rpcbind

結果,未安裝

2、安裝 rpcbind

sudo apt-get install rpcbind

3、檢查是否安裝nfs-kernel-server(centos等系統中是nfs-utils)

dpkg -s nfs-kernel-server

未安裝

4、安裝 nfs-kernel-server

sudo apt-get install nfs-kernel-server

5、配置NFS,/etc/exports進行配置

新建共享文件:

mkdir /home/test

更改/etc/exports:

vim /etc/exports

內容爲:

/home/test 10.108.199.122



6、配置完畢後,啓動NFS

/etc/init.d/rpcbind    #rpcbind不需要設定,直接啓動就可以,啓動後會出現

/etc/init.d/nfs-kernel-server  #

/etc/init.d/nfslock start(這個ubuntu裏沒有,就不用弄了)

看看NFS到底開了那些端口

netstat -tulnp| grep -E 'rpc|nfs-kernel-server'

查看每個RPC服務的註冊情況,

rpcinfo -p localhost


7、NFS服務器設置好了,在服務器端自我測試一下是否可以聯機

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

配置的基本步驟:

1、檢查是否安裝 rpcbind

rpm -qa rpcbind

結果,未安裝

2、安裝 rpcbind

 yum install rpcbind

3、檢查是否安裝nfs-utils(Ubuntu系統中是nfs-kernel-server)

dpkg -qa nfs-utils

未安裝

4、安裝 nfs-nfs-utils

yum install nfs-utils

5、啓動rpcbind和nfs

service rpcbind  start

service nfs-server start 

或者

systemctl start rpcbind.service(後面的service可以不加)

 systemctl start nfs-server.service(後面的service可以不加)


     那怎麼查看rpcbind和nfs的狀態呢?

service rpcbind  status

service nfs-server status

或者

systemctl status rpcbind.service(後面的service可以不加)

 systemctl status nfs-server.service(後面的service可以不加)


6、配置nfs

nfs的主要配置文件有 /etc/exports,/etc/hosts.allow 、/etc/hosts.deny、/etc/fstab,一般只需要配置/etc/exports就行了。

1) /etc/exports,

配置 /etc/exports:

格式:

要共享的目錄     可用的客戶端主機地址(參數1,參數2,參數3,.......)

可用的客戶端主機地址:可以有多種形式

192.168.203.129      指定IP地址的主機 

nfsclinet.test.com      指定域名的主機

192.168.203.0/24     指定網段中的主機

*.test.com                    指定域下的所有主機

*                                    所有主機

各個參數之間用逗號隔開,參數包括:

讀寫權限:只能選擇其中一個使用

rw---讀寫

ro----只讀

是否同步寫入磁盤:同步寫入不會輕易丟失數據,建議所有的共享目錄都是用此選項。

sync-----同步寫入磁盤

nosync-----不同步寫入磁盤

匿名:anonuid,anongid

壓縮root 用戶:no_root_squash,root_squash

insecure/secure:insecure是指允許從這臺機器過來的非授權訪問

2)/etc/hosts.allow 和/etc/hosts.deny

這兩個文件是指定網絡上哪些計算機可以使用nfs服務,該文件的每一條目錄,指定一個服務和一個主機。

當一個主機申請訪問nfs時,首先會檢查/etc/hosts.allow,如果匹配,則允許訪問,如果不匹配則去檢查/etc/hosts.deny,如果匹配則拒絕,如果都不匹配,則允許。

例如:要配置只有192.168.203.129的主機能訪問nfs,其他的都不能訪問,可以這麼配置

在/etc/hosts.allow裏配置:

portmap:192.168.203.129

locked:192.168.203.129

mountd:192.168.203.129

rquotad:192.168.203.129

statd:192.168.203.129

在/etc/hosts.deny裏配置:

portmap:ALL

locked:ALL

mountd:ALL

rquotad:ALL

statd:ALL

配置好exports文件後,有兩種方法可以使配置生效:

重新啓動nfs使配置生效---這樣比較麻煩

使用exportfs-------------exportfs  [選項]

選項有:-a:全部掛載或卸載/etc/exports裏面的設定

   -r:重新掛載

   -u:卸載某一目錄

   -v:使目錄顯示在屏幕上

這幾個選項可以混搭,但 -a和-u不能同時使用

一般用的是   exportfs -arv

7、配置好後,查看是否有共享目錄

showmount -e localhost

或者

showmount -e


     showmount命令的用法:

showmount  [選項]

選項包括:

-a:all ,輸出格式 host:dir         顯示客戶主機名和掛載目錄名

-d:directoty, 輸出格式 dir      只顯示被客戶掛載的目錄名

-e:exports,nfs服務器的輸出清單

-h:help,顯示幫助信息

-v:version,顯示版本信息

  8、客戶機配置

只需要開啓rpcbind就可以了。

9、客戶機查看可以掛載的目錄

showmount  -e 服務器IP地址

例如:showmount  -e  192.168.203.128

10、客戶機端開始掛載

mount   -t   nfs   -o   nolock,nfsvers=3,vers=3    服務器IP:目錄  本地目錄

例如:mount   -t   nfs   -o   nolock,nfsvers=3,vers=3    192.168.203.128:/home/public    /home/nfs/share

        mount nfs用法:

mount  -t  nfs -o 參數   服務器IP:目錄  本地目錄

可選參數有:

                    hard/soft(默認soft):  hard-------client會不斷嘗試與server連接,直到mount上(在後臺)

                                                                soft--------client在前臺與server連接,收到錯誤信息後終止。

                                                               使用哪種取決於你要傳輸什麼信息。比如你需要運行X program,不希望由於網絡問題顯示出一大堆錯誤信息,這就可以用                                                          hard模式,在後臺不斷嘗試連接;如果你傳輸FTP數據,可以採用soft方式。

                  rsize和wsize(默認v2版本是4k,v3不知道):文件傳輸尺寸,v3版本沒有限制,v2版本限制最多爲8k。

                                             這兩個的大小影響nfs的傳輸性能。

                  bg/fg(默認是fg):bg----------background 如果連接不上,會轉移至後臺繼續mount,直到mount上;

                                                      fg-----------fontground 

                 nfsvers和vers(默認是2):用來指定用nfs的哪個版本,這還要取決於服NFS支持哪個版本

                 mountport:設定mount的端口

                 port:取決於server端的鍛口,如果server端使用555輸出NFS,client端也要使用555

                 timeo=n(默認是7/10,0.7秒):設置超時時間。

                 intr:允許通知中斷一個NFS的調用,當服務器沒反應時可以用它中斷。

                 UDP/TCP:採用udp或者tcp作爲nfs傳輸協議。

                 namelen=n(默認值255):遠程服務器所允許的最長文件名。

網絡不穩定時可以採用hard、增大timeo、intr參數。

11、客戶節卸載

umount  本地目錄

--------------------------------------

可能出現的問題及解決方案:

--------------------------------------

1、連接不上,可以用ping看服務器和客戶機網絡是否通,如果不通,可能是防火牆的問題,應該關閉防火牆或者把NFS所需要的端口打開。

2、改完exports後,要記得使用exportfs  -arv使更改生效。

3、還要注意在本地建立好掛載點。

------------------------

NFS的安全問題:

------------------------

安全問題主要從兩方面來控制:

1、限制rpc服務的訪問

1)使用TCP_Wrappers

2)使用防火牆firewall

      默認狀態下,傳輸端口有:rpcbind----111

                                                      nfs----2049

    NFS使用的端口是由rpcbind動態分配的,在創建防火牆規則時會造成問題(因爲你不知道到底使用的哪個端口)。不過,可以通過指定端口不讓rpcbind動態分配,具體的,更改/etc/sysconfig/nfs文件,裏面有要使用的端口:

MOUNTD_PORT:用於掛載的TCP和UDP端口(rpc.mountd)

STATD_PORT:用於顯示TCP和UDP狀態的端口(rpc.statd)

LOCKD_TCPPORT:用於nlockmgr的TCP端口(rpc.lockd)

LOCKD_UDPPORT:用於nlockmgr的UDP端口(rpc.lockd)

指定的端口號不能用於其他服務。

在NFS服務器上運行rpcbind  -p命令,可以查看使用的端口和RPC程序。

2、控制文件系統的導出權限

1)使用showmount -e檢查exports裏的語法錯誤

      在配置exports文件時多加註意,不要添加額外的空格。

              2)把開放目錄設置爲只讀權限

              3)禁止對某些目錄的訪問

                   比如希望開放/home/public目錄的訪問,但是不希望開放其子目錄/home/public/test的訪問,可以使用noaccess限制子目錄的訪問。

                   /home/public    weblab-??.nitec.com(ro)

                  /home/public/test    weblab-??.nitec.com(ro)

                   (??代表任意字符)

             4)root_squash

             5)使用nosuid和noexec選項

                   suid和sgid程序可以讓普通用戶以超過自己的權限形式執行。很多SUID/SGID可執行程序是必須的,比如passwd程序。這樣一些惡意用戶會利用這些程序搞破壞。

                  可以使用以下命令找到這種程序:

                 find   /    \(  -perm   -4000  -o   -2000  )\    

                 使用者必須查看這一列表,儘量減少那些所有者是root或者是在root組中卻擁有SUID/SGID屬性的文件,刪除或對其屬性進行修改。

                 使用nosuid選項禁止set-uid文件在NFS服務器上運行。

-----------------------------------------------------------------------------------------

NFS的優化問題:

參考:http://www.2cto.com/os/201110/109334.html點擊打開鏈接

http://www.cnblogs.com/derekchen/archive/2013/01/17/2865207.html點擊打開鏈接

------------------------------------------------------------------------------------------

1、設置塊大小

     mount參數中的wsize和rsize指定了server和client端的傳輸的塊大小。

    wsize和rsize的大小影響NFS的傳輸性能,可以用dd命令測試

   time dd  if =/dev/zero   of=/testfs/testfile  bs=8k, count=1024   測試NFS寫

   time dd  if =/testfs/testfile   of=/dev/null   bs=8k                           測試NFS讀

   測試的文件大小是  bs*count,該文件大小最好是系統RAM的兩倍。

   每次測試時都使用mount和umount進行掛載和卸載,通過比較不同的wsize和rsize的大小,得到優化的wsize和rsize的大小。

2、網絡傳輸包的大小

 網絡在包傳輸過程中,要對包進行分組,過大或者過小都不能很好的利用網絡的帶寬,所以要對網絡進行測試和調優。

使用命令ping -s 2048 -f  hostname進行ping,嘗試不同的package大小,這樣可以看到包丟失情況,同時可以使用nfsstat -o net測試使用udp傳輸時丟包的多少,這個統計不能清零,所以要先運行此命令把結果記錄下來,然後運行再次統計。

如果上述統計丟包太多,那麼可以看看網絡傳輸包的大小:

使用命令  tracepath node1/端口號

                 ifconfig  eth0

比較網卡的mtu和剛剛的pmtu,使用 ifconfig eth0 mtu 16436設置網卡的mtu和測試的結果一致。(MTU:最大傳輸單元(maximum transfer unit),每個網絡都存在MTU,如果數據包大於MTU,路由器會將該數據包分成多個小的數據包,影響NFS的性能)

如果risize和wsize比mtu的值大,那麼的話,server端的包傳到client端就要進行重組,這是要消耗client端的cpu資源。此外,包重組可能導致網絡的不可信和丟包,任何的丟包都會是的rpc請求重新傳輸,rpc請求的重傳有會導致超時,嚴重降低nfs的性能。

             可以使用命令:cat   /proc/sys/net/ipv4/ipfrag_high_thresh

                                        cat    /proc/sys/net/ipv4/ipfrag_low_thresh

            查看系統可以處理的包的數目,如果包達到了ipfrag_high_thresh,那麼系統就會丟包 ,直到包的數目達到ipfrag_low_thresh(另一種說法:未經處理的UDP報文碎片到達最大值,內核會丟棄正在送入的報文碎片,也就是會丟失報文,直到達到下限)

3、nfs掛載的優化

就是設置mount的參數

4、nfsd的個數

默認是8個進程,可以通過命令  ps -efl   |grep  nfsd查看

可以通過命令 cat  /proc/net/rpc/nfsd文件的th行,第一個是nfsd個數,後10個是線程用的時間數,第二個到第四個值如果很大,那麼就需要增加nfsd的個數。

具體如下:

vi /etc/sysconfig/nfs

找到RPCNFSDCOUNT,修改該值,一般和client數目一樣,然後再重啓nfs

5、nfsd的隊列長度

默認隊列長度可以使用命令查看:

cat    /proc/sys/net/core/rmem_default

cat    /proc/sys/net/core/rmem_max

cat    /proc/sys/net/core/wmem_default

/cat    proc/sys/net/core/wmem_max

可以使用如下命令更改:(262144是256k,不知道這個數怎麼來的)

echo 262144 >  /proc/sys/net/core/rmem_default

echo 262144 >  /proc/sys/net/core/rmem_max

echo 262144 >  /proc/sys/net/core/wmem_default

echo 262144 >  /proc/sys/net/core/wmem_max


6、nfsstat可以查看

查看NFS的運行狀態,對於調整NFS的運行有很大幫助,

7、


http://blog.csdn.net/anghlq/article/details/8532312點擊打開鏈接

這個待看



新建共享文件:

mkdir /home/test

更改/etc/exports:

vim /etc/exports

內容爲:

/home/test 10.108.199.122


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、進行功能測試

1.1 測試要點:

(1)功能1:是否能進行共享、

(2)功能2:是否每個客戶端的權限設置符合要求

權限包括:a、讀寫權限

      b、網域權限

      c、使用者權限

      d、所屬羣組權限

      e、匿名權限

(功能1的測試可以包含在功能2中)

1.2 測試方案

1.2.1總體方案

服務器端設置不同的共享目錄,這些共享目錄針對不同網域、不同用戶、不同羣組分別設置不同的讀寫權限;

不同客戶端掛載該共享目錄到各自的掛載點,並對這些共享目錄進行讀寫操作,看是否與服務器端預設權限一致。

需要特別注意的是:root用戶的權限設置。

1.2.2具體方案

(1)針對root用戶,讓root用戶在共享目錄中保留root權限,測試是否具有root權限;

(2)針對一段網域,讓處於該網域的主機可以讀寫,其他的只能讀,測試是否該網域的主機可以讀寫,其他的只能讀;

(3)針對一個羣組,讓屬於該羣組的用戶可以讀寫,其他的只讀,測試是否該羣組的用戶可以讀寫,其他的只讀;

(4)針對特定用戶,該特定用戶可以讀寫,其他的不能讀寫,測試是否特定用戶可以讀寫,其他的不能讀寫;

(5)針對匿名登錄,讓所有訪問者匿名爲一個用戶,測試是否訪問者匿名爲指定用戶。

測試用例:

測試環境:

centos7.0 ;服務器IP 192.168.203.128;客戶端1的IP 192.168.203.129;客戶端2的IP 192.168.204.1

1、 服務器端在/etc/exports設置分享目錄如下:       

(1)針對1.2.2中的(1),設置共享目錄/tmp :所有主機都可以讀寫,且root用戶保留root權限;

(2)針對1.2.2中的(2),設置共享目錄/tmp :網域192.168.203.0/24所有主機都可以讀寫,其他的只讀;

(2)針對1.2.2中的(3),設置共享目錄/home/public: 對網域192.168.203.0/24中的用戶並且加入mygroup這個羣組的具有讀寫權限,其他用戶只能讀;

(3)針對1.2.2中的(4),設置共享目錄/home/myown:只給192.168.203.129中且使用者是youyou才能讀寫;

(4)針對1.2.2中的(5),設置共享目錄/home/anontest:網域192.168.203.0/24網域中的用戶可以讀寫,但寫入時UID和GID都變成45這個身份的使用者(100這個身份的使用者羣組名和用戶名爲45)。

2、建立每個目錄的實際linux權限

3、客戶端1:

    建立掛載目錄

(1)對/tmp:以root身份登錄,進行chmod操作,看是否成功;

(2)對/home/public:使用用戶youyou(屬於mygroup這個羣組)登錄,在共享目錄中建立文件,看是否成功;

          使用用戶root(不屬於mygroup這個羣組)登錄,在共享目錄中建立文件,看是否成功;

(3)對/home/myown:使用youyou用戶登錄,在共享目錄中建立文件,看是否成功;

         使用root用戶登錄,在共享目錄中建立文件,看是否成功;

(4)對/home/anontest:使用用戶youyou登錄,在共享目錄中建立文件,並查看該文件的UID、GID、用戶名和羣組名。

4、客戶端2:

(1)以root身份登錄,進行vi操作,看是否成功。

預期結果:

客戶端1:

(1)成功

(2)youyou成功;root失敗;

(3)youyou成功;root失敗;

(4)該文件的UID=45,GID=45,用戶名和羣組名都是nfsanon。

客戶端2:

    失敗

    網絡不可達


2、安全性測試

NFS的不安全性主要體現於以下4個方面: 

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

防火牆:

首先,更改端口爲特定值,

新的版本中centos7,nfs相應的端口已經被固定了,可以在/etc/services查看,用到的也就三個端口,nfs,mountd,rpcbind,也可以使用命令 rpcbind -p查看,得到相應的端口後,在防火牆設置開啓這些端口,

firewall-cmd --permanent  --add-service=mountd

firewall-cmd --permanent  --add-service=nfs

firewall-cmd --permanent  --add-service=rpcbind

firewall-cmd --reload

permanent是永久的,不加重啓後失效

其次,在客戶端也相應的設置防火牆

然後就可以啦


發佈了34 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章