如何在Rocky Linux 8上设置NFS挂载

介绍

NFS,即网络文件系统,是一种分布式文件系统协议,允许你在服务器上挂载远程目录。这使你能够在不同位置管理存储空间,并从多个客户端向该空间写入。NFS为通过网络访问远程系统提供了一种比较标准和高效的方式,并且在需要经常访问共享资源的情况下表现良好。

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

前提条件

在本教程中,您将使用两台服务器,其中一台将其文件系统的一部分与另一台共享。要跟随本教程,您需要:

  • Two Rocky Linux 8 servers. Each of these should have a non-root user with sudo privileges, a firewall set up with UFW, and private networking, if it’s available to you.For assistance setting up a non-root user with sudo privileges and a firewall, follow our Initial Server Setup with Rocky Linux 8 guide.If you’re using DigitalOcean Droplets for your server and client, you can read more about setting up a private network in our documentation on How to Create a VPC.

在本教程中,共享目录的服务器将被称为主机,挂载这些目录的服务器将被称为客户端。您需要知道两者的IP地址。如果可用,请确保使用私有网络地址。

在本教程中,我们将使用主机IP和客户端IP来指代这些IP地址的占位符。请根据需要进行替换。

第一步 – 下载和安装组件

您将从每个服务器上安装所需的组件开始。

在主持人身上

在主机服务器上使用dnf软件包管理器安装nfs-utils软件包,这将允许您共享您的目录。

  1. sudo dnf install nfs-utils

 

一旦这些软件包安装完成后,请切换到客户端服务器。

在客户端上

在客户端服务器上,您需要安装相同的nfs-utils软件包。

  1. sudo dnf install nfs-utils

 

现在两台服务器都有必要的软件包,你可以开始配置它们了。

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

您将共享两个不同的目录,具有不同的配置设置,以便说明NFS挂载在超级用户访问方面可以配置的两种关键方式。

超级用户在他们的系统上可以随时做任何事情。然而,挂载的NFS目录并不属于它们所挂载的系统的一部分,因此,默认情况下,NFS服务器拒绝执行需要超级用户权限的操作。这个默认限制意味着客户端上的超级用户无法以root身份写入文件、重新分配所有权或在NFS挂载点上执行任何其他超级用户任务。

然而,有时候客户端系统上存在可信的用户需要在挂载的文件系统上执行这些操作,但又没有必要在主机上获得超级用户权限。你可以配置NFS服务器来允许这样的操作,尽管这会引入一定的风险,恶意用户可能会获得对整个主机系统的root访问权限。

例子1:出口一种通用型支架

在第一个例子中,你会创建一个通用的NFS挂载,该挂载使用默认的NFS行为,使得客户机上拥有root权限的用户很难使用那些客户机superuser权限与主机互动。你可以使用类似这样的方式来存储使用内容管理系统上传的文件,或者为用户创建空间来方便共享项目文件。

首先,使用mkdir的-p选项创建共享目录(如果需要,该选项将创建整个文件路径)。

  1. sudo mkdir /var/nfs/general -p

 

由于您使用sudo创建它,该目录归主机的root用户所有。

  1. ls -dl /var/nfs/general

 

Output

drwxr-xr-x 2 root root 4096 Apr 17 23:51 /var/nfs/general

为了安全起见,NFS会将客户端上的任何根操作都转换为nobody用户。因此,您需要将目录的所有权更改为nobody。

  1. sudo chown nobody /var/nfs/general

 

你现在可以将该目录导出了。

例子2:导出家目录

在第二个例子中,目标是使用户主目录存储在主机上,并在客户端服务器上可用,同时允许这些客户端服务器的可信管理员方便地访问以管理用户。

为了实现这一点,您将会导出/home目录。由于它已经存在,您不需要创建它。您也不会更改权限。如果您这样做,可能会给主机上拥有home目录的任何人带来一系列问题。

步骤3 — 配置主机服务器上的NFS共享

接下来,您将进入NFS配置文件,设置共享这些资源。

Rocky Linux 9默认自带的文本编辑器是vi。vi是一个非常强大的文本编辑器,但对于没有使用经验的用户来说可能有点晦涩。你可能希望安装一个更加用户友好的编辑器,比如nano,以便在你的Rocky Linux 8服务器上编辑配置文件。

  1. sudo dnf install nano

 

