如何在 Ubuntu 20.04 上安装和配置 NFS 服务器?

Posted 网络技术联盟站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 Ubuntu 20.04 上安装和配置 NFS 服务器?相关的知识,希望对你有一定的参考价值。

NFS 或网络文件系统是一种分布式文件系统协议,允许您通过网络共享目录,使用 NFS,您可以在系统上挂载远程目录并像处理本地文件一样使用远程计算机上的文件。

默认情况下,NFS 协议未加密,不提供用户身份验证,对服务器的访问受到客户端 IP 地址或主机名的限制。


本文介绍了如何在 Ubuntu 20.04 上设置 NFSv4 服务器。我们还将向您展示如何在客户端计算机上安装 NFS 文件系统。

先决条件

我们将使用两台机器,一台运行 Ubuntu 20.04,它将充当 NFS 服务器,另一台运行我们将安装共享的任何其他 Linux 发行版。服务器和客户端应该能够通过专用网络相互通信。2049您可以使用公共 IP 地址并将服务器防火墙配置为仅允许来自受信任来源的端口上的流量。

此示例中的机器具有以下 IP:

NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range

设置 NFS 服务器

第一步是设置 NFS 服务器。我们将安装必要的软件包,创建和导出 NFS 目录,并配置防火墙。

安装 NFS 服务器

NFS 服务器包提供运行 NFS 内核服务器所需的用户空间支持。要安装软件包,请运行:

sudo apt update
sudo apt install nfs-kernel-server

安装完成后,NFS 服务将自动启动。

在 Ubuntu 20.04 上,NFS 版本 2 被禁用。版本 3 和 4 已启用。cat您可以通过运行以下命令来验证 :

sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

NFSv2 现在已经很老了,没有理由启用它。

NFS 服务器配置在/etc/default/nfs-kernel-server和/etc/default/nfs-common文件中定义。对于大多数情况,默认设置就足够了。

创建文件系统

NFSv4 服务器使用全局根目录,导出的目录是相对于这个目录的。您可以使用绑定挂载将共享挂载点链接到要导出的目录。

在本例中,我们将/srv/nfs4目录设置为 NFS 根目录。为了更好地解释如何配置 NFS 挂载,我们将共享两个具有不同配置设置的目录 (/var/www和)。归用户所有/opt/backups,归./var/www/www-data/opt/backupsroot

首先创建根目录和共享挂载点:

sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www

将挂载目录绑定到共享挂载点:

sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www

要在重新启动后使绑定挂载永久化,请打开/etc/fstab文件:

sudo nano /etc/fstab

并添加以下行:

/etc/fstab
/opt/backups /srv/nfs4/backups  none   bind   0   0
/var/www     /srv/nfs4/www      none   bind   0   0

导出文件系统

下一步是将要导出的文件系统和允许访问这些共享的客户端添加到/etc/exports文件中。

导出文件系统的每一行都具有以下形式:

export host(options)

export导出目录在哪里,host是可以访问导出的主机名或 IP 地址/范围,并且options是主机选项。

打开/etc/exports文件并添加以下行:

sudo nano /etc/exports
/srv/nfs4         192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www     192.168.33.20(rw,sync,no_subtree_check)

第一行包含fsid=0定义 NFS 根目录 ( /srv/nfs4) 的选项。192.168.33.0/24仅允许子网中的客户端访问此 NFS 卷。该crossmnt选项是共享作为导出目录的子目录的目录所必需的。

第二行显示了如何为一个文件系统指定多个导出规则。允许对整个192.168.33.0/24范围进行读取访问,并且只能对192.168.33.3IP 地址进行读取和写入访问。该sync选项告诉 NFS 在回复之前将更改写入磁盘。

最后一行是不言自明的。有关man exports终端中所有可用选项类型的更多信息。

保存文件并导出共享:

sudo exportfs -ar

每次修改/etc/exports文件时都需要运行上面的命令。如果有任何错误或警告,它们将显示在终端上。

要查看当前活动的导出及其状态,请使用:

sudo exportfs -v

输出将包括所有共享及其选项。如您所见,还有一些我们没有在/etc/exports文件中定义的选项。这些是默认选项,如果您想更改它们,您需要明确设置这些选项。

/srv/nfs4/backups
        192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www   192.168.33.20(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4       192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
        192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

在 Ubuntu 上,root_squash默认启用。这是有关 NFS 安全性的最重要选项之一。UID它通过将 root 映射到/ /GID来防止从客户端连接的 root 用户对挂载的共享具有 root 权限。nobodynogroup UIDGID

为了让客户端机器上的用户能够访问,NFS 期望客户端的用户和组 ID 与服务器上的用户和组 ID 匹配。另一种选择是使用 NFSv4 idmapping 功能,将用户和组 ID 转换为名称,反之亦然。

而已。至此,您已经在 Ubuntu 服务器上设置了 NFS 服务器。您现在可以进行下一步并配置客户端并连接到 NFS 服务器。

防火墙配置

如果要在受防火墙保护的远程 Ubuntu 服务器上安装 Jenkins,则 需要在 NFS 端口上启用流量:

sudo ufw allow from 192.168.33.0/24 to any port nfs

验证更改:

sudo ufw status

输出应显示端口上的流量2049是允许的:

To                         Action      From
--                         ------      ----
2049                       ALLOW       192.168.33.0/24           
22/tcp                     ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)  

设置 NFS 客户端

现在 NFS 服务器已设置并导出共享,下一步是配置客户端并挂载远程文件系统。

我们将专注于 Linux 系统,但您也可以 在 macOS 和 Windows 机器上安装 NFS 共享。

安装 NFS 客户端

