一、NFS

NFS(Network File System)是一种基于 TCP /IP 传输的网络文件系统协议,通过将文件共享给其他计算机,使得不同计算机之间的可以进行文件共享。

它使用RPC 协议进行通信,使用缓存技术和文件锁定机制提高文件访问的效率和可靠性:

  1. NFS服务器将共享的文件和目录挂载到其文件系统中的特定位置

  2. NFS客户端通过网络访问NFS服务器共享的文件和目录。客户端可以像访问本地文件系统一样访问这些共享文件和目录

  3. 当NFS客户端需要访问共享的文件或目录时,它会向NFS服务器发送RPC调用请求,NFS服务器会响应这些请求并返回所请求的数据
    ![[Pasted image 20260423162047.png]]

二、exportfs和showmount命令

exportfs:用于管理NFS导出的文件系统

选项 说明
-v 查看本机所有NFS共享
-r 重读配置文件,并共享目录
-a 输出本机所有的共享
-au 停止本机所有共享

showmount:显示NFS服务器加载的信息

选项 说明
-e 显示服务器上所有的共享目录

三、搭建NFS服务器

1. 环境准备

主机号 角色
192.168.81.133 服务端—NFS服务器
192.168.81.134 客户端01
192.168.81.135 客户端02

2. 临时关闭防火墙和SELinux

# 关闭防火墙
systemctl stop firewalld

# 关闭selinux
setenforce 0

3. 安装nfs、rpcbind软件包

# 服务端和客户端都需要安装软件包
yum install nfs-utils.x86_64 rpcbind -y

4. 配置服务端

# 创建共享目录
mkdir /share

# 切换到共享目录下并写入一些内容供客户端读取
cd /share
echo "hello,my name is xxx" > test

# 编辑配置文件exports
/share *

# 启动服务
systemctl start rpcbind
systemctl start nfs

# 查看本机的NFS共享目录
showmount -e

# 重读配置文件
exportfs -r

# 查看详细的nfs信息
exportfs -v

![[Pasted image 20260423213602.png]]

5. 配置客户端

# 临时将共享目录挂载到本地文件夹,重启后失效。永久挂载可修改配配置文件/etc/fstab
mount 192.168.81.133:/share /mnt

# 查看挂载情况
df -Th

# 启动服务
systemctl start rpcbind
systemctl start nfs

另外一个客户端同理操作即可。

6. 验证

# 客户端操作
# 进入挂载目录下
cd /mnt

# 读取共享文件
cat test

![[Pasted image 20260423213822.png]]

四、关于客户端权限说明——exports配置文件

1. 权限参数

权限参数 说明
ro 只读模式(默认)
rw 读写模式
root_squash 当 NFS 客户端使用 root 用户访问时,映射为 NFS 服务端的匿名用户
no_root_squash 当 NFS 客户端使用 root 用户访问时,映射为NFS 服务端的 root 用户|
all_squash 不论 NFS 客户端使用任何帐户,均映射为 NFS 服务端的匿名用户|
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘,效率更高,但可能造成数据丢失
subtree_check 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认
no_subtree_check 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
anonuid、anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用

2. 配置客户端的读写权限

客户端默认权限为只读模式,也就是说不配置客户端的读写权限,客户端就无法创建、修改文件
![[Pasted image 20260423214244.png]]

给客户端配置读写权限:

# 1.配置exports文件
/share *(rw)

# 2.授予文件系统读取权限
chmod 777 /share -R

# 3.重读配置文件
exportfs -r

现在客户端可以创建、修改文件了
![[Pasted image 20260423214436.png]]

3.创建文件的所属主和所属组权限

  1. 默认情况下:以客户端的管理员用户创建文件时,该文件的属主和属组都是nfsnobody
    ![[Pasted image 20260423214523.png]]

这是因为配置文件里默认root_squash权限,客户端的管理员用户被压榨权限成为nfsnobody

以客户端的其他用户创建文件时,该文件的属主和属组都是该用户自己
![[Pasted image 20260423214706.png]]

  1. 修改客户端管理员用户创建文件的权限,使之创建的文件属主和属组都是root
# 修改服务端配置文件vim /etc/exports
/share *(rw,no_root_squash)

# 重读配置文件
exportfs -r

# 查看nfs信息
exportfs -v

![[Pasted image 20260423214842.png]]

此时客户端创建文件的所属主和所属组都是root
![[Pasted image 20260423214920.png]]

  1. 客户端创建文件都指向同一所属主和所属组

如何将客户端新建文件都指定同一用户,需要设置anonuid 和 anongid

指明客户端用户映射为特定用户UID和组GID,而非其他用户,可配合all_squash使用

# 1.首先创建一个新用户并指定uid号
useradd -u 1010 eee

# 2.修改配置文件vim /etc/exports
/share *(rw,all_squash,anonuid=1010,anongid=1010)

# 3.重读配置文件
exportfs -r

# 3.查看权限是否设置成功

![[Pasted image 20260423215641.png]]

![[Pasted image 20260423215916.png]]

![[Pasted image 20260423215956.png]]

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