本教程适用于以下操作系统版本
- Debian 12 (Bookworm)
- Debian 11 (Bullseye)
- Debian 9 (Stretch)
- Debian 7 (Wheezy)
- Debian 5 (Lenny)
本页内容
- 准备工作
- 安装 NFS 服务器
- 配置 NFSv4
- 通过 UFW 配置防火墙
- 设置伪文件系统与导出
- 设置 NFS 客户端
- 通过 /etc/fstab 挂载 NFS 服务器
- 结论
NFS(Network File System,网络文件系统)是一种网络协议,允许你通过网络挂载远程文件系统。NFS 协议采用客户端-服务器架构:NFS 服务器提供所有可被访问的目录或分区,而客户端通过内部网络连接使用 rpcbind 协议来访问所有目录和文件系统。
Network File System 协议目前的状况如下所述。
- NFSv2 和 NFSv3 仍被主流操作系统支持,但出于安全原因,你必须将对 NFS 服务器的访问限制在受信任的本地网络中。NFSv2 和 NFSv3 推荐用于中小型部署。
- NFSv4 协议提供了身份验证和加密等基本安全特性,但这些部分依赖于 Kerberos。因此,若要使用具备基本安全特性的 NFSv4,你需要进行额外配置。
在本指南中,我将向你演示如何在 Debian 12 上安装 NFS 服务器和客户端。我将安装 NFS 服务器并配置 NFSv4,包括通过伪文件系统配置 exportfs。最后,你将配置 Debian 客户端仅通过 NFSv4 挂载 NFS 服务器,并通过 /etc/fstab 文件配置自动挂载。
准备工作
要完成本指南,请确保你具备以下条件:
- 两台 Debian 12 服务器——本例中,IP 地址为 192.168.10.15 的服务器 bookworm 将用作 NFS 服务器,IP 为 192.168.10.20 的服务器 client1 将用作 NFS 客户端。
- 一个具备 sudo/管理员权限的非 root 用户。
安装 NFS 服务器
NFS(Network File System,网络文件系统)是一种用于分布式文件共享的协议。在包括 Debian 在内的 Linux 上,NFS 软件包默认在官方仓库中可用。完成下面的第一步以安装 NFS 服务器软件包,并了解如何管理 NFS 服务器服务。
在开始安装之前,运行下面的 apt 命令来更新 Debian 仓库并获取最新的软件包信息。
sudo apt update
现在使用下面的 apt 命令安装 NFS 服务器软件包 nfs-kernel-server。输入 y 以确认安装并按下 ENTER。
sudo apt install nfs-kernel-server nfs-common

一旦 nfs-kernel-server 软件包安装完成,nfs-server 服务就会在你的 Debian 机器上默认被创建、运行并启用。执行以下 systemctl 命令来验证 nfs-server 服务,并确保该服务已启用且正在运行。
sudo systemctl is-enabled nfs-server
sudo systemctl status nfs-server
你应该得到 enabled 的输出,这意味着 nfs-server 将在系统启动时自动运行。运行时你应该看到 active (exited) 或 active (running) 的消息。

此外,你可以使用以下命令来启动、重启和停止 nfs-server 服务。
sudo systemctl start nfs-server
sudo systemctl restart nfs-server
sudo systemctl stop nfs-server
配置 NFSv4
目前,NFS 协议的最新版本是 v4,其在安全性和性能方面都有所增强。在接下来的章节中,你将学习如何在你的 NFS 服务器上设置和启用 NFSv4。
使用 nano 编辑器命令打开默认的 NFS 配置 /etc/default/nfs-common。
sudo nano /etc/default/nfs-common
将参数 NEED_STATD 改为 no,并将 NEED_IDMAPD 改为 yes。NFSv4 需要 NEED_IDMAPD,它将用作 ID 映射守护进程,并在服务器与客户端之间提供功能支持。
NEED_STATD="no" NEED_IDMAPD="yes"
完成后保存文件并退出编辑器。
现在使用下面的 nano 编辑器命令打开 NFS 服务器配置 /etc/default/nfs-kernel-server。
sudo nano /etc/default/nfs-kernel-server
添加以下配置,以便在使用 nfs-server 服务运行时禁用 NFSv2 和 NFSv3,并禁用客户端对 NFSv2 和 NFSv3 的挂载请求。
RPCNFSDOPTS="-N 2 -N 3" RPCMOUNTDOPTS="--manage-gids -N 2 -N 3"
完成后保存并退出文件。
最后,执行以下命令来重启 nfs-server 服务并应用更改。这样,你的 NFS 服务器将只接受 NFSv4 协议。
sudo systemctl restart nfs-server
通过 UFW 配置防火墙
必须在你的 NFS 服务器上启用防火墙,这样你可以限制哪些内部网络能够访问 NFS 服务器。完成此步骤来配置 UFW(Uncomplicated Firewall)并保护你的 NFS 服务器。
如果尚未安装 UFW,运行下面的 apt 命令进行安装。
sudo apt install ufw -y