在客户端机器上,我们只需要安装挂载远程 NFS 文件系统所需的工具。

在 Debian 和 Ubuntu 上安装 NFS 客户端

包含用于在基于 Debian 的发行版上挂载 NFS 文件系统的程序的软件包的名称是nfs-common. 要安装它,请运行:

sudo apt update
sudo apt install nfs-common
在 CentOS 和 Fedora 上安装 NFS 客户端

在 Red Hat 及其衍生产品上,安装nfs-utils软件包:

sudo yum install nfs-utils

挂载文件系统

我们将在具有 IP 的客户端计算机上工作192.168.33.20,它具有对文件系统的读写访问权限以及对/srv/nfs4/www文件系统的只读访问权限/srv/nfs4/backups。

为挂载点创建两个新目录:

sudo mkdir -p /backups
sudo mkdir -p /srv/www

您可以在任何您想要的位置创建目录。

使用以下命令挂载导出的文件系统mount :

sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www

192.168.33.10NFS服务器的IP在哪里。您也可以使用主机名而不是 IP 地址,但它需要能够被客户端机器解析。这通常通过将主机名映射到/etc/hosts 文件中的 IP 来完成。

挂载 NFSv4 文件系统时,省略 NFS 根目录。使用/backups, 而不是/srv/nfs4/backups.

df 使用 mount 或命令验证远程文件系统是否已成功挂载:

df -h

该命令将打印所有已安装的文件系统。最后两行是挂载的共享:

Filesystem              Size  Used Avail Use% Mounted on
udev                    951M     0  951M   0% /dev
tmpfs                   199M  676K  199M   1% /run
/dev/sda3               124G  2.8G  115G   3% /
tmpfs                   994M     0  994M   0% /dev/shm
tmpfs                   5.0M     0  5.0M   0% /run/lock
tmpfs                   994M     0  994M   0% /sys/fs/cgroup
/dev/sda1               456M  197M  226M  47% /boot
tmpfs                   199M     0  199M   0% /run/user/1000
192.168.33.10:/backups  124G  2.8G  115G   3% /backups
192.168.33.10:/www      124G  2.8G  115G   3% /srv/www

要在重新启动时永久挂载,请打开/etc/fstab文件并添加以下行:

sudo nano /etc/fstab
/etc/fstab
192.168.33.10:/backups /backups   nfs   defaults,timeo=900,retrans=5,_netdev    0 0
192.168.33.10:/www /srv/www       nfs   defaults,timeo=900,retrans=5,_netdev    0 0

有关挂载 NFS 文件系统时可用选项的信息,请输入man nfs您的终端。

挂载远程文件系统的另一个选项是使用该autofs工具或创建一个 systemd 单元。

测试 NFS 访问

让我们通过在每个共享上创建一个新文件来测试对共享的访问 。

首先,尝试使用以下 命令在/backups目录中创建一个测试文件:touch

sudo touch /backups/test.txt

文件系统以/backup只读方式导出,如预期的那样,您将看到一条Permission denied错误消息:

touch: cannot touch ‘/backups/test’: Permission denied

接下来,尝试使用以下 命令/srv/www以 root 身份在目录中创建一个测试文件:sudo

sudo touch /srv/www/test.txt

再次,您将看到Permission denied消息。

touch: cannot touch ‘/srv/www’: Permission denied

如果您还记得,该/var/www 目录归用户所有 ,www-data并且此共享具有root_squash将根用户映射到对远程共享没有写权限的nobody用户和组的选项集。nogroup

假设您www-data在客户端机器上使用了与远程服务器相同UID的用途GID(例如,如果您在两台机器上都安装了 nginx ,则应该是这种情况 ),您可以尝试以 user 身份创建文件www-data:

sudo -u www-data touch /srv/www/test.txt

该命令将不显示任何输出,这意味着文件已成功创建。

要验证它列出目录中的文件/srv/www:

ls -la /srv/www

输出应显示新创建的文件:

drwxr-xr-x 3 www-data www-data 4096 Apr 10 22:18 .
drwxr-xr-x 3 root     root     4096 Apr 10 22:29 ..
-rw-r--r-- 1 www-data www-data    0 Apr 10 21:58 index.html
-rw-r--r-- 1 www-data www-data    0 Apr 10 22:18 test.txt

卸载 NFS 文件系统

如果不再需要远程 NFS 共享,您可以使用该umount命令将其卸载为任何其他已安装的文件系统。

例如,要卸载/backup共享,您将运行:

sudo umount /backups

如果在文件中定义了挂载点/etc/fstab,请确保删除该行或通过在行首添加将其注释掉#。

结论

我们已经向您展示了如何设置 NFS 服务器以及如何在客户端计算机上安装远程文件系统。如果您在生产中实现 NFS 并共享敏感数据,那么启用 kerberos 身份验证是一个好主意。

作为 NFS 的替代方案,您可以使用SSHFS 通过 SSH 连接挂载远程目录。SSHFS 在默认情况下是加密的,并且更易于配置和使用。

如果您有任何问题,请随时发表评论。

以上是关于如何在 Ubuntu 20.04 上安装和配置 NFS 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Ubuntu 20.04上安装Docker Compose

在 nginx ubuntu 20.04 上安装 Pgadmin4

如何在Ubuntu 20.04上安装Google Chrome浏览器

Ubuntu 18.04/20.04 CV环境配置(上):CUDA11.1 + cudnn安装配置

Ubuntu 18.04/20.04 CV环境配置(上):CUDA11.1 + cudnn安装配置

Ubuntu 18.04/20.04 CV环境配置(上):CUDA11.1 + cudnn安装配置