《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
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是永久的,不加重启后失效
其次,在客户端也相应的设置防火墙
然后就可以啦
- 《linux学习》之NFS的测试
- linux学习之nfs
- linux学习之nfs
- linux学习笔记之nfs
- linux学习之服务---NFS配置
- linux基础学习之 nfs挂载
- Linux学习篇第三章之~nfs
- linux之nfs的配置和使用
- linux nfs 学习备忘
- LInux学习笔记 --NFS
- Linux学习 nfs协议
- Linux学习笔记之Centos 6.3下NFS的安装配置
- Linux之NFS共享
- linux之NFS
- Linux之nfs部署
- linux学习之旅(二十三)&NFS网络文件系统
- nfs的安装配置 测试
- 配置 Linux 的 NFS
- 如何随时退出程序
- 一个简单的rpc框架实现(一)
- android的通过context对象读取私有文件
- HDU 1896 Stones
- 白菜之hashCode()方法重写及不同数据类型调用hashCode的方法
- 《linux学习》之NFS的测试
- 混淆
- hd1862 EXCEL排序(结构体加sort快排)
- 使用Glide加载gif
- iOS 动画队列-仿映客刷礼物效果
- Oozie安装总结
- Spring4.x官方参考文档中文版——第21章 Web MVC框架(21)
- 支付6位密码样式
- Android 6.0 运行时权限处理完全解析