NFS共享存储

163 阅读3分钟

NFS

NFS(Network File System)即网络共享文件系统,通过网络让不同主机之间实现文件或目录的共享。NFS是C/S架构,服务端负责共享,客户端负责挂载。因为NFS服务在启动时会随机的启动端口,所以NFS的实现需要RPC服务的支持,当NFS服务开启时,自动的像RPC服务进行注册,以此来正确反应客户端的请求。

NFS工作流程

  • 服务端开启RPC服务,来记录NFS每个功能所对应的端口
  • NFS服务启动随机开启端口,想RPC服务注册端口信息。
  • RPC监听111端口,监听NFS客户端发送的请求,将正确的NFS端口返回给NFS客户端。 PS:服务端先启动RPC,然后再启动NFS,客户端只需要安装nfs来识别文件系统。

服务端部署

安装nfs与rpc

yum install -y nfs-utils rpcbind

修改nfs配置文件

[root@10 ~]# cat /etc/exports
/nfs_data	172.16.1.0/24(rw,sync)

创建存储目录

mkdir /nfs_data
chown -R nfsnobody.nfsnobody /nfs_data/

启动RPC服务

systemctl start rpcbind.service

启动NFS服务

systemctl start nfs

查看NFS状况

exportfs

客户端部署

安装nfs

yum -y install nfs-utils

挂载

mount -t nfs 172.16.1.31:/nfs_data  /mnt

检查挂载情况

[root@10 ~]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    898M     0  898M   0% /dev
tmpfs                       910M     0  910M   0% /dev/shm
tmpfs                       910M  9.6M  901M   2% /run
tmpfs                       910M     0  910M   0% /sys/fs/cgroup
/dev/mapper/centos_10-root   17G  1.7G   16G  10% /
/dev/sda1                  1014M  150M  865M  15% /boot
tmpfs                       182M     0  182M   0% /run/user/0
172.16.1.31:/nfs_data        17G  1.7G   16G  10% /mnt

至此,nfs的简单部署完成,但这只是最基本,接下来对nfs的配置进行详细的解释。

NFS权限配置详解

NFS的权限与三个因素相关

  • 存储目录的本身权限
  • 配置文件中的权限
  • 客户端挂载命令的参数权限 存储目录的权限即是文件的权限设置,客户端挂载权限的设置,即在使用mount进行挂载时附带的权限,本次讲解nfs配置中的权限设置,后文会给出例子。

NFS配置权限

在启动nfs服务的时候,系统会自带一些默认权限设置,首先查看nfs的默认权限配置。

[root@10 /]# cat /var/lib/nfs/etab
/nfs_data	172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)

如上为nfs服务自带权限,下面针对主要权限进行解析。

  • rw:存储目录读写权限
  • ro:存储目录只读权限
  • sync:同步方式存储数据,直接将数据保存到磁盘,数据存储安全
  • async:异步方式存储数据,直接将数据保存在内存中,提高数据保存效率
  • root_squash:将root身份进行转换
  • no_root_squash:不将root身份进行转换
  • all_squash:将所有用户身份转换
  • no_all_squash:所有用户身份不进行转换

权限案例

根据nfs服务默认参数,root_squash会将root用户转换为uid=65534(nfsnobody)用户,其余非root用户不会转换

| 存储目录 | 权限 | 属主属组 | 客户端用户 | 设置 | 映射用户 | 状态 | | --- | --- | --- | --- | --- | --- --- | | nfs_data | 000 | nfs_data | root | root_squash | nfsnobody | 无权限 | | nfs_data | 700 | nfs_data | root | root_squash | nfsnobody | 读写 | | nfs_data | 750 | nfs_data | nfs | no_all_squash | nfs | 无权限 | | nfs_data | 755 | nfs_data | nfs | no_all_squash | nfs | 只读 | | nfs_data | 755 | nfs_data | nfs | no_all_squash | nfs | 读写 |

如上所示,为nfs默认权限以及存储目录权限搭配的案例,对于用户身份的转换以及映射的用户可以根据自己需求进行相应的更改。

基于安全的角度考虑,大多数情况下开启root_squash。若要实现开机自动挂载,则需要在服务端设置rpc以及nfs服务自启动,在客户端设置开机挂载。