本页内容
- 准备工作
- 安装 NFS 服务端
- 创建共享目录
- 使用 Firewalld 加固 NFS 服务端
- 配置 NFS 客户端
- 验证客户端的写入权限
- 通过 /etc/fstab 配置 NFS 共享目录自动挂载
- 总结
什么是 NFS?NFS(即 Network File System,网络文件系统)是一种协议,允许本地用户像访问本地文件一样,从多个磁盘和目录中访问远程数据。NFS 协议最初由 Sun Microsystem 开发,并已成为通过网络共享文件的标准协议。它广泛用于集中式环境,用户或客户端计算机可以在那一台集中的远程服务器上存储和访问数据。
在大多数 Linux 系统上,NFS 服务端和客户端都可以轻松安装和配置。几乎所有 Linux 发行版都在其软件仓库中默认提供 NFS 软件包。软件包名称可能不同,但几乎在所有 Linux 发行版中配置方式都是相同的。
本教程将向你展示如何在 AlmaLinux 9 上安装 NFS 服务端。此外,你还将搭建一台客户端机器来挂载来自 NFS 服务端的共享目录,并通过 /etc/fstab 文件设置开机自动挂载。
准备工作
在开始之前,你必须确保已具备以下条件:
- 一台 AlmaLinux 9 服务器——在本演示中,我们使用主机名为 almalinux9-server、IP 地址为 192.168.10.15 的服务器。
- 一个具有 sudo/管理员 root 权限的非 root 用户。
- 一台或多台客户端机器——可以是任意基于 RHEL 的发行版。
安装 NFS 服务端
要在 AlmaLinux 上搭建 NFS(Network File Storage,网络文件存储),你只需在 NFS 服务端和客户端上都安装 nfs-utils 即可。该软件包在 AppStream 仓库中可用,你可以通过 DNF 轻松安装。
运行以下命令安装 nfs-utils 软件包。在提示时输入 y,然后按 ENTER。
sudo dnf install nfs-utils

现在,使用下面的 nano 编辑命令打开 /etc/idmapd.conf 文件。
sudo nano /etc/idmapd.conf
取消 Domain 参数的注释,并将其值修改为你服务器的 FQDN(fully qualified domain name,完全限定域名),或使用主机名。
Domain = almalinux9-server
完成后保存并退出文件。
接下来,运行以下命令启动并设置 NFS 服务开机自启。
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
然后,使用以下命令验证 NFS 服务,确保 NFS 正在运行。
sudo systemctl status nfs-server
如果安装成功,你应该会收到类似如下的输出:

创建共享目录
既然 NFS 服务端已经启动并运行,下一步就是为客户端创建共享目录。那么让我们开始吧。
首先,使用以下命令创建两个目录 /mnt/shared 和 /mnt/backup。
sudo mkdir -p /mnt/shared /mnt/backup
将两个目录的属主和属组都改为 nobody,然后将默认权限改为 775。
sudo chown -R nobody:nobody /mnt/shared /mnt/backup
sudo chmod 775 /mnt/shared /mnt/backup
接下来,使用 nano 编辑器创建一个新的配置文件 aa。
sudo nano /etc/exports
将以下行插入文件中。在本例中,我们将为客户端 192.168.10.21 设置三个共享目录 /mnt/backup 和 /home,并为 192.168.10.0/24 整个网络设置 /mnt/shared。
/mnt/backup 192.168.10.21(rw,sync,no_subtree_check) /home 192.168.10.21(rw,sync,no_root_squash,no_subtree_check) /mnt/shared 192.168.10.0/24(rw,sync,no_subtree_check)
完成后保存并关闭文件。
以下是你应该了解的一些重要 NFS 参数:
- rw:为目标共享目录启用读和写。
- sync:该选项将确保数据在客户端发出下一个请求之前先写入磁盘。这样你的数据是安全的,但读/写操作速度较慢。
- no_subtree_check:禁用子树检查,以提升 NFS 服务端的速度和性能。子树检查是一个用于确保用户在更改文件名时不会出现冲突的过程。
- no_root_squash:这将禁用 squashing(压缩),允许 NFS 客户端在共享目录内拥有 root 权限。在本例中,我们将仅针对共享目录 /home 禁用 squashing。
现在,运行以下命令重启 NFS 服务端以应用更改。
sudo systemctl restart nfs-server
NFS 重启后,运行以下命令查看 NFS 服务端上的共享目录列表。
sudo exportfs -v
如果操作成功,你应该会在终端上看到类似如下的 NFS 共享目录列表:

