NFS服务概述和工作原理
通过网络,让各个系统共享彼此文件
NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中
优点:更加便利
NFS 基于网络的文件系统 , 通过网络实现文件的共享 C/S架构
传输数据 , 共享数据 , 默认使用的是TCP 2049端口 , 但是在复杂的场景下使用更多端口(随机生成)
RPC 协议: 用来建立连接 , NFS将随机生成的端口号通知给RPC服务 , 客户端通过访问RPC获得NFS的具体端口
NFS服务器部署和客户端挂载NFS共享的目录
1.安装NFS服务,需要安装两个软件:
1.1rpcbind :RPC主程序,可以将NFS视为RPC下的一个子程序
1.2nfs-utils :NFS主程序,包含rpc.nfsd,rpc.mount两个deamons。这个就是 NFS 服务所需要的主要软件。
2.NFS的相关文件:
2.1/etc/exports:NFS服务的主配置文件,该文件的最主要目的是发布共享目录并为共享目录限制权限。和其他服务的主配置文件一样,绝大部分的配置都是通过编辑该文件完成
2.2/var/lib/nfs/xtab:这个文件主要用来记录客户端与NFS服务器的连接记录,如果想查看哪些客户端曾经连接过NFS服务器,查看该文件即可。
2.3/var/lib/nfs/etab ,主要记录了 NFS 所共享出来的目录的完整权限设定值
1、NFS服务器部署:
要部署NFS服务,必须安装下面两个软件包:nfs-utils:NFS主程序,rpcbind:PRC主程序;
NFS服务器端和Client端都需要这安装这两个软件。
查看NFS软件包:
# rpm -qa | grep -E 'nfs|rpcbind'
安装nfs-utils和rpcbind软件包
# yum -y install nfs-utils rpcbind
2、启动NFS服务
注意:先启动rpc服务,再启动nfs服务。
# systemctl start rpcbind #启动rpc服务
# systemctl enable rpcbind #设置开机启动
启动nfs服务:
# systemctl start nfs #启动nfs服务
# systemctl enable nfs #设置开机启动
3、配置共享文件目录,编辑配置文件:
首先创建共享目录,然后在/etc/exports配置文件中编辑配置即可。
配置文件说明:
NFS服务的主配置文件exports发布共享目录的格式如下:
共享目录 [客户端地址1(权限)] [客户端地址2(权限)]……
客户端指定方式 |
示例 |
使用IP地址指定单一主机 |
10.20.30.40 |
使用IP地址指定范围主机 |
172.16.0.0/16 |
使用IP地址指定范围主机 |
192.168.1.* |
使用域名指定单一主机 |
www.test.com |
使用域名指定范围主机 |
*.test.com或www[1-8].test.com或www?.test.com |
使用通配符指定所有主机 |
* |
NFS权限设置
NFS配置权限设置,即/etc/exports文件配置格式中小括号()里的参数集;
参数 |
说明 |
ro |
设置共享权限为只读 |
rw |
设置共享权限为读写 |
root_squash |
对于访问NFS server共享目录的用户,如果是root的话会被压缩成为nobody用户身份。 |
no_root_squash |
访问nfs server共享目录的用户如果是root的话,它对该目录具有root权限。这个项目极不安全,不建议使用 |
all_squash |
不管访问nfs server共享目录的用户身份如何包括root,它的权限都将被压缩成为匿名用户,同时他们的uid和gid都会变成nobody或nfsnobody账户的uid,gid。在多个nfs客户端同时读写nfs server数据时,这个参数很有用可以确保大家写入的数据的权限是一样的。 但不同系统有可能匿名用户的uid,gid不同。因为此处我们需要服务端和客户端之间的用户是一样的。比如说:服务端指定匿名用户的UID为2000,那么客户端也一定要存在2000这个账号才可以 |
anonuid |
设置匿名账号的UID,说明客户端以什么权限来访问服务端,在默认情况下是nfsnobody。UID 是65534. |
anongid |
同anonuid,就是把uid换成gid而已 |
sync |
请求写入数据时,将数据同步写入内存和硬盘,保证不丢失数据。这可能导致效率降低 |
async |
优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
配置实例:
需要输出的共享目录:
/webroot 目录可读写,并且不限制用户身份,共享给192.168.0.0/24网段所有主机;
/bbs 这个目录仅共享给192.168.0.8这台主机,以供该主机上面的www这个用户来使用,
具体操作如下:
关闭selinux和firewalld防火墙
在nfs服务器和客户端分别创建一个用户
客户端 #useradd -M -s /sbin/nologin -u 2000 www
服务器 # useradd -M -s /sbin/nologin -u 2000 www
在nfs服务端创建要共享输出的目录并设置权限
# mkdir /webroot
# mkdir /bbs
# chmod -R a+w /webroot/
# chown -R www:www /bbs/
编辑/etc/exports配置文件,将本地的/webroot和/bbs目录共享发布
# vim /etc/exports
执行systemctl reload nfs 或exportfs -rv命令使修改的/etc/exports配置内容生效
# systemctl reload nfs
或
# exportfs -rv
服务器共享配置格式:
基本格式:共享目录 ip/24(共享属性)
共享权限设置:
ro:只读属性
rw:读写属性
sync:文件实际写入磁盘后才返回
all_squash:所有访问用户均被压缩成后续接的用户(即anonuid和anongid指定的用户和组)。
anonuid:默认压缩的用户
anongid:默认压缩的用户组
查看NFS服务器共享出来目录:
服务器 #showmount -e localhost
查看配置:
exportfs -v
4、客户端配置
客户端也要安装nfs-utils和rcpbind软件包
# systemctl start rpcbind
# systemctl enable rpcbind
注意:客户端关闭selinux
在客户端查看NFS服务器共享出来目录:
showmount -e 服务器地址
挂载NFS服务器上/webroot目录到本地/var/www/html目录下
挂载NFS服务器上/bbs目录到本地/var/www/bbs目录下
在客户端上确认挂载点目录存在
# mkdir -p /var/www/{html,bbs}
客户端挂载NFS文件系统:
# mount -t nfs 192.168.0.6:/webroot /var/www/html/
# mount -t nfs 192.168.0.6:/bbs /var/www/bbs/
执行# df -hT查看文件系统的挂载情况
开机启动挂载NFS
想要系统每次启动时自动挂载NFS服务器上的共享目录,则可以编辑/etc/fstab文件
NFS服务器的IP:共享目录 挂载点 nfs defaults 0 0
测试客户端对nfs共享目录的读写操作,创建文件测试