在 CentOS 7 的 Linux 系统中配置 NFS(Network File System,网络文件系统)服务器 ,可以实现 多台 Linux 主机之间共享目录,类似于 Windows 的共享文件夹,但基于 UNIX/Linux 权限体系,常用于局域网内服务器之间数据共享(如 Web 服务、代码、配置文件等)。
一、NFS 服务简介
-
NFS(Network File System):由 Sun Microsystems 开发,允许一台计算机(NFS 服务器)通过网络将目录共享给其他计算机(NFS 客户端),客户端可以像访问本地文件一样访问这些共享目录。
-
主要用途:服务器之间共享数据(如网站文件、备份、配置文件等)。
-
特点:
-
基于 RPC(远程过程调用)
-
适用于 Linux/Unix 环境
-
支持访问控制、用户映射(通过 UID/GID)
-
支持同步/异步写入
-
二、NFS 服务器配置步骤(CentOS 7)
1. 安装 NFS 服务相关软件包
NFS 服务端需要两个主要组件:
-
nfs-utils:NFS 服务主程序
-
rpcbind(或 portmap):RPC 服务,用于端口映射
sudo yum install nfs-utils rpcbind -y
2. 启动并设置开机自启
sudo systemctl start rpcbind
sudo systemctl enable rpcbind
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
在 CentOS 7 中,NFS 服务由
nfs-server管理,不是nfs。
3. 检查服务状态
sudo systemctl status rpcbind
sudo systemctl status nfs-server
三、配置 NFS 共享目录
1. 创建要共享的目录
sudo mkdir -p /data/nfs_share
sudo chmod 777 /data/nfs_share # 临时宽松权限,仅用于测试,生产环境请按需设置
sudo chown nobody:nobody /data/nfs_share # 或指定特定用户
生产环境中建议根据实际用户设置权限,如
chown apache:apache(如果是 web 共享)。
2. 编辑 NFS 主配置文件
配置文件路径:/etc/exports
sudo vi /etc/exports
添加共享目录及访问控制规则,例如:
/data/nfs_share 192.168.1.0/24(rw,sync,no_root_squash,no_all_squash)
或更严格的访问控制:
/data/nfs_share 192.168.1.10(rw,sync,no_subtree_check) # 仅允许 192.168.1.10 读写
/data/nfs_share 192.168.1.0/24(ro) # 允许整个网段只读
3. NFS 访问控制选项详解
在 /etc/exports中,每行格式为:
共享目录路径 客户端地址(选项1,选项2,...)
常用客户端地址格式:
-
单个 IP:
192.168.1.10 -
网段:
192.168.1.0/24或192.168.1.* -
所有主机:
*(不推荐) -
主机名:
nfsclient.example.com(需能解析)
常用选项说明:
| 选项 | 说明 |
|---|---|
rw |
Read & Write,可读写 |
ro |
Read Only,只读 |
sync |
同步写入磁盘,更安全(推荐) |
async |
异步写入,速度快但不安全 |
no_root_squash |
允许 root 用户保持 root 权限(慎用,有安全风险) |
root_squash |
将 root 用户映射为匿名用户(nobody)(默认,更安全) |
no_all_squash |
不将所有用户映射为匿名用户 |
all_squash |
所有用户(包括 root)都映射为匿名用户(nobody) |
anonuid=xxx |
指定匿名用户的 UID |
anongid=xxx |
指定匿名用户的 GID |
no_subtree_check |
不检查子目录权限,提高性能,推荐 |
subtree_check |
检查子目录,更严格(默认,可能影响性能) |
4. 使配置生效
每次修改 /etc/exports后,需要重新加载 NFS 配置:
sudo exportfs -ra
该命令会重新导出所有共享目录,使新配置生效。
你也可以查看当前已共享的目录:
sudo exportfs -v
或查看允许访问的客户端:
showmount -e localhost
四、防火墙配置(放行 NFS 相关端口)
NFS 使用多个端口,包括:
-
2049 (nfs):主 NFS 服务端口
-
111 (rpcbind / portmapper):RPC 端口,用于服务发现
-
其它动态端口(用于 NFSv3 数据传输,较复杂)
推荐使用 firewalld 放行必要端口:
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
或者直接放行端口:
sudo firewall-cmd --permanent --add-port=2049/tcp sudo firewall-cmd --permanent --add-port=2049/udp sudo firewall-cmd --permanent --add-port=111/tcp sudo firewall-cmd --permanent --add-port=111/udp sudo firewall-cmd --reload
五、NFS 客户端配置(挂载 NFS 共享目录)
1. 安装 NFS 客户端工具
sudo yum install nfs-utils -y
2. 查看服务端共享目录
在客户端机器上执行:
showmount -e 192.168.1.100
将
192.168.1.100替换为你的 NFS 服务器 IP,会列出该服务器共享了哪些目录。
3. 手动挂载 NFS 共享目录
sudo mkdir -p /mnt/nfs_client
sudo mount -t nfs 192.168.1.100:/data/nfs_share /mnt/nfs_client
-t nfs:指定文件系统类型为 NFS
192.168.1.100:/data/nfs_share:服务器 IP + 共享目录
/mnt/nfs_client:客户端挂载点
测试是否成功:
df -h
ls /mnt/nfs_client
4. 客户端自动挂载(开机自动挂载,使用 /etc/fstab)
编辑 /etc/fstab文件:
sudo vi /etc/fstab
添加一行:
192.168.1.100:/data/nfs_share /mnt/nfs_client nfs defaults 0 0
说明:
第一列:NFS 服务器地址与共享目录
第二列:本地挂载点
第三列:文件系统类型:
nfs第四列:挂载选项:常用
defaults(包含 rw,suid,dev,exec,auto,nouser,async)第五、六列:dump 和 fsck 选项,通常为
0 0
保存后,测试挂载:
sudo mount -a
如果没有报错,说明配置正确,重启后会自动挂载。
六、NFS 访问控制最佳实践总结
| 控制维度 | 推荐配置 | 说明 |
|---|---|---|
| 共享目录权限 | chmod/ chown设置合理权限 |
避免 777,按需分配用户/组 |
| exports 访问控制 | 指定 IP 或网段,如 192.168.1.0/24 |
避免使用 *,限制可访问客户端 |
| 读写权限 | rw(读写)、ro(只读) |
按需分配,一般只读更安全 |
| 用户映射 | root_squash(默认,推荐)、no_root_squash(慎用) |
避免客户端 root 直接获得服务器 root 权限 |
| 同步写入 | sync(推荐)、async(高性能但危险) |
生产环境推荐 sync |
| 子目录检查 | no_subtree_check(推荐) |
提升性能,一般无害 |
| 防火墙 | 放行 2049/tcp, 111/tcp 等 | 必须配置,否则客户端无法连接 |
七、总结:NFS 服务配置流程一览
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 安装软件 | yum install nfs-utils rpcbind |
| 2 | 启动服务 | systemctl start rpcbind nfs-server |
| 3 | 创建共享目录 | mkdir /data/nfs_share |
| 4 | 配置共享 | 编辑 /etc/exports,设置访问 IP 和权限选项 |
| 5 | 使配置生效 | exportfs -ra |
| 6 | 配置防火墙 | 放行 2049, 111 端口或相关服务 |
| 7 | 客户端挂载 | mount -t nfs server:/path /mntpoint |
| 8 | 客户端自动挂载 | 编辑 /etc/fstab实现开机自动挂载 |
八、补充:查看 NFS 相关命令
| 命令 | 作用 |
|---|---|
showmount -e 服务器IP |
查看 NFS 服务器共享了哪些目录 |
showmount -a |
查看当前主机挂载了哪些 NFS 共享 |
exportfs -v |
查看本机已导出的 NFS 目录及选项 |
exportfs -ra |
重新加载 /etc/exports 配置 |
rpcinfo -p |
查看 RPC 服务注册情况 |
✅ 总结一句话
在 CentOS 7 上配置 NFS 服务器 ,通过编辑
/etc/exports设置共享目录及 访问控制选项(IP限制、读写权限、用户映射等) ,使用rpcbind和nfs-server服务,并通过 防火墙放行端口 和 客户端 /etc/fstab 自动挂载,即可实现高效安全的文件共享服务。