如何在 Ubuntu 18.04 上设置 NFS 挂载

介绍

NFS,或网络文件系统,是一个分布式文件系统协议,允许您在您的服务器上安装远程目录. 这允许您在不同的位置管理存储空间,并从多个客户端写入该空间。

在本指南中,您将学习如何在Ubuntu 18.04上安装NFS功能所需的软件,在服务器和客户端上配置NFS安装,并安装和卸载远程共享。

前提条件

我们将在本教程中使用两个服务器,其中一个与另一个共享其文件系统的一部分。

  • 两个 Ubuntu 18.04 服务器. 每个服务器都应该有一个非root用户,配置了sudo特权,安装了与 UFW 的防火墙和私人网络,如果您可以使用它

在本教程中,我们将参考共享目录的服务器为 host,并将这些目录设置为 client的服务器。

  • 主机: 203.0.113.0
  • 客户端: 203.0.113.24

当这些 IP 地址出现在命令和配置文件中时,请用您自己的 主机客户端 IP 地址替换它们。

步骤 1 – 下载和安装组件

首先,在每个服务器上安装必要的组件。

关于客人

host服务器上,安装nfs-kernel-server包,这将允许您共享您的目录. 由于这是您在本会中使用apt进行的第一个操作,因此在安装之前,请刷新本地包索引:

1sudo apt update

接下来,安装包:

1sudo apt install nfs-kernel-server

安装这些包后,切换到客户端服务器。

关于客户

在客户端**服务器上,安装一个名为nfs-common的包,该包提供NFS功能,而不包括服务器组件。

1[environment second]
2sudo apt update

然后,安装该包:

1[environment second]
2sudo apt install nfs-common

现在,这两个服务器都有必要的包,你可以开始配置它们。

步骤 2 — 在主机上创建共享目录

我们将分享两个不同配置设置的单独目录,以说明NFS安装可以与超级用户访问有关的两种关键方式。

但是,NFS 安装的目录并非安装系统的一部分,因此默认情况下,NFS 服务器拒绝执行需要超级用户权限的操作。

有时,然而,在客户端系统上有值得信赖的用户需要在安装的文件系统上执行这些操作,但他们不需要在主机上获得超级用户访问。

示例1:导出通用山

在第一个示例中,您将创建一个使用默认 NFS 行为的通用 NFS 安装程序,以使具有 root 权限的用户难以使用这些 client 超级用户权限与 host 进行交互。

首先,创建一个共享目录:

1sudo mkdir /var/nfs/general -p

由于您正在使用sudo创建该目录,因此目录属于 hostroot用户:

1ls -la /var/nfs/general
1[secondary_label Output]
2total 8
3drwxr-xr-x 2 root root 4096 Feb 7 23:21 .
4drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..

NFS 将在客户端上的任何 root 操作转换为nobody:nogroup凭证作为安全措施,因此,您需要更改目录所有权以匹配这些凭证:

1sudo chown nobody:nogroup /var/nfs/general

您现在已经准备好导出此目录。

示例 2:导出家庭目录

在我们的第二个例子中,目标是使存储在 host上的用户主目录可用到 client服务器上,同时允许这些 client服务器的受信任管理员获得他们需要的访问以便方便地管理用户。

要做到这一点,您将导出/home目录. 由于它已经存在,您不需要创建它. 您也不会更改权限。

步骤 3 — 在主机服务器上配置 NFS 导出

接下来,我们将潜入NFS配置文件,以设置这些资源的共享。

host机器上,打开您喜爱的文本编辑器中的 /etc/exports 文件,使用 root 特权。

1sudo nano /etc/exports

该文件包含评论,显示每个配置行的总体结构,语法如下:

1[label /etc/exports]
2directory_to_share client(share_option1,...,share_optionN)

您需要为您打算共享的每个目录创建一个行. 由于我们的示例 客户端具有203.0.113.24的IP,我们的行将看起来如下。

1[label /etc/exports]
2/var/nfs/general 203.0.113.24(rw,sync,no_subtree_check)
3/home 203.0.113.24(rw,sync,no_root_squash,no_subtree_check)