在主机上,使用root权限用nano或你喜欢的文本编辑器打开/etc/exports文件。

  1. sudo nano /etc/exports

 

在Rocky Linux 8上,默认情况下,该文件将是空的。你需要创建的语法如下:

/etc/exports 的意思是“导出文件”
directory_to_share    client(share_option1,...,share_optionN)

为您计划分享的每个目录添加一行。确保将此处显示的client_ip占位符更改为您的实际IP地址。

/export
/var/nfs/general    client_ip(rw,sync,no_subtree_check)
/home               client_ip(rw,sync,no_root_squash,no_subtree_check)

在这里,你对两个目录使用相同的配置选项,只是no_root_squash例外。看一下每个选项的意思。

  • rw: This option gives the client computer both read and write access to the volume.
  • sync: This option forces NFS to write changes to disk before replying. This results in a more stable and consistent environment since the reply reflects the actual state of the remote volume. However, it also reduces the speed of file operations.
  • no_subtree_check: This option prevents subtree checking, which is a process where the host must check whether the file is actually still available in the exported tree for every request. This can cause many problems when a file is renamed while the client has it opened. In almost all cases, it is better to disable subtree checking.
  • no_root_squash: By default, NFS translates requests from a root user remotely into a non-privileged user on the server. This was intended as security feature to prevent a root account on the client from using the file system of the host as root. no_root_squash disables this behavior for certain shares.

当你完成更改后,保存并关闭文件。如果你使用的是nano编辑器,按下Ctrl+X,然后在提示时按Y,接着按Enter。然后,为了让你配置的客户端能够访问这些共享内容,启动NFS服务器并使用systemctl使其自动运行。

  1. sudo systemctl enable nfs-server
  2. sudo systemctl start nfs-server

 

使用systemctl status验证服务是否已经启动。

  1. sudo systemctl status nfs-server

 

Output

● nfs-server.service – NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: > Drop-In: /run/systemd/generator/nfs-server.service.d └─order-with-mounts.conf Active: active (exited) since Mon 2022-08-08 17:41:18 UTC; 4s ago Process: 14348 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemct> Process: 14336 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS) Process: 14335 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 14348 (code=exited, status=0/SUCCESS) Aug 08 17:41:18 rocky8-nfs-host systemd[1]: Starting NFS server and services… Aug 08 17:41:18 rocky8-nfs-host systemd[1]: Started NFS server and services.

然而,在您实际使用新的共享之前,请务必确保防火墙规则允许共享的流量通过。

第四步-调整主机防火墙。

如果按照我们的初步设置ROCKY LINUX 8指南,您正在运行firewalld防火墙,请查看firewall-cmd输出中的services行,以确定当前允许的服务。

  1. firewall-cmd –permanent –list-all | grep services

 

Output

services: cockpit dhcpv6-client ssh

在您的系统上,只允许核心系统服务,所以您需要为NFS流量添加规则。Rocky Linux上的NFS使用了三个不同的服务,这些服务都需要通过防火墙。您可以使用firewall-cmd添加这些规则。

  1. firewall-cmd –permanent –add-service=nfs
  2. firewall-cmd –permanent –add-service=mountd
  3. firewall-cmd –permanent –add-service=rpc-bind
  4. firewall-cmd –reload

 

你可以验证它们是否已被添加。

  1. firewall-cmd –permanent –list-all | grep services

 

Output

services: cockpit dhcpv6-client mountd nfs rpc-bind ssh

请注意,这将全球范围内为这些服务打开您的防火墙,而不仅仅限制在单个客户端。这应该不成问题,因为您已经将您的NFS挂载配置为仅对一个IP地址可访问。如果您需要直接为您的firewalld配置增加更多安全性,您可以实施firewalld区域。

第五步 – 在客户端上创建挂载点和挂载目录

现在主机服务器已经配置并提供了其共享文件,你将要配置你的客户端。

为了使远程共享在客户端上可用,您需要将主机上要共享的目录挂载到客户端上的空目录中。

Note

注意:如果在您的挂载点上存在文件和目录,它们会在您挂载NFS共享后变为隐藏状态。为了避免重要文件丢失,请确保如果您要挂载到已存在的目录中,该目录必须为空。

您需要创建两个目录来挂载您的文件:

  1. sudo mkdir -p /nfs/general
  2. sudo mkdir -p /nfs/home

 