安装 UFW 后,执行下面的 ufw 命令以允许 SSH 服务并启用 UFW。输入 y 并按下 ENTER 以确认并启用 UFW。
sudo ufw allow ssh
sudo ufw enable
当 UFW 正在运行且已启用时,你应该得到输出 “Firewall is active and enabled on system startup”。

接下来,执行以下 ufw 命令以允许你的本地网络子网访问 NFS 服务器。以下命令将允许 192.168.10.0/24 访问 NFS 服务器。
sudo ufw allow from 192.168.10.0/24 to any port nfs
最后,执行以下 ufw 命令来重新加载并验证 UFW 状态。
sudo ufw reload
sudo ufw status
你应该看到 NFS 端口 2049 已添加到 UFW;只有网络子网 192.168.10.0/24 能够访问该端口。

设置伪文件系统与导出
伪文件系统(Pseudo filesystem)是一种虚拟文件系统,允许你将 NFS 共享目录设置为单一文件系统。因此,你不必使用多个共享目录,而是可以为所有共享目录使用一个单一的伪文件系统。
在接下来的章节中,你将在 NFS 服务器上设置一个伪文件系统,并将其用作 NFS 客户端的单一共享文件系统。
运行以下命令创建新目录 /shared、/shared/data 和 /shared/documents。然后,通过 chown 将所有权更改为 nobody 和 nogroup。
mkdir -p /shared/{data,documents}
sudo chown -R nobody:nogroup /shared
现在使用下面的命令创建其他目录 /exports、/exports/home、/exports/data 和 /exports/documents。并且务必将所有权更改为 nobody 和 nogroup。
mkdir -p /exports/{data,home,documents}
sudo chown -R nobody:nogroup /exports
接下来,将 /home 目录作为伪文件系统挂载到 /exports/home 目录,将共享目录 /shared/data 挂载到 /exports/data,并将共享目录 /shared/documents 挂载到 /exports/documents。
sudo mount --bind /home /exports/home
sudo mount --bind /shared/data /exports/data
sudo mount --bind /shared/documents /exports/documents

使用下面的 df 命令验证已挂载的文件系统列表。参数 -a 用于显示所有可用的文件系统,包括伪文件系统。
sudo df -ah
你应该看到三个伪文件系统可用并已挂载。

你也可以通过 /etc/fstab 文件永久设置伪文件系统。使用 nano 编辑器打开 /etc/fstab 文件。
sudo nano /etc/fstab
将以下配置添加到文件中:
/home /exports/home none bind /shared/data /exports/data none bind /shared/documents /exports/documents none bind
完成后保存并关闭文件。
你可以将 /exports 导出目录作为伪文件系统添加到 NFS 服务器。
使用以下 nano 编辑器命令打开文件 /etc/exports。
sudo nano /etc/exports
将以下行添加到文件中。
/exports 192.168.10.0/255.255.255.0(rw,no_root_squash,no_subtree_check,crossmnt,fsid=0)
完成后保存并关闭文件。
以下是本例中使用的一些 NFS 选项:
- rw:允许 NFS 服务器和客户端对该卷/目录进行读写访问。
- no_subtree_check:禁用子树检查,这具有一定安全影响,但在某些情况下可以提高可靠性。
- no_root_squash:禁用 root 压缩(root squashing)。此选项主要对无盘客户端有用。
- fsid=0:对于 NFSv4,此参数用于告知 NFS 服务器该导出是所有导出文件系统的根。
接下来,执行以下命令来重启 nfs-server 服务并应用更改。然后,验证 nfs-server 以确保该服务正在运行。
sudo systemctl restart nfs-server
sudo systemctl status nfs-server
你应该看到类似这样的输出:

