Rocky Linux 8 NFS手动挂载实战:避坑firewalld与SELinux

1. 项目概述:为什么在 Rocky Linux 8 上手动配置 NFS 挂载值得你花这 20 分钟

NFS(Network File System)不是什么新潮概念,但直到今天,它依然是企业内网里最稳、最轻、最不挑人的文件共享方案。你不需要装 Docker、不用配 Kubernetes Volume、更不用折腾对象存储网关——只要两台机器在同一局域网,一台开个共享目录,另一台执行一条 mount 命令,就能像访问本地硬盘一样读写远程文件。我在金融后台做日志归集时用它同步审计日志,在广电媒资系统里挂载素材库,在高校 HPC 集群中分发训练数据集,三年没换过一行配置,也没重启过服务。Rocky Linux 8 作为 RHEL 8 的社区继承者,内核是 4.18,默认启用 firewalld 和 SELinux,这两者恰恰是 NFS 挂载失败的“头号双煞”。网上搜到的教程要么照搬 CentOS 7 的 systemctl stop firewalld 粗暴关防火墙,要么漏掉 nfs-utils rpcbind 兼容性处理,结果就是: mount.nfs: Connection refused mount error(112): Host is down Permission denied 这三类报错轮番轰炸。这不是 NFS 本身的问题,而是 Rocky Linux 8 的安全基线和旧式 NFS 文档之间存在一道没被填平的沟。这篇内容不讲原理堆砌,只说你在终端里敲什么、为什么敲、敲错后怎么看日志、怎么不动声色地修好——所有操作均基于真实生产环境复现,命令可直接复制粘贴,参数全部标注来源依据,连 showmount -e 返回空和 exportfs -v 不生效这种“查不到原因”的典型现场,我都给你录了三次重现实验。

2. 整体设计思路与关键决策逻辑:为什么必须放弃“关防火墙”思维

2.1 架构选型:NFS v3 还是 v4?Rocky Linux 8 默认走哪条路?

Rocky Linux 8 的 nfs-utils 包(版本 2.3.3+)默认同时支持 NFS v3 和 v4.2,但 内核模块加载策略和防火墙放行规则完全不同 。v3 依赖 rpcbind 服务动态分配端口(111/TCP+UDP),而 v4 将所有通信收敛到 2049 端口(TCP/UDP),无需 rpcbind 。很多教程直接推荐 v4,理由是“更安全、更简单”。但实测发现:当客户端是较老的嵌入式设备、某些 NAS 或 Windows Subsystem for Linux(WSL2)时,v4 的 SECINFO 协商常失败,报错 mount.nfs: access denied by server while mounting ;而 v3 在 Rocky Linux 8 上兼容性极强,只要 rpcbind 启动正常,几乎零故障。我最终选择 NFS v3 + rpcbind 显式启用 方案,原因有三:

  1. 可追溯性高 rpcinfo -p 能清晰看到每个 NFS 服务绑定的端口,出问题时 tcpdump -i any port 111 or port 2049 抓包一眼定位是 RPC 层还是 NFS 层断链;
  2. firewalld 规则粒度可控 :v3 需要放行 rpc-bind 服务(自动映射 111 端口)+ nfs 服务(映射 2049 及动态端口),而 v4 只需 nfs 服务,看似简单,但 nfs 服务在 firewalld 中实际包含 2049/tcp 2049/udp 111/tcp 111/udp 四条规则,本质仍是 v3 的端口集合,只是封装了一层;
  3. SELinux 上下文适配成熟 :Rocky Linux 8 的 selinux-policy-targeted 包对 /var/lib/nfs/ 目录的 public_content_t 类型定义完整,v3 的 exportfs 生成的 rmtab xtab 文件权限模型比 v4 的 nfsdcltrack 数据库更透明。

提示:不要被 nfsstat -m 输出的 vers=4.2 迷惑——这是客户端协商结果,不代表服务端强制启用 v4。我们通过 /etc/nfsmount.conf 强制指定 Defaultvers=3 ,确保行为可预期。

2.2 安全边界设计:firewalld 不是障碍,而是配置说明书

网上大量教程教人执行 systemctl disable firewalld && systemctl stop firewalld ,这在测试环境可以,但在生产环境等于裸奔。Rocky Linux 8 的 firewalld vendor preset 是 enabled,意味着系统重装或内核更新后会自动恢复启用。真正该做的是把 NFS 所需的网络通道“白名单化”。firewalld 的 --permanent 模式不是摆设,它是配置持久化的唯一可靠方式。临时添加规则(不加 --permanent )在 firewall-cmd --reload 后会丢失,而 --reload 又是日常维护高频操作。我坚持 永久规则 + 显式重载 + 服务级放行 三步法:

  • 第一步:用 firewall-cmd --add-service=nfs --permanent 添加预定义服务,它自动关联 2049/tcp 2049/udp 111/tcp 111/udp
  • 第二步:单独添加 rpc-bind 服务( firewall-cmd --add-service=rpc-bind --permanent ),因为 nfs 服务定义中不包含 rpcbind 的 UDP 端口,而 showmount 命令依赖 UDP 111;
  • 第三步:执行 firewall-cmd --reload 生效,而非 systemctl restart firewalld ——后者会中断已有连接,而 --reload 仅更新规则表,不影响运行中挂载。

这个设计让防火墙从“拦路虎”变成“配置校验器”:如果 showmount -e server_ip 失败,但 telnet server_ip 111 成功,说明是 RPC 层问题;如果 telnet 也失败,则一定是防火墙或网络层拦截。

2.3 权限模型取舍:root_squash 还是 no_root_squash?别让 /etc/exports 成为提权入口

/etc/exports 文件里的 no_root_squash 选项常被滥用。它的本意是允许 root 用户在客户端以 root 权限修改服务端文件,适用于集群计算节点间共享 /tmp /scratch 。但在 Rocky Linux 8 的 SELinux 环境下, no_root_squash 会绕过 nf

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值