★客户端mount挂载优化
在企业生产环境中,NFS客户端挂载的参数有noexec、nosuid、nodev、noatime、rsize、wsize、nodiratime等,
一般来说,NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性,例如:很多木马修改站点文件都是由上传入口上传的程序存储目录,然后执行,因此在挂载时,用下面的命令是有必要的,
普遍安全挂载参数:
mount-t nfs -o nosuid,noexec,nodev,rw 192.168.1.121:/data/bbs /mnt
挂载的读写缓存
wsize和rsize写和读缓存
wsize和rsize的最大值
NFSV2 rsize=8192 wsize=8192
NFSV3 rsize=32768 wsize=32768
NFSV4 rsize=65536 wsize=65536
现在一般centos5.8以上的系统都己经增加了读写缓存,如需修改可以加以上参数
例如:
mount -t nfs -onoexec,nosuid,nodev,rw,rsize=65536,wsize=65536 192.168.1.121:/data/bbs /mnt
★mount的一些常用挂载优化参数:
wsize和rsize写和读缓存
async 数据不同步写到磁盘,提高性参,但降低数据安全,不推荐使用
noatime和nodiratime这两个选是说在读写磁盘时,不更新文件和目录的时间戳,而更新文件时间戳对于工作数据必要性不大,增加了磁盘IO的次数,拖慢系统性参,
defaults 这个缺省值包括rw,suid,dev,exec,auto,nouser,and async cat /etc/fstab的结果默认大部人都是缺省值
noauto 不会自动挂载文件系统
noexec 不允许安装的直接执行任何二进制文件
ro 挂载一个只读文件系统
rw 挂载一个可写的文件系统
sync 把数据同步写入硬盘
nosuid 不允许设置用户标识或设置组标识符位
nodev 不解释字符或文件块特殊设备
intr 表示可以中断
★企业生产环境中nfs性参优化挂载例子:
mount -t nfs -o noatime,nodiratime192.168.1.121:/data/bbs /mnt
mount -t nfs -onosuid,noexec,nodev,noatime,nodiratime,intr,rsize=65536,wsize=65536192.168.1.121:/data/bbs /mnt
mount.nfs: /mnt is busy or already mounted
如果是本地系统:
mount -odefaults,async,noatime,data=writeback,barrier=0 /dev/sdb1 /mnt
data=writeback,barrier=0 是日志文件系统的优化
提示:本地文件系统挂载如果加nodiratime会报错,
★查看挂载的参数
[root@Centos64-131-client ~]# mount |grep ‘\<nfs\>‘ sunrpc on /var/lib/nfs/rpc_pipefs typerpc_pipefs (rw) 192.168.221.130:/data/r_shared on /data/b_rtype nfs (rw,vers=4,addr=192.168.221.130,clientaddr=192.168.221.131) 192.168.221.130:/data/w_shared on /data/b_wtype nfs (rw,noexec,nosuid,nodev,vers=4,addr=192.168.221.130,clientaddr=192.168.221.131)
★加优化参数和不加的数据写入测试
服务端环境:
[root@64server1bbs]# cat /etc/redhat-release CentOSrelease 6.4 (Final) [root@64server1bbs]# uname -r 6.32-358.el6.x86_64 [root@64server1 bbs]# cat /etc/exports /data/bbs 192.168.1.129(rw,sync)
客户端:
[root@64client /]# showmount -e 192.168.1.121 Export list for192.168.1.121: /data/bbs 192.168.1.129
使用普通挂载:
[root@64client /]# mount -t nfs 192.168.1.121:/data/bbs /mnt [root@64client /]# df Filesystem 1K-blocks Used Available Use%Mounted on /dev/sda3 18375548 1513220 15928904 9% / tmpfs 118188 0 118188 0% /dev/shm /dev/sda1 198337 28568 159529 16% /boot 192.168.1.121:/data/bbs 18375552 1512576 15929568 9% /mnt
测试单个文件写入速度:
[root@64client /]# time dd if=/dev/zero of=/mnt/dingjianfile bs=9kcount=2000 2000+0 records in 2000+0 records out 18432000 bytes (18 MB) copied, 0.710564 s, 25.9 MB/s real 0m0.739s user 0m0.003s sys 0m0.102s
命令详解:
time 用于计时(real实际耗时,user用户态耗时,sys系统态耗时)
dd 用于复制,从if读出(input file),写到of(outputfile)。
if=/dev/zero 不产生IO,因此可以用来测试纯写速度;
同理of=/dev/null不产生IO,可以用来测试纯读速度;
bs 是每次读或写的大小,即一个块的大小;
count 是读写块的数量,相乘就是读写数据量大小,数据量(count)越大越准确,多次测试取平均值。
测试批量创建文件的写入速度 [root@64client/]# time for ((i=1;i<10000;i++));do /bin/cp /bin/touch /mnt/dingjian$i;done real 2m45.471s user 0m1.872s sys 0m49.057s
加优化参数挂载:
[root@64client/]# mount -t nfs -o nosuid,noatime,nodiratime,noexec,nodev,intr,rsize=65536,wsize=65536192.168.1.121:/data/bbs /mnt
测试单个文件写入速度:
[root@64client mnt]# time dd if=/dev/zeroof=/mnt/dingjianfile bs=9k count=2000 2000+0 records in 2000+0 records out 18432000 bytes (18 MB) copied, 0.673286 s,27.4 MB/s real 0m0.701s user 0m0.000s sys 0m0.051s
测试批量文件写入速度
[root@64client mnt]# time for((i=1;i<10000;i++));do /bin/cp /bin/touch /mnt/dingjian$i;done real 3m13.371s user 0m1.759s sys 0m48.442s
★加noexec的安全性测试
测试shell执行
[root@64client mnt]# echo ‘echo`pwd`‘>test.sh [root@64client mnt]# sh test.sh /mnt [root@64client mnt]# chmod 4755/mnt/test.sh [root@64client mnt]# ls -l total 4 -rwsr-xr-x. 1 nfsnobody nfsnobody 11 Feb 1606:55 test.sh [root@64client mnt]# ./test.sh -bash: ./test.sh: Permission denied
测试php
[root@c58-nfs-server ~]#cat /mnt/test.php <?php $get_value02 = “this is oldboytraining”; echo$get_value02 . “\n\; ?> [root@c58-nfs-server ~]#/application/php/bin/php/mnt/test.php this is oldboytraining [root@64clientmnt]# cp /bin/rm /mnt [root@64client mnt]# /mnt/rm / -bash: /mnt/rm: Permission denied
结论:
nosuid,noexec对于shell脚本,php脚本的执行也生效
注意:通过shtest.sh以及/application/php/bin/php /mnt/test.php是可以执行的程序的。
/mnt/test.php /mnt/test.sh即使有执行权限也无法执行
对于二进制程序,如cat 生效
通过mount –o指定挂载参数和在/etc/fstab里指定挂载参数效果是一样的,
★网络文件系统和本地的文件系统并行果也是一样的。
[root@64client /]# vi /etc/fstab # /etc/fstab # Created by anaconda on Thu Jan 9 18:07:20 2014 # # Accessible filesystems, by reference, aremaintained under ‘/dev/disk‘ # See man pages fstab(5), findfs(8),mount(8) and/or blkid(8) for more info # UUID=02835af0-7725-42ec-90a4-b4cf397823c3/ ext4 defaults 1 1 UUID=3350ecad-ac12-4807-966b-f187a32838d6/boot ext4 defaults 1 2 UUID=0ee03381-3521-477c-ac99-703a1a7dbc20swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 192.168.1.121:/data/bbs /mnt nfs defaults,nosuid,noatime,nodiratime,noexec,nodev,intr,rsize=65536,wsize=65536 0 0
★查看当前客户端挂载的参数:
[root@64client ~]# grep mnt /proc/mounts 192.168.1.121:/data/bbs /mnt nfs4rw,nosuid,nodev,noexec,noatime,nodiratime,vers=4,rsize=32768,wsize=32768,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.129,minorversion=0,local_lock=none,addr=192.168.1.1210 0
time是一个计算命令,可以计算一个命令操作时间或者文件的写入时间等
showmount 参数
-e 显示NFS服务器输出的目录列表
-d 显示NFS服务器中提供共享的目录
-a 以ip:/dir格式显示NFS服务器的IP地址和可被挂载的目录
exportfs:NFS服务端发布共享控制命令。
-r:表示重新刷新共享。
-a:表示将配置文件/etc/exports中的所有定义共享发布出去。
-v:显示确认共享设置。
-u:表示不发布共享。
本文出自 “Mr.Xiong`s 运维日志” 博客,请务必保留此出处http://mrxiong2017.blog.51cto.com/12559394/1932602
原文地址:http://mrxiong2017.blog.51cto.com/12559394/1932602