写点什么

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

作者:Ethereal
  • 2022 年 3 月 14 日
  • 本文字数:4353 字

    阅读完需:约 14 分钟

如何在 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.10NFS Clients IPs: From the 192.168.33.0/24 range
复制代码

设置 NFS 服务器

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

安装 NFS 服务器

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


sudo apt updatesudo 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/backupssudo mkdir -p /srv/nfs4/www
复制代码


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


sudo mount --bind /opt/backups /srv/nfs4/backupssudo 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 updatesudo 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 /backupssudo mkdir -p /srv/www
复制代码


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


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


sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backupssudo 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 onudev                    951M     0  951M   0% /devtmpfs                   199M  676K  199M   1% /run/dev/sda3               124G  2.8G  115G   3% /tmpfs                   994M     0  994M   0% /dev/shmtmpfs                   5.0M     0  5.0M   0% /run/locktmpfs                   994M     0  994M   0% /sys/fs/cgroup/dev/sda1               456M  197M  226M  47% /boottmpfs                   199M     0  199M   0% /run/user/1000192.168.33.10:/backups  124G  2.8G  115G   3% /backups192.168.33.10:/www      124G  2.8G  115G   3% /srv/www
复制代码


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


sudo nano /etc/fstab
复制代码


/etc/fstab192.168.33.10:/backups /backups   nfs   defaults,timeo=900,retrans=5,_netdev  0 0192.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 在默认情况下是加密的,并且更易于配置和使用。


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

用户头像

Ethereal

关注

还未添加个人签名 2020.11.18 加入

还未添加个人简介

评论

发布
暂无评论
如何在 Ubuntu 20.04 上安装和配置 NFS 服务器?_Ethereal_InfoQ写作平台