环境:

RedHat系:

RedHat 8;nfs-utils 2.3.3

同时兼容RedHat系列的系统如CentOS、Fedora等。

Debian系:

Deepin 20.2.2;nfs-kernel-server 1.3.4

同时兼容Debian系列的系统如Ubuntu、Chrome OS等。

使用Redhat8和Deepin20两种系统来配置,代表了RedHat系和Debian系的NFS服务配置,其实两类系统差别不大只是软件包不同,不同点都分开写了,那些没有分开写的配置就代表是一样的。

NFS服务器

Network File System 网络文件系统,基于内核的文件系统。Sun 公司开发,通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。主要用于Linux之间文件共享。

  基于RPC(Remote Procedure Call Protocol 远程过程调用)实现,采用C/S模式,客户机发送一个请求信息给服务进程,然后等待访问端应答。服务端在收到信息之前会保持睡眠状态。

  NFS文件系统常运用于内网,因为它部署方便、简单易用、稳定、可靠,如果是大型环境则会用到分布式文件系统比如FastDFS、HDFS、MFS。

安装软件

RedHat系安装:

需要的软件包nfs-utils和rpcbind

nfs-utils:是NFS服务器的主要软件包。

rpcbind:由于NFS基于RPC服务实现所以依赖此包,一般情况下安装了nfs-utils后会自动安装。

yum install nfs-utils rpcbind

Debian系安装:

需要的软件包nfs-kernel-server,这是Debian下NFS服务器的主要软件包;

rpcbind与RedHat一样是NFS服务的依赖包,一般情况下安装了nfs-kernel-server以后会自动安装。

apt install nfs-kernel-server rpcbind

配置

主配置文件:/etc/exports如果没有就创建即可。

共享目录	主机(权限) [主机2(权限)]
##例子:
/doc	*(ro,sync)
/tool	*(rw,sync,no_root_squash)

参数解释

**共享目录:**需要用NFS共享出去的目录
**主机:**指定哪些主机可以用此NFS
**权限:**此共享目录的权限

关于共享目录:
指定需要共享给其他主机的目录,格式为绝对路径

关于主机:
单个主机IP地址:192.168.0.200
一个子网:192.168.0.0/24
单个主机域名:www.htype.top
域下的所有子域名:.htype.top
所有主机:

关于权限:
权限里包括目录访问权限,用户映射权限等等,权限之间用,分隔

共享目录访问权限:

**只读:**ro

**读写:**rw

sync:同步,数据同时写入内存与磁盘中,效率低,但可以保证数据的一致性(1.0.0版本后为默认);

async:异步,数据先保存在内存中,必要时写入磁盘,可提高性能但服务器意外停止会丢失数据;

all_squash:不论登陆者以什么身份,都会被映射为匿名用户(nfsnobody);

no_all_squash:以登陆者的身份,不做映射,包括文件所属用户和组(默认);

root_squash:将root用户及所属组都映射为匿名用户或用户组(默认);

no_root_squash:开放客户端使用root的身份来操作服务器文件系统,命令文档写的“主要用于无盘客户端”;

anonuid=xxx:所以用户都映射为匿名账户,并指定UID(用户ID);

anongid=xxx:所有用户都映射为匿名账户,并指定GID(组ID);

只列举了一些常用的参数,如果需要查询详细参数可以执行命令man exports来查看配置手册。

生效配置:

exportfs -r		#立即生效配置#

查看共享信息

exportfs -v		#查看共享目录信息#
exportfs -r		#立即生效配置#

防火墙配置:

需要放行的服务:rpc-bind,mountd,nfs

##放行服务:
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --add-service=mountd --permanent
firewall-cmd --add-service=nfs --permanent
firewall-cmd --reload		#重新加载防火墙配置#

开启/关闭/重启/自启

RedHat系命令:

systemctl enable nfs-server.service		#开机自启#
systemctl start nfs-server.service 		#开启服务#
systemctl stop nfs-server.service		#停止服务# 
systemctl restart nfs-server.service		#重启服务#

Debian系命令:

systemctl enable nfs-kernel-server.service		#开机自启#
systemctl start nfs-kernel-server.service 		#开启服务#
systemctl stop nfs-kernel-server.service		#停止服务# 
systemctl restart nfs-kernel-server.service		#重启服务#

客户端

查看服务器共享的目录

showmount -e IP地址		#查看服务器共享了哪些目录#

如果提示没有这个命令就需要安装:

yum install nfs-utils		#RedHat系安装命令#
apt install nfs-common		#Debian系安装命令#

挂载目录:

mount IP:目录 挂载点
mount 192.168.1.2:/mnt /mnt		#将192.168.1.2的nfs共享目录/mnt 挂载到本地/mnt#

开机自动挂载:

nano /etc/fstab		#编辑文件#

##添加下面行:
192.168.1.2:/mnt	/mnt	nfs	 defaults	0 0

与传统挂载磁盘不同的是,需挂载的设备改成了NFS地址的方式。挂载点还是那个熟悉的挂载点。

/etc/exports配置举例

例1

需求:以异步方式共享一个所有主机都可以登陆的目录,这个目录允许所有账户都以匿名用户方式创建/修改/运行文件(包括root用户)。
配置文件应该这样写:

/mnt/sangeng    *(rw,sync,all_squash)

all_squash将所有用户都映射为匿名用户;root_squash将root用户也映射为匿名用户,因为是默认值所有没写。

例2

需求:以同步方式共享一个所有主机都可登陆的目录,这个目录允许客户端里所有用户都具有读写权限,且每个用户独立维护自己的内容,用户之间不能更改对方文件的权限,并且保留Root权限。
配置文件应该这样写:

/mnt/sangeng	*(rw,sync,no_root_squash)

文章来源:https://www.htype.top/2021/827715975980/