《linux学习》之NFS的测试

来源:互联网 发布:ansys软件配置要求 编辑:程序博客网 时间:2024/06/14 00:11

今天收到一份题目:

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是永久的,不加重启后失效

其次,在客户端也相应的设置防火墙

然后就可以啦


0 0
原创粉丝点击