最后,运行以下命令来检查 NFS 服务器上的导出目录和文件系统。
sudo showmount -e 192.168.10.15
sudo showmount -e
如果一切顺利,你应该看到 /exports 目录已在 NFS 服务器上导出。

设置 NFS 客户端
至此,你已经配置了带有伪文件系统的 NFS 服务器,并通过 UFW 保护了 NFS 服务器。现在,你将设置 Debian 客户端机器并挂载 NFS 服务器的共享文件系统。
登录到客户端机器并更新 Debian 仓库以获取最新的软件包信息。然后,通过下面的 apt 命令安装 nfs-common 软件包。
sudo apt update
sudo apt install nfs-common

软件包安装完成后,运行以下命令创建目标挂载目录 /users、/data 和 /documents。
mkdir -p /users /data /documents
接下来,运行下面的 mount.nfs4 命令,将导出的伪文件系统挂载到目标目录。本例中,伪文件系统 /home 挂载到 /users 目录,/data 挂载到 /data 目录,/documents 挂载到 /documents 目录。
sudo mount.nfs4 192.168.10.15:/home /users
sudo mount.nfs4 192.168.10.15:/data /data
sudo mount.nfs4 192.168.10.15:/documents /documents

使用下面的 df 命令验证已挂载的文件系统列表。
sudo df -h
如果成功,你应该看到 NFS 服务器的每个伪文件系统都挂载到了相应的目标目录,如下所示:

此外,你也可以像这样挂载伪文件系统的根。如果查看 /nfs 目标目录,你应该会看到三个不同的目录 /home、/data 和 /documents。
mkdir -p /nfs
sudo mount.nfs4 192.168.10.15:/ /nfs -o soft,intr,rsize=8192,wsize=8192

通过 /etc/fstab 挂载 NFS 服务器
在前面,你已经通过 mount.nfs4 命令挂载了 NFS 服务器。接下来的章节将向你展示如何通过 /etc/fstab 文件永久挂载 NFS 服务器。
首先,通过下面的 umount 命令卸载 NFS 服务器。
sudo umount /users /data /documents
现在使用以下 nano 编辑器命令打开文件 /etc/fstab。
sudo nano /etc/fstab
将以下行添加到文件中。
192.168.10.15:/home /users nfs4 soft,intr,rsize=8192,wsize=8192 192.168.10.15:/data /data nfs4 soft,intr,rsize=8192,wsize=8192 192.168.10.15:/documents /documents nfs4 soft,intr,rsize=8192,wsize=8192
完成后保存文件并退出编辑器。
接下来,运行下面的 systemctl 命令来重新加载 systemd 管理器。然后,运行 mount 命令来挂载 /etc/fstab 文件中的所有可用文件系统。
sudo systemctl daemon-reload
sudo mount -a
然后使用以下 df 命令验证已挂载的文件系统列表。如果成功,你应该看到 NFS 服务器已挂载到各个目标目录。
sudo df -h

你也可以尝试重启客户端机器来查看效果。如果一切顺利,NFS 服务器应该会通过 /etc/fstab 文件自动挂载。
sudo reboot
结论
就是这样!你已经在 Debian 12 服务器上完成了 NFS 服务器和客户端的安装。你还显式配置了 NFS 服务器上的 NFSv4 和伪文件系统。此外,你已经通过 UFW(Uncomplicated Firewall)保护了 NFS 服务器。
最后,你还完成了 Debian 机器上 NFS 客户端的配置,并成功通过在你的 Ubuntu 机器上的 /etc/fstab 文件配置了 NFS 服务器自动挂载。你现在可以开始配置它以满足你的需求。