使用 Linux 搭建并配置一个 NFS 服务器
使用 Linux 搭建并配置一个 NFS 服务器,并详细介绍了相关配置参数,方便后续 NFS 的维护。
目录
系统环境:
Rocky Linux 9.3
;适用于 Red Hat / Centos 等红帽系发行版;其他发行版需要查找对应的软件包。- NFS 软件包版本:
nfs-utils-1:2.5.4-26.el9_4.x86_64
NFS:Network File System , 网络文件系统。
1. 安装相关软件包
首先,确保系统已经更新并安装了 NFS 所需的软件包:
sudo dnf update -y
# 安装 nfs 软件包
# 如果是较新的版本中,也会自动安装 rpcbind
sudo dnf install nfs-utils -y
【注】在 NFSv4
中,不再需要 rpcbind
,因为它使用了更简单的通信机制,不依赖于 RPC
服务的映射。但是如果需要兼容 NFSv2 或 NFSv3,则必须安装并运行 rpcbind。因为这两个版本的 NFS 依赖 rpcbind
来协商和管理通信。
sudo dnf install rpcbind -y
2. 启动并启用相关服务
安装完成后,启动 NFS 服务并将其设置为开机自启:
# 开机自启
sudo systemctl enable nfs-server
# 启动 nfs 服务
sudo systemctl start nfs-server
如果安装了 rcpbind
也需要设置进行启动以及设置为开机自启:
# 开机自启
sudo systemctl enable rpcbind
# 启动服务
sudo systemctl start rpcbind
3. NFS 配置文件
3.1 /etc/exports 文件
/etc/exports
是 NFS(Network File System)的配置文件,用于定义哪些目录要共享、共享给哪些客户端以及每个客户端的访问权限。
/etc/exports
文件的语法:
# 每一行都是一个配置
<共享目录> <客户端列表>(<选项>)
# 每行进行配置多个客户端列表
<共享目录> <客户端列表>(<选项>) <客户端列表>(<选项>)
- 共享目录:要共享的本地目录的绝对路径。
- 客户端列表:指定可以访问该目录的客户端,支持 IP 地址、主机名或通配符。
- 选项列表:定义客户端的访问权限和其他行为,放在括号中。
简单示例:
# 将 /home/shared 目录共享给 192.168.1.0/24 网络的所有主机,并且允许读写访问:
/home/shared 192.168.1.0/24(rw,sync,no_subtree_check)
# 将 /var/nfs 目录共享给多个特定的客户端,并指定不同的访问权限
/var/nfs 192.168.1.10(ro,sync) 192.168.1.11(rw,sync,no_root_squash)
3.2 共享目录
指定本地要共享的目录的绝对路径,不能使用相对路径。
共享目录的权限一般为 755
或 777
,根据实际情况设置即可。
3.3 客户端列表
客户端可以用以下几种常用的方式表示:
- 单个 IP 地址:如
192.168.1.10
,只允许指定的客户端访问。 - IP 地址范围(子网):如
192.168.1.0/24
,允许特定网络范围内的所有客户端访问。 - 主机名:如
client.example.com
,允许指定主机访问(需要配置 DNS 或 /etc/hosts)。 - 通配符:如
*
,允许所有客户端访问(不推荐用于生产环境)。
客户端列表可以指定多个客户端,使用空格分隔。
3.4 参数选项
在括号内指定的选项用来配置共享的权限和行为。
参数选项挺多的,但是可以进行一下归纳,常用的参数主要分为下面几类:
3.4.1 访问权限选项
- 默认为:
ro
- rw:读写权限,允许客户端对共享目录进行读和写操作。
- ro:只读权限,客户端只能读取共享目录中的文件,无法修改。
3.4.2 数据写入硬盘模式
- 默认值:
sync
- sync:同步写入;确保数据在写入时立即写入磁盘,保证数据一致性。
- async:异步写入;数据会先暂存在内存中,然后再批量写入磁盘,可能提升性能但存在数据丢失风险。
3.4.3 root 用户权限
- 默认值:
root_squash
- no_root_squash:允许 NFS 客户端以 root 身份访问共享目录。
- root_squash:将客户端的 root 用户映射为
nobody
(旧版本为:nfsnobody ),默认设置,增加安全性以防止权限提升。
3.4.4 子树检查
- 默认值:
subtree_check
- no_subtree_check:禁用子树检查,当客户端访问共享目录中的文件(含目录)时,NFS 服务器不会检查该文件所属的子目录是否在导出的目录树中,只会检查
顶级
(并不是其路径,只有顶级)共享目录的权限。 - subtree_check:启用子树检查,当客户端请求访问共享目录中的文件(含目录)时,NFS 服务器会检查该文件是否属于实际被导出的子目录,并检查其路径上的所有权限。
3.4.5 匿名用户
- 默认值:
no_all_squash
- all_squash:将所有客户端用户(不论是 root 还是普通用户)都映射为匿名用户
nobody
(旧版本为:nfsnobody )。 - no_all_squash:访问用户先与本机用户匹配,匹配失败后再映射为匿名用户 nobody (旧版本为:nfsnobody );
- anonuid / anongid:分别指定匿名用户的 UID 和 GID,当使用 root_squash 或 all_squash 时使用。
# 示例
/home/shared 192.168.1.0/24(rw,all_squash,anonuid=1001,anongid=1001)
3.4.6 安全性(特权端口)
-
默认值:
secure
-
secure:仅允许客户端通过特权端口(0-1023)连接。
默认情况下,只有当客户端使用特权端口时,NFS 服务器才允许访问。特权端口只能由 root 用户绑定,因此这个选项提供了额外的安全性。
-
insecure:允许客户端通过非特权端口(1024 以上)连接。
启用该选项会使 NFS 服务器接受来自任何端口的连接,这样可以允许不使用特权端口的客户端(例如某些非标准 NFS 实现或特定的客户端设备)访问共享目录。
# 配置示例
/home/shared 192.168.1.0/24(rw,sync,insecure)
3.4.7 网络传输
- 默认值:
wdelay
- wdelay:延迟写入;当 NFS 服务器在接收到多个写入请求时,会稍微延迟处理,以便合并多个请求为一次写操作,从而减少磁盘 I/O 操作次数。
- no_wdelay:禁用延迟写入;当 NFS 服务器立即处理每个写入请求,而不等待更多的写操作。
3.4.x 更多 (More)
X 表示未知,哈哈哈!😆
除了上面的参数外,还有很多其他的参数,后续如果有比较重要的将不定时整理一下。
3.5 基本示例
下面是一个常用的配置,可根据实际需求去做调整。
编辑 /etc/exports
文件,定义需要共享的目录及权限。
sudo vim /etc/exports
在文件中添加共享目录及权限,例如:
/home/shared 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
参数说明:
/home/shared
:要共享的目录路径。192.168.1.0/24
:允许访问的客户端 IP 地址段。rw
:读写权限。sync
:数据同步写入。no_root_squash
:允许客户端以 root 身份访问(根据需求配置)。no_subtree_check
:提高性能,禁用子目录检查。
4. 导出 NFS 共享
编辑完 exports
文件后,导出 NFS 共享:
sudo exportfs -r
参数说明:
-r
:重新导出所有已定义的共享目录,读取/etc/exports
文件中的更改。
5. 配置防火墙
- 为了让客户端能够访问 NFS 共享,需要开放相应的防火墙端口
- 如果是内网或测试环境,可以选择关闭防火墙
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload
6. 客户端挂载 NFS 共享
这里的客户端挂载是最常用且简单的挂载,没有考虑太多 NFS 的稳定性;为了保障稳定性 NFS 还提供了很多配置参数,后续有时间单独出一篇文章来具体描述。
在客户端机器上,安装 nfs-utils
,并使用以下命令挂载 NFS 共享:
sudo dnf install nfs-utils -y
sudo mount -t nfs <server_ip>:/home/shared /mnt/xxx
将 <server_ip>
替换为 NFS 服务器的 IP 地址,/mnt/xxx
为客户端的挂载目录。
7. 自动挂载(可选)
如果希望客户端在每次启动时自动挂载 NFS 共享,可以将其添加到 /etc/fstab
文件中:
<server_ip>:/home/shared /mnt/xxx nfs defaults 0 0
这样,系统启动时会自动挂载 NFS 共享。
想了解更多 /etc/fstab
文件的配置,可参考文章:Linux 再入门整理:详解 /etc/fstab 文件。
更多推荐
所有评论(0)