介绍
NFS,或网络文件系统,是一个分布式文件系统协议,允许您在您的服务器上安装远程目录. 这允许您在不同的位置管理存储空间,并从多个客户端写入该空间。
在本指南中,您将了解如何在Rocky Linux 9上安装NFS功能所需的软件,在服务器和客户端上配置两个NFS安装,并安装和卸载远程共享。
前提条件
您将在本教程中使用两个服务器,其中一个与另一个共享其文件系统的一部分。
- 两个 Rocky Linux 9 服务器. 每个服务器都应该有一个具有
sudo
特权的非root用户,使用 UFW 设置的防火墙和私人网络,如果可用
- 有关帮助设置具有
sudo
特权的非root用户和防火墙的帮助,请遵循我们的 初始服务器设置与 Rocky Linux 9指南。 - 如果您正在为您的服务器和客户端使用 DigitalOcean Droplets,您可以在我们的文档中阅读有关设置私人网络的更多信息。
在本教程中,共享其目录的服务器将被称为 host,并将这些目录设置为 client的服务器。
在本教程中,这些 IP 地址将被host_ip
和client_ip
所引用。
步骤 1 – 下载和安装组件
您将开始在每个服务器上安装所需的组件。
关于客人
在 host服务器上,使用dnf
包管理器来安装nfs-utils
包,这将允许您共享您的目录:
1sudo dnf install nfs-utils
安装这些包后,切换到客户端服务器。
关于客户
在客户端服务器上,您需要安装相同的nfs-utils
包:
1[environment second]
2sudo dnf install nfs-utils
现在,这两个服务器都有必要的包,你可以开始配置它们。
步骤 2 — 在主机上创建共享目录
您将共享两个单独的目录,具有不同的配置设置,以说明NFS安装可以根据超级用户访问进行配置的两种关键方式。
但是,NFS 安装的目录并非安装系统的一部分,因此默认情况下,NFS 服务器拒绝执行需要超级用户权限的操作。
有时,然而,在客户端系统上有可信的用户需要在安装的文件系统上执行这些操作,但他们不需要在主机上获得超级用户访问。
示例1:导出通用山
在第一个示例中,您将创建一个使用默认 NFS 行为的通用 NFS 安装程序,以使具有 root 权限的用户很难使用这些 client 超级用户权限与 client 主机进行交互。
首先,创建共享目录(使用mkdir
的-p
选项,如果需要,将创建整个文件路径):
1sudo mkdir /var/nfs/general -p
由于您正在使用sudo
创建该目录,因此目录属于 host的 root用户:
1ls -dl /var/nfs/general
1[secondary_label Output]
2drwxr-xr-x 2 root root 4096 Apr 17 23:51 /var/nfs/general
NFS 将在客户端上的任何 root 操作转换为没有人
用户作为安全措施,因此,您需要将目录所有权更改为没有人
:
1sudo chown nobody /var/nfs/general
您现在已经准备好导出此目录。
示例 2:导出家庭目录
在第二个例子中,目标是使存储在客户端服务器上的用户主目录可用,同时允许这些客户端服务器的受信任管理员获得他们需要的访问以便方便地管理用户。
要做到这一点,您将导出/home
目录. 由于它已经存在,您不需要创建它. 您也不会更改权限。
步骤 3 — 在主机服务器上配置 NFS 导出
接下来,您将潜入NFS配置文件,以设置这些资源的共享。
Rocky Linux 9 附带的默认文本编辑器是 vi
。 vi
是一个非常强大的文本编辑器,但对于缺乏经验的用户来说,它可能有点杂,您可能想安装一个更易于使用的编辑器,例如 nano
,以便在 Rocky Linux 9 服务器上编辑配置文件:
1sudo dnf install nano
在 host机上,在nano
中打开/etc/exports
文件或您最喜欢的文本编辑器,使用 root权限:
1sudo nano /etc/exports
在 Rocky Linux 9 上,此文件默认情况下将是空的,这是你需要创建的语法:
1[label /etc/exports]
2directory_to_share client(share_option1,...,share_optionN)
请确保将这里显示的client_ip
定位符更改为您的实际 IP 地址:
1[label /etc/exports]
2/var/nfs/general client_ip(rw,sync,no_subtree_check)
3/home client_ip(rw,sync,no_root_squash,no_subtree_check)
在这里,您正在使用相同的配置选项对两个目录,除了no_root_squash
。
rw
:此选项使客户端计算机能够阅读和写入卷。sync
:此选项强迫NFS在回复之前将更改写到磁盘上。这导致一个更稳定和一致的环境,因为答案反映了远程卷的实际状态。然而,它也降低了文件操作的速度。no_subtree_check
: 此选项阻止了次要检查,这是一个过程,在那里主机必须检查文件是否实际上仍然可用于每个被导出的请求。这可能会导致许多问题,当文件被重新命名,而客户端已经打开它。在几乎所有情况下,最好禁用次要检查。no_otroot_squash
: 默认情况下
当您完成更改时,保存并关闭文件. 如果您正在使用nano
,请按Ctrl+X
,然后在提示时按Y
,然后输入。
1sudo systemctl enable nfs-server
2sudo systemctl start nfs-server
验证使用systemctl status
开始服务:
1sudo systemctl status nfs-server
1[secondary_label Output]
2● nfs-server.service - NFS server and services
3 Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: >
4 Drop-In: /run/systemd/generator/nfs-server.service.d
5 └─order-with-mounts.conf
6 Active: active (exited) since Mon 2022-08-08 17:41:18 UTC; 4s ago
7 Process: 14348 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemct>
8 Process: 14336 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
9 Process: 14335 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
10 Main PID: 14348 (code=exited, status=0/SUCCESS)
11
12Aug 08 17:41:18 rocky9-nfs-host systemd[1]: Starting NFS server and services...
13Aug 08 17:41:18 rocky9-nfs-host systemd[1]: Started NFS server and services.
然而,在您实际上可以使用新股票之前,您需要确保防火墙规则允许对这些股票的流量。
步骤 4 – 在主机上调整防火墙
如果您正在按照我们的 Rocky Linux 9 初始服务器设置指南推荐运行防火墙
,请检查防火墙-cmd
输出的服务
行中目前允许使用哪些服务:
1firewall-cmd --permanent --list-all | grep services
1[secondary_label Output]
2services: cockpit dhcpv6-client ssh
在您的系统上,只允许核心系统服务,因此您需要添加NFS流量规则。Rocky Linux上的NFS使用三个不同的服务,它们都需要通过防火墙被允许。
1firewall-cmd --permanent --add-service=nfs
2firewall-cmd --permanent --add-service=mountd
3firewall-cmd --permanent --add-service=rpc-bind
4firewall-cmd --reload
您可以检查是否已添加:
1firewall-cmd --permanent --list-all | grep services
1[secondary_label Output]
2services: cockpit dhcpv6-client mountd nfs rpc-bind ssh
请注意,这将为这些服务在全球范围内打开防火墙,而不是仅限于一个客户端。这不应该是一个问题,因为您已经配置了您的 NFS 安装程序以仅限于一个 IP 地址。
步骤 5 – 在客户端上创建 Mount 点和 Mount 目录
现在, ** 主机** 服务器已配置并服务其份额,您将准备您的 ** 客户端**。
为了在客户端上提供远程共享,您需要将您想要共享的 **主机上的目录插入到客户端上的空目录中。
<$>[注] 注: 如果你的安装点中有文件和目录,他们会被隐藏,一旦你安装了NFS共享。为了避免重要文件的丢失,请确保如果你安装在已经存在的目录中,目录是空的。
你将创建两个目录为你的山:
1[environment second]
2sudo mkdir -p /nfs/general
3sudo mkdir -p /nfs/home
现在你有位置将远程共享放置,并且你已经打开了防火墙,你可以使用你的主机服务器的IP地址来配置共享:
1[environment second]
2sudo mount host_ip:/var/nfs/general /nfs/general
3sudo mount host_ip:/home /nfs/home
這些命令將從主機電腦將股票安裝到 client機器上。您可以以幾種方式雙重檢查它們是否成功安裝。您可以用「mount」或「findmnt」命令檢查這一點,但「df -h」提供了更易讀的輸出:
1[environment second]
2df -h
1[secondary_label Output]
2[environment second]
3Filesystem Size Used Avail Use% Mounted on
4Filesystem Size Used Avail Use% Mounted on
5devtmpfs 370M 0 370M 0% /dev
6tmpfs 405M 0 405M 0% /dev/shm
7tmpfs 405M 11M 394M 3% /run
8tmpfs 405M 0 405M 0% /sys/fs/cgroup
9/dev/vda1 25G 1.5G 24G 6% /
10tmpfs 81M 0 81M 0% /run/user/0
11host_ip:/var/nfs/general 25G 1.6G 24G 7% /nfs/general
12host_ip:/home 25G 1.6G 24G 7% /nfs/home
您安裝的兩個配件都出現在底部,因為它們是從相同的檔案系統上安裝的,所以它們顯示相同的磁碟使用率。
第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 nobody 0 Aug 8 18:24 /nfs/general/general.test
因为你在不改变NFS的默认行为的情况下安装了这个卷,并通过sudo
命令创建了该文件作为 client机器的 root用户,因此文件的默认所有权将变成没有人
。
示例 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 Aug 8 18:26 /nfs/home/home.test
你使用sudo
命令创建了home.test
作为 root,就像你创建了general.test
文件一样。然而,在这种情况下,它属于 root,因为当你在这个安装器上指定no_root_squash
选项时,你翻过了默认行为。
步骤 7 — 在 Boot 上安装远程 NFS 目录
您可以通过将它们添加到 client上的 /etc/fstab
文件,在启动时自动安装远程 NFS 共享。
在文本编辑器中打开 /etc/fstab
与 root 特权:
1[environment second]
2sudo nano /etc/fstab
在文件的底部,为您的每个股票添加一个行,它们将看起来像这样:
1[label /etc/fstab]
2[environment second]
3. . .
4host_ip:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
5host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
<$>[注] 注: 您可以在 NFS 手册中找到有关您指定的选项的更多信息(https://linux.die.net/man/5/nfs)。
客户端将在启动时自动安装远程分区,但可能需要几分钟才能建立连接并使共享可用。
步骤 8 — 卸载 NFS 远程共享
如果您不再希望远程目录安装在您的系统上,您可以通过离开共享的目录结构并卸载来卸载它,如下:
1[environment second]
2cd ~
3sudo umount /nfs/home
4sudo umount /nfs/general
请注意,该命令被命名为上
,而不是卸载
,正如你所期望的那样。
这将删除远程共享,只留下可访问的本地存储:
1[environment second]
2df -h
1[secondary_label Output]
2[environment second]
3Filesystem Size Used Avail Use% Mounted on
4devtmpfs 370M 0 370M 0% /dev
5tmpfs 405M 0 405M 0% /dev/shm
6tmpfs 405M 11M 394M 3% /run
7tmpfs 405M 0 405M 0% /sys/fs/cgroup
8/dev/vda1 25G 1.5G 24G 6% /
9tmpfs 81M 0 81M 0% /run/user/0
如果您还想防止他们在下一次重新启动时被远程安装,请编辑 /etc/fstab
,并通过在行开始时放置一个 #
字符来删除行或评论它。
结论
在本教程中,您创建了一个 NFS 主机,并通过创建两个不同的 NFS 安装程序来说明一些关键的 NFS 行为,您与一个 NFS 客户端共享。
如果您想在生产中实现 NFS,重要的是要注意,协议本身不是加密的。在您通过私人网络共享的情况下,这可能不是一个问题。