在这里,我们对两个目录使用相同的配置选项,除了no_root_squash

  • rw:此选项使客户端计算机能够阅读和写入卷。
  • sync:此选项强迫NFS在回复之前将更改写到磁盘上。这导致一个更稳定和一致的环境,因为答案反映了远程卷的实际状态。然而,它也降低了文件操作的速度。
  • no_subtree_check: 此选项阻止了次要检查,这是一个过程,在那里主机必须检查文件是否实际上仍然可用于每个被导出的请求。这可能会导致许多问题,当文件被重新命名,而客户端已经打开它。在几乎所有情况下,最好禁用次要检查。
  • no_otroot_squash: 默认情况下

当您完成更改后,保存并关闭文件. 如果您正在使用nano,您可以通过按CTRL + X然后按YENTER来做到这一点。

1sudo systemctl restart nfs-kernel-server

然而,在您实际上可以使用新股票之前,您需要确保防火墙规则允许对这些股票的流量。

步骤 4 – 在主机上调整防火墙

首先,检查防火墙的状态,以确认是否已启用,如果是,则检查当前允许的内容:

1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere
7OpenSSH (v6)               ALLOW Anywhere (v6)

在我们的系统中,只允许通过SSH流量,所以我们需要为NFS流量添加一个规则。

在许多应用程序中,你可以使用sudo ufw app list并以名义启用它们,但nfs不是其中之一。然而,因为ufw还检查服务的端口和协议,你仍然可以以名义添加NFS。

使用以下命令在 host上打开端口 2049,确保取代您的 client IP 地址:

1sudo ufw allow from 203.0.113.24 to any port nfs

您可以通过运行以下操作来验证变更:

1sudo ufw status

您应该在输出中收到从端口2049允许的流量列表:

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere                 
72049 ALLOW 203.0.113.24       
8OpenSSH (v6)               ALLOW Anywhere (v6)

这确认 UFW 将仅允许 NFS 流量从您的客户端机端口2049

步骤 5 – 在客户端上创建 Mount 点和 Mount 目录

现在, ** 主机** 服务器已配置并服务其份额,您将准备您的 ** 客户端**。

要在 **客户端上提供远程共享,您需要将您想要共享的 **主机上的目录插入到 **客户端上的空目录中。

<$>[注] 注: 如果你的安装点中有文件和目录,他们会被隐藏,一旦你安装了NFS共享。为了避免重要文件的丢失,请确保如果你安装在已经存在的目录中,目录是空的。

创建两个目录,然后运行以下命令来创建第一个:

1[environment second]
2sudo mkdir -p /nfs/general

然后运行此命令来创建第二个:

1[environment second]
2sudo mkdir -p /nfs/home

现在你有位置将远程共享放置,你已经打开了防火墙,你可以使用你的主机服务器的IP地址来配置共享,这在本指南中是203.0.113.0:

1[environment second]
2sudo mount 203.0.113.0:/var/nfs/general /nfs/general
3sudo mount 203.0.113.0:/home /nfs/home

这些命令会将股票从主机安装到 client机器上。您可以通过几种方式对它们是否成功安装进行双重检查。您可以用mountfindmnt命令检查这一点,但df -h提供了更可读的输出,说明了 NFS 股票的磁盘使用情况如何不同:

1[environment second]
2df -h
 1[secondary_label Output]
 2[environment second]
 3Filesystem Size Used Avail Use% Mounted on
 4udev 480M 0 480M 0% /dev
 5tmpfs 99M 5.6M 94M 6% /run
 6/dev/vda1 25G 1.3G 23G 6% /
 7tmpfs 493M 0 493M 0% /dev/shm
 8tmpfs 5.0M 0 5.0M 0% /run/lock
 9tmpfs 493M 0 493M 0% /sys/fs/cgroup
10/dev/vda15 105M 4.4M 100M 5% /boot/efi
11tmpfs 99M 0 99M 0% /run/user/1000
12203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general
13203.0.113.0:/home 25G 1.3G 23G 6% /nfs/home

