基础知识篇node
NFS是Network File System的简称,它的目的想让不一样的机器,不一样的操做系统能够彼此共享数据文件。web
一、它须要启动PRC+NFS服务,需首先启动RPC,而后启动NFSvim
二、RPC的做用是将服务器中注册的NFS的port number通知给clientbash
三、NFS的端口号通常为2049,但不肯定,缘由是文件系统较为复杂。它用来传输的端口是随机选择且小于1024服务器
1、NFS的文件访问权限
app
一、NFS Server/NFS Client恰好有相同的帐号与用户async
此时用户能够直接以zj(假定为客户端的普通帐号)的身份访问服务器所提供的共享文件系统tcp
二、NFS Server的501这个UID帐号对应为yf(假定为服务端的一个普通帐号)ide
若是客户端的ql(假定为客户端的另外一个普通帐号)刚好对应服务器端的yf,则客户端的ql能够访问服务器端的yf,只由于二者拥有相同的UID。但用户名不相同,因此ql只会以匿名的方式访问yf(可参考补充部分的内容)。提到了这里你可能会想到,那root的UID不都为0吗?这样一来客户端的权限不是很大。然而结果不是这样的。服务器端默认会将客户端的root用户压缩为匿名用户ui
三、若是用户身份是root
在默认的状况下,root的身份会被主动压缩成为匿名用户
四、NFS Server并无501这个UID
此种状况的后果是服务器端将UID为501的这个用户压缩为匿名用户,以匿名用户的身份访问服务器
具有了以上四种条件后,还应该具有如下二种条件
一、NFS服务器已经开放可写入的权限(与/etc/exports文件有关)
二、实际的文件权限具备可写入(w)的权限
总结下来无非此三句话
一、UID与帐户的相关性
二、NFS服务器容许写入的权限
三、文件系统确实具备w的权限,此时你才具备该文件的写入权限
2、/etc/exports配置文件的语法与参数
值得一提的是NFS会直接使用到内核功能,因此内核必需要支持NFS才行。使用uname -r查看其版本
配置文件权限参数
sync 表明数据会同步写入到内存与硬盘中,此种方式速度过慢
async 表明数据会先暂时存放在内存中而后保存在硬盘上,此种方式速度较快
no_root_squash 不将客户端中的root用户压缩为nfsnobody(匿名用户)
root_squash 将客户端中的root用户压缩为nfsnobody(匿名用户)
all_squash 不管是什么用户都将被压缩成为nfsnobody(匿名用户)
anonuid 指的是UID,能够自行指定该值,但必须存在
anongid 指的是UID,能够自行指定该值,但必须存在
3、mount命令主要参数
suid/nosuid 当挂载的分区上面有任何SUID的二进制程序时,只要使用nosuid就可以取消其功能
rw/ro 提供客户端可写/可读的权限
dev/nodev 是否能够保留设备文件的特殊功能
exec/noexec 是否具备执行二进制文件的权限,视具体的状况而定
user/nouser 是否容许用户进行文件的挂载与卸载操做,最好不容许
auto/noauto 指的是mount -a时,会不会被挂载到项目
注:加粗为默认值
4、额外的NFS挂载功能
fg/bg:指定挂载的行为为fg(前台)仍是bg(后台)
soft/hard :当某台主机脱机时RPC的呼叫方式soft(重复呼叫)、hard(持续呼叫)
intr:它与上面的hard连用,加此参数,当RPC持续呼叫时,该次呼叫是能够被中断的
rsize/wsize :rsize(读出)与wsize(写入)的区块大小,它影响着C/S传输数据的缓冲记忆容易(二者的值均为1024)
注:加粗为默认值
5、没法挂载的缘由分析
一、客户端的主机名或IP网段不容许被使用
二、服务器或客户端某些服务未启动
三、被防火墙拦截
实验配置篇
基本配置:
一、服务端的配置 [root@web1 ~]#mkdir /shared [root@web1 ~]#vim /etc/exports /shared 172.16.0.11(rw) [root@web1 ~]#service nfs restart [root@web1 ~]#service iptables stop [root@web1 ~]#setenforce 0
二、客户端的配置 [root@web2 ~]#mkdir /mnt/nfs [root@web2 ~]#service iptables stop [root@web2 ~]#setenforce 0 [root@web2 ~]#mount -t nfs 172.16.0.10:/shared /mnt/nfs [root@web2 ~]# df Filesystem 1K-blocks Used Available Use% Mounted on 172.16.0.10:/shared 10190208 470144 9195776 5% /mnt/nfs
三、结果验证 [root@web1 ~]#cp /etc/inittab /shared [root@web2 ~]#ls /mnt/nfs inittab
匿名访问的状况:
gnnt.web1.com:服务器 gnnt.web2.com:客户端 一、开放匿名访问的状况 [root@web1 ~]#groupadd -g 45 nfsanon [root@web1 ~]#useradd -u 45 -g nfsanon nfsanon [root@web1 ~]#mkdir /public [root@web1 ~]#setfacl -m u:nfsanon:rwx /public [root@web1 ~]#getfacl /public getfacl: Removing leading '/' from absolute path names # file: public # owner: root # group: root user::rwx user:nfsanon:rwx group::r-x mask::rwx other::r-x [root@web1 ~]#vim /etc/exports /public *.gnnt.com(rw,all_squash,anonuid=45,anongid=45) [root@web1 ~]#exportfs -arv #保存配置文件,不用重启也可生效 #-a:所有挂载或卸载/etc/exports文件中的设置 #-r:从新挂载/etc/exports里面的设置,此外,也同步更新/etc/exports及/var/lib/nfs/xtab内容 #-v:在export的时候,将共享的目录显示到屏幕上 #-u:卸载某一目录
二、显示exports共享信息 [root@web1 ~]# showmount -e localhost #显示exports所共享的目录数据,经常使用于客户端 Export list for localhost: /public *.gnnt.com /tmp 172.16.0.11 /shared 172.16.0.11
三、查看etab文件 [root@web1 ~]# cat /var/lib/nfs/etab /tmp172.16.0.11(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534) /shared172.16.0.11(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534) /public*.gnnt.com(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=45,anongid=45)
四、查看NFS开启哪些端口 [root@web1 ~]# netstat -tulnp|grep -E '(rpc|nfs)'
五、查看本机rpc服务注册状况 [root@web1 ~]# rpcinfo -p localhost program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 53456 status 100024 1 tcp 51270 status 100011 1 udp 875 rquotad 100011 2 udp 875 rquotad 100011 1 tcp 875 rquotad 100011 2 tcp 875 rquotad 100005 1 udp 60789 mountd 100005 1 tcp 52694 mountd 100005 2 udp 48954 mountd 100005 2 tcp 53781 mountd 100005 3 udp 40201 mountd 100005 3 tcp 34867 mountd 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 2 tcp 2049 nfs_acl 100227 3 tcp 2049 nfs_acl 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 2 udp 2049 nfs_acl 100227 3 udp 2049 nfs_acl 100021 1 udp 35388 nlockmgr 100021 3 udp 35388 nlockmgr 100021 4 udp 35388 nlockmgr 100021 1 tcp 58204 nlockmgr 100021 3 tcp 58204 nlockmgr 100021 4 tcp 58204 nlockmgr
六、检查相关软件版本信息(仅查看TCP数据包) [root@web1 ~]# rpcinfo -t localhost nfs program 100003 version 2 ready and waiting program 100003 version 3 ready and waiting program 100003 version 4 ready and waiting
补充
服务器端与客户端UID不一致时的结果:
[root@web1 ~]# cat /etc/passwd|grep yf yf:x:500:500:yf:/home/yf:/bin/bash [root@web2 ~]# cat /etc/passwd|grep ql ql:x:500:500::/home/ql:/bin/bash [root@web2 ~]# ll /mnt/nfs1 total 8 -rwxr-xr-x. 1 nobody nobody 6878 Aug 15 16:54 nfs #由于使用的root用户,默认状况下将客户端的root用户压缩为匿名用户 [root@web2 ~]# su - ql [ql@web2 ~]$ ll /mnt/nfs1 total 8 -rwxr-xr-x. 1 nobody nobody 6878 Aug 15 16:54 nfs #UID同为500的不是同一个用户,因此将ql压缩为匿名用户
至此,本文档已经结束,文档中不免有不尽人意之处,但愿各位可以给出宝贵的建议,谢谢!
紫禁之巅
2015年8月28日 17:50