返回博客

在 Ubuntu 20.04 上设置 NFS 挂载

在 Ubuntu 20.04 上设置 NFS 挂载

Network File System (NFS) 是一种分布式存储解决方案。它是一种文件系统协议,允许在本地服务器上挂载远程目录,并像使用本地存储一样使用它。NFS 允许多个客户端共享远程存储。它非常适合经常需要共享资源的环境。NFS 构建在 ONC RPC(开放网络计算远程过程调用)系统之上。它是 RFC(请求意见稿)中定义的一个开放标准。这允许任何人实现该协议。

在本指南中, 我们将介绍在 Ubuntu 20.04 上设置和配置 NFS 挂载的步骤。

前提条件

正如 NFS 的描述所暗示的,NFS 配置有两个部分:

  • 主机: 物理存储数据并与“客户端”系统共享存储。

  • 客户端: 连接到“主机”并像使用本地存储一样使用远程存储的系统。

在我们的演示中,我们将使用两台服务器,均配置为 Ubuntu 20.04。这里有一个关于 如何设置您的 Ubuntu 服务器 的简易指南。在整个指南中,这些服务器将被简称为 主机客户端。请注意,即使有多个 客户端,其操作也是相同的。

服务器被分配了以下 IP 地址。这些服务器由 CloudSigma 托管:

  • 主机: 31.171.240.79

  • 客户端: 31.171.250.109

请确保将它们替换为适当的 IP 地址。

安装 NFS

NFS 可以直接从 Ubuntu 官方软件源中获取。针对 主机客户端 系统有不同的软件包。

  • 在主机上安装 NFS

在主机上,我们需要使机器能够充当 NFS 主机 的组件。它以软件包 nfs-kernel-server 的形式提供。Ubuntu 使用 APT 作为包管理器。首先,启动终端,并更新 APT 软件包数据库:

Server Apt Update

接下来,安装 nfs-kernel-server 软件包。如果需要, APT 将处理任何其他依赖项:

Install nfs kernel server

  • 在客户端上安装 NFS

客户端 系统上,我们需要连接到 主机 目录的网络功能。它不需要 NFS 服务器功能。在 Ubuntu 上,它打包在 nfs-common 软件包中。更新 APT 软件包数据库:

Client apt update

然后,安装 nfs-common 软件包:

Install nfs common

主机上的共享目录

接下来,我们将共享两个独立的目录,每个目录都有不同的配置。我们将演示 NFS 挂载在超级用户访问权限方面的两种关键工作方式。默认情况下,超级用户有权在整个系统上执行任何操作。然而,NFS 挂载的目录并不是它们所挂载的系统的一部分。NFS 服务器将拒绝执行任何需要超级用户权限的操作。这种限制意味着客户端无权在 NFS 挂载上进行写入、重新分配所有权以及其他超级用户任务。

可以允许某些受信任的用户在挂载的文件系统上执行这些任务。然而,这伴随着一定的风险,因为这样的 客户端 可能会获得对 主机 的完全访问权限。这可以通过适当的用户权限管理来缓解。在 Linux 上,sudoers 文件控制系统上的所有用户权限。欲了解更多信息,您可以查看我们关于 如何配置 Linux sudoers 文件.

  • 通用挂载

第一个示例将是具有默认 NFS 行为的通用 NFS 挂载。在这种方法中,客户端极难在挂载上执行超级用户操作。这种类型的 NFS 挂载通常用于文件存储、使用 CMS(内容管理系统)上传或共享项目文件等。

以下步骤将在 主机 系统上执行。首先,创建一个用于共享的目录,标记为 nfs:

Create nfs general dir

由于该目录是使用 sudo 权限创建的,因此所有者将是 root:

List nfs general

作为默认配置,NFS 会将客户端的任何 root 操作转换为 nobody:nogroup 凭据以作为安全措施。为了保持一致性,请更改目录所有权以匹配该凭据:

Change owner nogroup

  • 主目录

第二个示例是使 host 用户的主目录对客户端可用。来自所选客户端的受信任管理员可以访问以方便地管理用户。 /home 目录默认存在,因此无需创建任何目录。至于目录权限,无需进行任何更改,因为这带来的问题会多于好处。

配置 NFS 导出

要共享的目录现在已创建。接下来,必须配置 NFS 以使其对客户端可用。NFS 使用配置文件来跟踪要共享的目录。在您选择的文本编辑器中打开以下 NFS 配置文件:

exports file

文件的注释部分描述了配置的一般语法结构。简而言之,任何目录都必须按以下格式声明:

对于我们决定共享的这两个目录,配置将如下所示。这两个目录具有几乎相同的配置选项:

exports file mod

