NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

NFS原理:NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口口才没有固定住, 而是随机取用一些未被使用的小于 1024 的端口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困扰, 因为客户端得要知道服务器端的相关端口才能够联机吧!此时我们就得需要远程过程调用 (RPC) 的服务啦! RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的埠口上去。 那 RPC 又是如何知道每个 NFS 的埠口呢?这是因为当服务器在启动NFS 时会随机取用数个埠口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并回报客户端正确的埠口, 所以当然可以让 NFS 的启动更为轻松愉快了!

简单点说:1.客户端会向服务器端的 RPC (port 111) 发出 NFS 档案存取功能的询问要求;

     2.服务器端找到对应的已注册的 NFS daemon 埠口后,会回报给客户端;

     3.客户端了解正确的埠口后,就可以直接与 NFS daemon 来联机

注:首次部署当发现多个nfs运行时,直接用yum remove nfs*全卸载,然后再安装

a.安装:

服务器端:yum install -y rpcbind

                yum install -y nfs-utils

客户端:yum install -y nfs-utils

b.服务器端写配置文件

[root@Herry ~]# vim /etc/exports

/houzi 192.168.8.101(rw,sync,no_root_squash)   #/houzi是需要共享的目录

                                                                           #192.168.8.101是客户端IP,也可以是一个网段

                                                                           #括号里的都是权限,客户端对这个共享目录可读可写,同步到磁盘,且不限制客户端root)

c.在服务器端启动rpcbind和nfs-utils服务

/etc/init.d/rpcbind

/etc/init.d/nfs restart

d.客户端挂载共享目录

mount -t nfs -o nolock,nfsvers=3 192.168.8.103:/houzi /data    #192.168.8.103是服务端IP   

#/data是客户端本地的目录

e.服务器端将共享目录权限设置成777

chmod 777 /houzi

f.客户端以root身份进入/data创建文件1.shwKiom1jXi9_iFrSgAACo4R***Fc702.png-wh_50

spacer.gif

客户端以普通用户Mysql进入/data创建文件9.sh

wKiom1jXi_azq1NsAAB5-AZ33ok800.png-wh_50

spacer.gif

服务器端查看:spacer.gifwKioL1jXjBax3W4kAABw-fL3bq8008.png-wh_50

no_root_squash 没有限制客户端的root,客户端以root身份创建的文件,在服务器端文件所属主组都是root;

                         客户端以UID为501的mysql身份去创建文件,服务器端则以UID为501的aop身份对应,如果服务器端没有对应的UID,则直接显示数字;

root_squash :服务器端设置成/houzi 192.168.8.101(rw,sync,root_squash,anonuid=502,anongid=502)

客户端以root权限去写文件时,服务器端就将该文件限制成服务器端502属主属组;

             以普通用户UID为501的Mysql身份去写文件时,服务器端默认将自己的对应的501属主属组aop赋予这个文件。

客户端:wKioL1jXjDTiI6uIAAA22tEvSUk028.png-wh_50

spacer.gif

服务器端:wKiom1jXjFfRImJ0AABJDVbEfuk820.png-wh_50

spacer.gif

all_squash:客户端以root身份创建4.sh,以mysql身份创建5.sh,在服务器端都限制成UID为502的php-fpm

服务器端/etc/exports文件内容/houzi 192.168.8.101(rw,sync,all_squash,anonuid=502,anongid=502)

将客户端所有的用户创建的文件的属主属组都限制成服务器端的502

如图:

客户端wKioL1jXjJ3hoI99AACP8ycyQ7U725.png-wh_50spacer.gif

服务器端:wKiom1jXjLzhCnjjAABBHJ2cCDA290.png-wh_50

spacer.gif

注: 如果同时指定no_root_squash与all_squash 用户将被压缩为 nfsnobody,如果设置了anonuid、anongid将被压缩到所指定的用户与组,即no_root_squash不生效 ;

如果服务器端修改了/etc/exports文件,

a(或者直接exports -arv重新读取/etc/exports内容)则需要重启/etc/init.d/nfs restart;

b.然后再客户端重新挂载共享目录使生效