今天收到一份題目:
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
5、啓動rpcbind和nfsyum install nfs-utils
那怎麼查看rpcbind和nfs的狀態呢?service rpcbind start
service nfs-server start
或者
systemctl start rpcbind.service(後面的service可以不加)
systemctl start nfs-server.service(後面的service可以不加)
6、配置nfsservice rpcbind status
service nfs-server status
或者
systemctl status rpcbind.service(後面的service可以不加)
systemctl status nfs-server.service(後面的service可以不加)
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命令的用法:showmount -e localhost
或者
showmount -e
showmount [選項]
選項包括:
-a:all ,輸出格式 host:dir 顯示客戶主機名和掛載目錄名
-d:directoty, 輸出格式 dir 只顯示被客戶掛載的目錄名
-e:exports,nfs服務器的輸出清單
-h:help,顯示幫助信息
-v:version,顯示版本信息
8、客戶機配置
只需要開啓rpcbind就可以了。
9、客戶機查看可以掛載的目錄
10、客戶機端開始掛載showmount -e 服務器IP地址
例如:showmount -e 192.168.203.128
mount nfs用法: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 -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掛載的優化
4、nfsd的個數就是設置mount的參數
5、nfsd的隊列長度默認是8個進程,可以通過命令 ps -efl |grep nfsd查看
可以通過命令 cat /proc/net/rpc/nfsd文件的th行,第一個是nfsd個數,後10個是線程用的時間數,第二個到第四個值如果很大,那麼就需要增加nfsd的個數。
具體如下:
vi /etc/sysconfig/nfs
找到RPCNFSDCOUNT,修改該值,一般和client數目一樣,然後再重啓nfs
默認隊列長度可以使用命令查看:
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是永久的,不加重啓後失效
其次,在客戶端也相應的設置防火牆
然後就可以啦