以下是配置选项的简要说明:

  • rw:客户端被授予对该卷的读取和写入权限。

  • sync:强制 NFS 在回复之前将更改写入磁盘。它提供了更稳定和一致的体验。回复将反映远程卷的实际状态。但是,文件操作会较慢。

  • no_subtree_check:防止子树检查。如果不禁用,主机将被迫针对来自客户端的每个请求检查导出树中是否存在该文件。这可能会导致许多问题,例如,在客户端使用文件时重命名该文件。在大多数情况下,禁用子树检查是首选方法。

  • no_root_squash:如前所述,NFS 会将来自远程 root 用户的任何请求转换为非特权用户。这是一项旨在防止对主机系统进行未授权访问的安全功能。但是,使用此选项将禁用此行为。

保存配置文件并退出编辑器。要使更改生效,请重启 NFS 服务器:

Restart nfs kernel server

调整防火墙

对于任何服务器,正确的防火墙配置都是必不可少的。假设您已经相应地配置了您的 Ubuntu 20.04 server 服务器,UFW 防火墙应该处于活动状态。它是一个简单但功能强大的防火墙,大多数 Linux 发行版都附带它。对于初学者,这里有一个快速指南解释了 UFW、它的工作原理以及常见的 UFW 使用示例.

默认情况下,防火墙将阻止任何传入和传出的流量。为了确保 NFS 服务器能够正常连接和交换流量,我们需要为 NFS 协议添加一个例外。首先,检查防火墙的状态。它还会打印所有当前规则:

ufw status

正如我们所见,系统仅允许 SSH 流量。我们需要添加一个例外以允许 NFS 流量。

在大多数情况下,强烈建议使用仍允许必要流量的最严格规则。因此,我们将仅允许选定的客户端连接到主机:

ufw allow ports

之后,再次检查防火墙状态:

ufw status after change

创建挂载点

服务器现在已准备好允许 客户端系统连接到 NFS 协议。接下来,我们必须准备 客户端。要访问远程卷,必须将其本地挂载到 客户端上。至于挂载点,建议使用专用的空目录。

对于这两个远程卷,创建两个独立的挂载点:

Create client nfs general directory

Create client nfs home directory

现在挂载点已准备就绪,您需要挂载远程卷:

Mount general directory on client

Mount home directory on client

我们可以验证挂载是否成功。检查所有已挂载卷的列表:

Disk free in client

瞧!远程卷已成功挂载。我们还可以使用以下命令检查空间使用情况:

Disk usage in client home

测试 NFS 访问

到目前为止,远程卷已正常挂载。但是,如果客户端无法在远程卷上读/写数据,那将毫无用处。为了进行验证,请在 NFS 挂载上创建一个虚拟文件。在这里,该文件将以 root 权限创建,以测试特定于 root 的配置是否正常运行:

Create file in nfs

接下来,检查文件的所有权:

Check ownership of file created

正如我们所见,NFS 正在将文件所有者转换为 nobody:nogroup/var/nfs/ general 目录的所有权属于 nobody:nogroup,因此 NFS 正在转换文件所有权。是时候测试另一个 NFS 挂载了:

Create home file

检查文件的存在和所有权:

Check ownership of home file

在这种情况下,NFS 没有转换文件的所有权。该客户端被配置为能够执行管理操作。此外,原始的 主机 目录 /home 的所有权不属于 nobody:nogroup.

附加技巧

  • 开机时挂载

到目前为止,我们必须手动将 NFS 卷挂载到本地目录。如果不卸载,NFS 挂载将一直持续到系统重启。如果经常使用 NFS 卷,那么手动挂载会变得非常繁琐。在有多个 NFS 挂载的情况下,逐个手动挂载是不切实际的。

使用 /etc/fstab 文件,我们可以使该过程自动化。在启动期间,此脚本将自动在目标挂载点上挂载 NFS 卷。在文本编辑器中打开该文件:

fstab file

添加以下行以挂载主机系统的远程卷:

fstab file after change

保存脚本并关闭文本编辑器。在下次启动时,Linux 将自动挂载远程卷。请注意,由于系统需要连接并挂载卷,因此启动可能需要一些时间。

  • 卸载 NFS 卷

如果不再需要远程卷,则卸载这些卷将把它们从客户端系统中移除。但是,在卸载之前,请确保没有应用程序/脚本正在使用该远程卷。卸载 NFS 挂载与卸载任何其他挂载类似。在这种情况下,卸载 /nfs/home/nfs/general:

Unmount nfs

然后,验证该操作:

Disks after unmount

结语

在本指南中,我们创建了一个 NFS 服务器并演示了 NFS 远程共享的一些基础知识。如果您有兴趣在生产环境中部署 NFS,请记住 NFS 协议是未加密的。这可能会带来一些安全隐患,例如中间人攻击。

祝您使用愉快!

author

Pranay Kapgate

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。