CentOS 7 作为一款广泛使用的服务器操作系统,其网络文件系统(NFS)功能为跨平台文件共享提供了高效可靠的解决方案,NFS 允许用户通过网络将远程目录挂载到本地文件系统中,实现像访问本地文件一样的便捷操作,特别适用于服务器集群、分布式存储以及集中式文件管理场景,本文将详细介绍在 CentOS 7 系统中开启 NFS 服务的完整流程,包括服务安装、配置、防火墙设置、客户端挂载及常见问题排查,帮助用户快速搭建稳定安全的 NFS 文件共享环境。

安装 NFS 服务包
在 CentOS 7 系统中,NFS 服务依赖于多个软件包,包括 nfs-utils(提供核心 NFS 服务工具)、rpcbind(负责远程过程调用端口映射)以及 rpcidmapd(用于用户 ID 映射),首先需要通过 yum 包管理器安装这些必需组件,打开终端,以 root 权限执行以下命令:
sudo yum update -y sudo yum install nfs-utils rpcbind -y
安装完成后,可以通过 rpm -q nfs-utils rpcbind 命令验证软件包是否正确安装,若显示版本信息,则说明安装成功,NFS 相关的服务尚未启动,需要进一步配置并设置为开机自启,以确保服务器重启后服务能自动运行。
配置 NFS 共享目录
NFS 的核心配置文件为 /etc/exports,该文件定义了哪些目录可以被共享、允许访问的客户端地址以及访问权限,在编辑该文件前,建议先创建一个待共享的目录,/data/nfs_share,并设置适当的目录权限:
sudo mkdir -p /data/nfs_share sudo chmod 755 /data/nfs_share sudo chown nobody:nobody /data/nfs_share
使用文本编辑器(如 vi 或 nano)打开 /etc/exports 文件,添加以下配置内容:
/data/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check)
上述配置中,168.1.0/24 表示允许该网段的所有客户端访问,rw 表示赋予客户端读写权限,sync 表示数据写入磁盘后才返回确认,确保数据一致性,no_subtree_check 则禁用子树检查,提高性能,若需要更严格的控制,可替换为 ro(只读)或添加 all_squash(将所有用户映射为匿名用户)等选项,保存文件后,通过 exportfs -a 命令使配置立即生效,无需重启 NFS 服务。
启动并启用 NFS 服务
CentOS 7 中,NFS 服务依赖 rpcbind 和 nfs-server 两个核心服务,启动顺序至关重要,需先启动 rpcbind,再启动 NFS 相关服务,依次执行以下命令:
sudo systemctl start rpcbind sudo systemctl start nfs-server sudo systemctl start nfs-lock sudo systemctl start nfs-idmapd
为确保服务在系统重启后自动启动,需将它们设置为开机自启:

sudo systemctl enable rpcbind sudo systemctl enable nfs-server sudo systemctl enable nfs-lock sudo systemctl enable nfs-idmapd
使用 systemctl status nfs-server 命令可检查服务运行状态,若显示 active (running),则表示服务已正常启动,通过 rpcinfo -p 命令可以查看 RPC 服务是否已注册,确认 NFS 服务端口映射正常。
配置防火墙规则
CentOS 7 默认使用 firewalld 防火墙,NFS 服务依赖多个端口(如 2049/NFS、111/RPC、20001/tcp 等),需手动将这些端口开放给客户端网络,检查当前防火墙状态:
sudo systemctl status firewalld
若防火墙已启用,则添加永久规则允许 NFS 相关端口和客户端访问,执行以下命令:
sudo firewall-cmd --permanent --add-service=nfs sudo firewall-cmd --permanent --add-service=rpc-bind sudo firewall-cmd --permanent --add-service=mountd sudo firewall-cmd --reload
--permanent 参数表示规则永久生效,--reload 重新加载防火墙配置使规则立即生效,若客户端与 NFS 服务器位于同一安全区域,可进一步限制访问来源,例如只允许 168.1.0/24 网段访问:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="nfs" accept'
完成配置后,可通过 firewall-cmd --list-all 查看已开放的规则,确保 NFS 服务端口未被阻止。
客户端挂载 NFS 共享
在客户端系统(可以是另一台 CentOS 7 或其他 Linux 发行版)上,首先创建一个本地挂载点,/mnt/nfs_client,然后使用 mount 命令挂载远程 NFS 目录:
sudo mkdir -mnt/nfs_client sudo mount 192.168.1.100:/data/nfs_share /mnt/nfs_client
168.1.100 为 NFS 服务器的 IP 地址,挂载成功后,可通过 df -h 查看挂载信息,或直接在 /mnt/nfs_client 目录中创建、修改文件以测试读写功能,若需实现开机自动挂载,需编辑 /etc/fstab 文件,添加以下内容:

168.1.100:/data/nfs_share /mnt/nfs_client nfs defaults,_netdev 0 0
_netdev 参数表示挂载设备为网络设备,确保系统在网络启动后再尝试挂载,避免启动失败,修改后可通过 mount -a 测试配置是否正确。
常见问题排查
在使用 NFS 过程中,可能会遇到无法挂载、权限错误或性能问题,若客户端提示 mount.nfs: access denied,通常是由于 /etc/exports 配置的客户端地址与实际 IP 不匹配,或服务器目录权限设置不当,需检查 chmod 和 chown 配置,若挂载后文件属异常,可通过 /etc/idmapd.conf 配置用户映射规则,确保客户端与服务器的用户 ID 一致,对于性能问题,可调整 /etc/sysconfig/nfs 中的参数(如 RPCMOUNTDOPTS 或 NFSDCOUNT),或使用 nfsstat 命令监控网络流量和请求延迟,进一步优化配置。
相关问答 FAQs
Q1: 如何检查 NFS 服务是否正常运行?
A1: 可通过以下命令综合检查服务状态:
systemctl status nfs-server:查看 NFS 服务是否处于 active 状态。rpcinfo -p:确认 RPC 服务(如 mountd、nfsd)是否已注册。showmount -e 192.168.1.100(服务器 IP):列出已导出的共享目录,若显示共享列表则服务正常。- 客户端使用
mount命令查看挂载点,或通过nfsstat检查客户端与服务器的通信状态。
Q2: NFS 挂载后出现 "Permission denied" 错误如何解决?
A2: 此问题通常由权限或用户映射导致,可按以下步骤排查:
- 检查服务器共享目录权限:确保目录属主为
nobody:nobody(或通过anonuid/anongid指定映射用户),且权限为 755。 - 验证
/etc/exports配置:检查客户端 IP 是否在允许列表中,rw权限是否正确设置。 - 检查防火墙和 SELinux:确保防火墙允许 NFS 端口,执行
getsebool -a | grep nfs查看 SELinux 策略,必要时临时关闭 SELinux(setenforce 0)测试。 - 用户映射问题:若客户端与服务器用户 ID 不一致,在
/etc/idmapd.conf中配置Domain和Anonymous UID/GID,确保映射规则正确。