您安裝的兩個部分都出現在底部. 因為它們是從相同的檔案系統安裝的,所以它們顯示相同的磁碟使用率. 要檢查每個安裝點下實際使用的空間,請使用磁碟使用率指令「du」和安裝路徑。

1[environment second]
2du -sh /nfs/home
1[secondary_label Output]
2[environment second]
344K     /nfs/home

这表明整个家庭目录的内容只使用可用空间的44K。

第6步:测试NFS访问

接下来,通过写给每个股票的东西来测试对股票的访问。

示例1:一般目的份额

首先,将测试文件写入 /var/nfs/general 部分:

1[environment second]
2sudo touch /nfs/general/general.test

然后检查其所有权:

1[environment second]
2ls -l /nfs/general/general.test
1[secondary_label Output]
2[environment second]
3-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test

因为你在不改变NFS的默认行为的情况下安装了这个卷,并通过sudo命令创建了该文件作为 client机器的 root用户,因此文件的所有权默认为nobody:nogroup

示例 2: Home 目录共享

若要将一般用途共享的权限与主目录共享进行比较,请在 /nfs/home 中以相同的方式创建文件:

1[environment second]
2sudo touch /nfs/home/home.test

然后检查文件的所有权:

1[environment second]
2ls -l /nfs/home/home.test
1[secondary_label Output]
2[environment second]
3-rw-r--r-- 1 root root 0 Feb 7 23:56 /nfs/home/home.test

你使用sudo命令创建了home.test作为 root,就像你创建了general.test文件一样。然而,在这种情况下,它属于 root,因为当你在这个安装器上指定了no_root_squash选项时,你忽略了默认行为。

步骤 7 — 在 Boot 上安装远程 NFS 目录

您可以通过将它们添加到 client上的 /etc/fstab 文件,在启动时自动安装远程 NFS 共享。

在您喜爱的文本编辑器中打开下面的 root 特权文件:

1[environment second]
2sudo nano /etc/fstab

在文件的末尾,为您的每个份额添加一个行,如下:

1[label /etc/fstab]
2[environment second]
3. . .
4203.0.113.0:/var/nfs/general    /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
5203.0.113.0:/home       /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

<$>[注] **注:**您可以在NFS页面中找到有关指定的选项的更多信息。

1man nfs

美元

客户端服务器将在启动时自动安装远程分区,但可能需要几分钟才能建立连接并使共享可用。

步骤 8 — 卸载 NFS 远程共享

如果您不再希望远程目录安装在您的系统上,您可以通过离开共享的目录结构并卸载来卸载它。

第一個改變到家庭目錄:

1[environment second]
2cd ~

然后卸载 /nfs/home. 请注意,该命令被命名为 umount 而不是 unmount,正如你所期望的那样:

1[environment second]
2sudo umount /nfs/home

接下来,单击 unmount /nfs/ general:

1[environment second]
2sudo umount /nfs/general

这将删除远程共享,只留下可访问的本地存储:

1[environment second]
2df -h
 1[secondary_label Output]
 2[environment second]
 3
 4Filesystem Size Used Avail Use% Mounted on
 5udev 480M 0 480M 0% /dev
 6tmpfs 99M 5.5M 94M 6% /run
 7/dev/vda1 25G 1.3G 23G 6% /
 8tmpfs 493M 0 493M 0% /dev/shm
 9tmpfs 5.0M 0 5.0M 0% /run/lock
10tmpfs 493M 0 493M 0% /sys/fs/cgroup
11/dev/vda15 105M 4.4M 100M 5% /boot/efi
12tmpfs 99M 0 99M 0% /run/user/1000

如果您还想防止他们在下一次重新启动时被远程安装,请编辑 /etc/fstab,并通过在行开始时放置一个 # 字符来删除行或评论它,您也可以通过删除 auto 选项来防止自动安装,这将允许您手动安装它。

结论

在本教程中,您创建了一个 NFS 主机,并通过创建两个不同的 NFS 插件来说明一些关键的 NFS 行为,您与您的 NFS ** 客户端** 共享。 如果您正在寻求在生产中实现 NFS,重要的是要注意,协议本身不是加密的。

Published At
Categories with 技术
comments powered by Disqus