NFS文件共享
·
一、NFS
NFS(Network File System)是一种基于 TCP /IP 传输的网络文件系统协议,通过将文件共享给其他计算机,使得不同计算机之间的可以进行文件共享。
它使用RPC 协议进行通信,使用缓存技术和文件锁定机制提高文件访问的效率和可靠性:
-
NFS服务器将共享的文件和目录挂载到其文件系统中的特定位置
-
NFS客户端通过网络访问NFS服务器共享的文件和目录。客户端可以像访问本地文件系统一样访问这些共享文件和目录
-
当NFS客户端需要访问共享的文件或目录时,它会向NFS服务器发送RPC调用请求,NFS服务器会响应这些请求并返回所请求的数据
![![[Pasted image 20260423162047.png]]](https://i-blog.csdnimg.cn/direct/fafa94f691e94e35b31c3f37f22d4f84.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]]](https://i-blog.csdnimg.cn/direct/d3c6fa4639474725aaa2b469fb835168.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]]](https://i-blog.csdnimg.cn/direct/7cba1f5cb06c48efade5943d93c2cfa7.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]]](https://i-blog.csdnimg.cn/direct/cd113697e76a485291d81c3b4ccf3740.png)
给客户端配置读写权限:
# 1.配置exports文件
/share *(rw)
# 2.授予文件系统读取权限
chmod 777 /share -R
# 3.重读配置文件
exportfs -r
现在客户端可以创建、修改文件了![![[Pasted image 20260423214436.png]]](https://i-blog.csdnimg.cn/direct/05002f4187a2439dbf8c0bef033ef29e.png)
3.创建文件的所属主和所属组权限
- 默认情况下:以客户端的管理员用户创建文件时,该文件的属主和属组都是nfsnobody
![![[Pasted image 20260423214523.png]]](https://i-blog.csdnimg.cn/direct/4d32f66cbccb4959b2ed05765aca8da9.png)
这是因为配置文件里默认root_squash权限,客户端的管理员用户被压榨权限成为nfsnobody
以客户端的其他用户创建文件时,该文件的属主和属组都是该用户自己![![[Pasted image 20260423214706.png]]](https://i-blog.csdnimg.cn/direct/a0d7aad645084237ab1f970ab6df1892.png)
- 修改客户端管理员用户创建文件的权限,使之创建的文件属主和属组都是root
# 修改服务端配置文件vim /etc/exports
/share *(rw,no_root_squash)
# 重读配置文件
exportfs -r
# 查看nfs信息
exportfs -v
![![[Pasted image 20260423214842.png]]](https://i-blog.csdnimg.cn/direct/69408977e0014540aa69230d64fedbd2.png)
此时客户端创建文件的所属主和所属组都是root![![[Pasted image 20260423214920.png]]](https://i-blog.csdnimg.cn/direct/f83140a7bbba436fad8aa445626ce5ed.png)
- 客户端创建文件都指向同一所属主和所属组
如何将客户端新建文件都指定同一用户,需要设置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]]](https://i-blog.csdnimg.cn/direct/cb3154b5397a4ecfab5e7b790f4cb69b.png)
![![[Pasted image 20260423215916.png]]](https://i-blog.csdnimg.cn/direct/c3cc8a7302c248de8e5957f1a464e516.png)
![![[Pasted image 20260423215956.png]]](https://i-blog.csdnimg.cn/direct/eb4a528cbd2e4cf89097187308a559a3.png)
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)