既然你已经有了一个可以放置远程共享的位置并且已经打开了防火墙,你可以使用主机服务器的IP地址来挂载这些共享。

  1. sudo mount host_ip:/var/nfs/general /nfs/general
  2. sudo mount host_ip:/home /nfs/home

 

以下命令将会在客户机上挂载主机计算机的共享文件夹。您可以通过多种方式来验证挂载是否成功。您可以使用 mount 或 findmnt 命令进行验证,但 df -h 命令提供了更易读的输出。

  1. df -h

 

Output

Filesystem Size Used Avail Use% Mounted on Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 11M 394M 3% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 1.5G 24G 6% / tmpfs 81M 0 81M 0% /run/user/0 host_ip:/var/nfs/general 25G 1.6G 24G 7% /nfs/general host_ip:/home 25G 1.6G 24G 7% /nfs/home

你挂载的这两个共享都显示在底部。因为它们是从同一个文件系统挂载的,所以它们显示相同的磁盘使用情况。

第六步 — NFS访问测试

接下来,通过向每个份额写入一些内容测试对它们的访问。

示例1:普通股份

首先,将一个测试文件写入到/var/nfs/general共享目录中。

  1. sudo touch /nfs/general/general.test

 

然后,检查它的所有权:

  1. ls -l /nfs/general/general.test

 

Output

-rw-r–r–. 1 nobody nobody 0 Aug 8 18:24 /nfs/general/general.test

因为您在未更改NFS的默认行为的情况下安装了此卷,并通过sudo命令以客户机的root用户创建了该文件,所以该文件的所有权默认为nobody。客户端的超级用户将无法执行典型的管理操作,如更改文件的所有者或为一组用户创建新目录,以此NFS装载的共享目录。

例子2: 家目录共享

为了比较通用共享权限与家目录共享权限,请以相同方式在/nfs/home目录下创建一个文件。

  1. sudo touch /nfs/home/home.test

 

然后查看文件的所有权。

  1. ls -l /nfs/home/home.test

 

Output

-rw-r–r–. 1 root root 0 Aug 8 18:26 /nfs/home/home.test

你使用sudo命令创建了home.test文件夹,就像创建general.test文件夹一样。然而,在这种情况下,该文件夹的所有者是root,因为你在挂载时指定了no_root_squash选项,覆盖了默认行为。这样一来,你的客户端机器上的root用户就可以像root一样行事,从而方便地管理用户账户。与此同时,这意味着你不需要在主机上给予这些用户root访问权限。

第七步—开机挂载远程NFS目录

你可以将远程的NFS共享自动挂载到客户端的/etc/fstab文件中,从而在开机时自动挂载。

以管理员权限使用文本编辑器打开/etc/fstab文件。

  1. sudo nano /etc/fstab

 

在文件的底部,为每一份股份添加一行。它们会像这样:

/etc/fstab
/etc/fstab文件
. . .
host_ip:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Note

注意:您可以在NFS手册中找到有关您指定的选项的更多信息。

客户端在启动时将自动挂载远程分区,尽管建立连接和共享目录可用可能需要一些时间。

第8步 — 卸载NFS远程共享

如果你不再想让远程目录挂载到你的系统上,你可以通过移出共享目录结构并卸载来取消挂载,像这样:

  1. cd ~
  2. sudo umount /nfs/home
  3. sudo umount /nfs/general

 

请注意,命令的名称是umount,而不是你所期望的unmount。

这将删除远程共享,仅让您能够访问本地存储。

  1. df -h

 

Output

Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 11M 394M 3% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 1.5G 24G 6% / tmpfs 81M 0 81M 0% /run/user/0

如果您还想防止它们在下次重新启动时重新挂载,可以编辑 /etc/fstab 文件,并删除该行或在行的开头添加 # 字符进行注释。您也可以通过移除 auto 选项来阻止自动挂载,这样您仍然可以手动挂载它。

结论

在本教程中,您创建了一个NFS主机,并通过创建两个不同的NFS挂载来展示了一些关键的NFS行为,然后将这些挂载与NFS客户端共享。

如果您希望在生产环境中实施NFS,请注意该协议本身并没有加密。在您通过私有网络共享时,这可能不会成为问题。但在其他情况下,为了保护数据,可能需要使用VPN或其他类型的加密隧道。

广告
将在 10 秒后关闭
bannerAds