目录
一、什么是NFS服务
1、NFS介绍
NFS(network file system):网络文件系统,功能是可以让不同的主机,不同的操作系统通过网络共享资源。在NFS服务中,如果NFS客户端有相应读写的权限,则可以读写远端NFS服务器的上的资源,并且可以将文件挂载在本地目录上,挂载之后这个目录看起来如同自己的磁盘分区一般,示例如下图。
当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。
2、RPC服务
RPC(Remote Procedure Call)即远程过程调用。NFS这个服务器的端口是2049,但由于文件系统非常复杂的,因此NFS还有其他额外的端口需要启动,这些额外的用来传输数据的端口是随机选择的,既然端口是随机的,那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢。RPC 最主要的功能就是在指定每个 NFS 功能所对应的端口 ,并且通知客户端,让客户端可以连结到正确的端口上去。
3、NFS通讯流程
1)首先服务器端启动RPC服务,并开启111端口。
2)服务器端启动NFS服务,并向RPC注册端口信息。
3)客户端启动RPC服务,向服务端的RPC服务请求服务端的NFS端口。
4)服务端的RPC服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS端口连接并进行数据的传输。
示例图如下:
二、实验展示
1、安装包并创建共享文件
yum -y install nfs-utils rpcbind
systemctl start nfs-server rpcbind
mkdir /data/nfs1
touch /data/nfs1/a.txt
2、NFS配置文件
2.1 配置文件格式
/dir 主机1(opt1,opt2) 主机2(opt1,opt2)......
/dir:表示要共享的文件夹
主机:要共享给哪些主机
主机表示格式:
opt:参数,如下
2.2 配置文件
vim /etc/exports
重新使配置文件生效并显示已存在的共享
远程主机配置
yum -y install nfs-utils rpcbind
systemctl start nfs-utils rpcbind
showmount -e 192.168.204.128 #查看远程主机的共享文件
mount 192.168.204.128:/data/nfs1 /mnt #临时挂载文件
用命令df可查看挂载情况
挂载成功后,便可在远程主机上的/mnt目录下看到服务端的共享文件。
2.3 授予远程主机对共享文件的读写权限
第一步:更改NFS服务端的配置文件
vim /etc/exports
exportfs -v #使配置文件重新生效
改完后,远程主机就有了对共享文件的读写权限
第二步:更改NFS服务端共享文件目录的权限
共享文件目录权限如下:
在远程主机上更改目录下的文件时,会遇到权限拒绝的问题,即使在远程主机上以root用户登录,但映射到NFS服务端会变成nobody用户,因此对于共享文件的目录来说,属于others,因此不能更改目录里的文件。
可以通过更改权限或目录所有者来解决。
NFS服务端:
远程主机:
至此,NFS网络文件共享服务大致如上。
2.4 远程主机和NFS服务端间的账号映射问题
默认情况下,远程主机上的root账号会映射成NFS服务端的nobody用户。而普通账号会根据uid进行映射,比如远程主机上chen用户uid为1001,映射到NFS服务端的用户uid也为1001。示例图如下:
远程主机上:
NFS服务端:
当然所有账号可以映射为统一账号,更改NFS服务端的配置文件即可
vim /etc/exports
在里面写入
/data/nfs1 *(rw,all_squash,anonuid=88,anongid=88)
上行代码是示例将所有用户映射为uid和gid都为88的用户,还有更多参数可参考上文中列出的opt参数