使用 Firewalld 加固 NFS 服务端
配置好 NFS 共享目录后,下一步是设置 firewalld 并为客户端开放一些端口/服务。在开始之前,请确保 firewalld 已启动并正在运行。
现在,运行以下命令将一些 NFS 服务添加到 firewalld。
sudo firewall-cmd --add-service={nfs,nfs3,mountd,rpc-bind} --permanent
然后,重新加载 firewalld 以应用更改。
sudo firewall-cmd --reload

之后,使用以下命令验证你的 firewalld 规则。
sudo firewall-cmd --list-all
预期的输出应类似如下:

配置 NFS 客户端
本节将介绍如何使用 AlmaLinux 服务器搭建 NFS 客户端,该方法可在大多数基于 RHEL 的发行版上实现。
登录到你的客户端,然后运行以下命令安装 nfs-utils 软件包。当提示时输入 y 确认并按 ENTER。
sudo dnf install nfs-utils
现在,运行以下命令查看 NFS 服务端 192.168.10.15 上可用的共享目录。
sudo showmount -e 192.168.10.15
你应该能在 NFS 服务端上看到三个不同的可用共享目录:/mnt/backup、/mnt/shared 和 /home。

接下来,执行以下命令创建新目录 /data、/backup 和 /shared,这些目录将用于挂载 NFS 共享目录。
sudo mkdir -p /data /backup /shared
运行以下命令挂载 NFS 共享目录。在本例中,我们将共享目录 /mnt/backup 挂载到 /backup,/mnt/shared 挂载到 /shared,/home 挂载到 /data。
sudo mount 192.168.10.15:/mnt/backup /backup
sudo mount 192.168.10.15:/mnt/shared /shared
sudo mount 192.168.10.15:/home /data
最后,使用以下命令验证客户端机器上已挂载的文件系统列表。
sudo df -h
如果过程成功,你将看到 NFS 共享目录已挂载到客户端机器上,类似如下:

验证客户端的写入权限
在 NFS 共享目录挂载到客户端机器后,你必须确保对共享目录具有读和写的访问权限。
在客户端机器上,运行以下命令创建新文件 /backup/test-write1.txt、/shared/test-write2.txt 和 /home/alice/test-write3.txt。
echo "This file from client" > /backup/test-write1.txt
echo "This file from client" > /shared/test-write2.txt
echo "This file from client" > /data/alice/test-write3.txt
如果 NFS 服务端和客户端的安装成功,你在客户端机器上创建的新文件将在 NFS 服务端上可用。

现在回到 NFS 服务端,运行以下命令确认新文件在 NFS 服务端上可用。
cat /mnt/backup/test-write1.txt
cat /mnt/shared/test-write2.txt
cat /home/alice/test-write3.txt
从下面的输出中,我们可以看到该文件在 NFS 服务端上可用。

通过 /etc/fstab 配置 NFS 共享目录自动挂载
在验证了 NFS 上的读和写访问权限后,你可能还需要在客户端机器上设置 NFS 服务端的自动挂载。这样,每当客户端机器重启时,NFS 共享目录都会在启动期间自动挂载,这可以通过 /etc/fstab 文件来实现。
首先,使用以下命令卸载并验证客户端机器上的 NFS 共享目录。
sudo umount /data /backup /shared
sudo df -h

使用以下 nano 编辑命令打开 /etc/fstab 文件。
sudo nano /etc/fstab
添加以下选项,并确保根据实际情况自定义共享目录和目标挂载目录的详细信息。
192.168.10.15:/mnt/backup /backup nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 192.168.10.15:/mnt/shared /shared nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 192.168.10.15:/home /data nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
完成后保存文件并退出编辑器。

接下来,运行以下命令验证 /etc/fstab 配置。如果你有一个正确的 fstab 文件,NFS 共享目录会在该命令执行后挂载。
sudo mount -a
使用以下命令验证,获取客户端已挂载的文件系统列表。
sudo df -h
你应该能看到 NFS 共享目录已通过 ' mount -a' 命令依据 /etc/fstab 文件挂载到客户端上。

客户端机器将在系统启动时自动挂载 NFS 共享目录。
总结
恭喜!你已成功在 AlmaLinux 9 服务器上安装了 NFS 服务端和客户端。你还学习了一些命令的基本用法,例如用于挂载文件系统的 mount、用于管理 NFS 共享目录的 exportfs,以及用于显示已挂载文件系统的 df。此外,你还通过 /etc/fstab 文件在客户端机器上配置了 NFS 共享目录的自动挂载。
下一步,请查看 NFS 服务端的额外安全措施。