如何安装并配置NFS服务在CentOS 8

默认情况下,NFS协议未加密,并且与Samba不同,它不提供用户身份验证。客户端的IP地址或主机名限制了对服务器的访问。在本教程中,您将完成在CentOS 8上设置NFSv4服务器的必要步骤。我们还将向您展示如何在客户端上安装NFS文件系统。

13 min read
By myfreax
如何安装并配置NFS服务在CentOS 8

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

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

在本教程中,您将完成在CentOS 8上设置NFSv4服务器的必要步骤。我们还将向您展示如何在客户端上安装NFS文件系统。

在本教程中,我们将介绍如何在CentOS 8上设置NFS v4服务器。我们还将向您展示如何在客户端上挂载NFS文件系统。包括安装/配置/设置NFS服务器,创建并绑定共享根目录,使用/etc/fstab文件自动挂载共享目录,在到处目录定义共享选项和访问限制,验证NFS访问限制。

先决条件

本教程假定您有一台正在运行的CentOS的服务器,另一台运行着任意Linux发行版的计算机。服务器和客户端能够通过网络相互通信。

如果您托管服务提供商不提供私有IP地址,则可以使用公共IP地址并将服务器防火墙配置为2049仅允许来自受信任源的端口上的流量。

本教程中的机器具有以下IP:

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

安装NFS服务器

nfs-utils软件包已经包含NFS所有依赖和NFS服务程序。你使用以下dnf命令安装nfs服务器和守护进程。

请以root或具有sudo权限的用户运行以下dnf命令安装nfs-utils

sudo dnf install nfs-utils

安装完成后,通过键入以下systemctl命令启用并自动启动NFS服务在重启时:

sudo systemctl enable --now nfs-server

默认情况下,在CentOS 8 NFS版本3和4.x上启用,版本2已被禁用。NFS v2现在已经很老旧,没有必要再启用它。

如你需要验证正在运行的NFS服务器的版本,可以运行以下cat命令查看正在运行的NFS服务器版本:

sudo cat /proc/fs/nfsd/versions

该命令将会打印正在运行的NFS版本,减号-表示禁用,加号+号表示启用。输出将如下所示:

-2 +3 +4 +4.1 +4.2

默认配置已经满足我们的教程的要求。你可在/etc/nfsmount.conf/etc/nfs.conf文件中根据你的需要设置NFS服务器的配置选项。

至此NFS服务器安装已经完成,接下来配置创建NFS的共享目录。

创建共享目录

配置NFSv4服务器时,一个好的做法是使用全局NFS根目录,并将实际目录绑定到共享挂载点。在此示例中,我们将使用/srv/nfs4目录作为NFS根目录

我们将共享具有不同配置设置的两个目录/var/www/opt/backups,以更好地说明如何配置NFS。/var/www/www-data用户和组拥有和/opt/backups它的拥有者是root

使用以下mkdir命令创建要共享的目录/var/www/opt/backups

sudo mkdir -p /srv/nfs4/{backups,www}

然后将目录/var/www/opt/backups目录绑定到/srv/nfs4目录下:

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

要在重启时自动绑定目录,请使用你喜欢的文本编辑器打开文件/etc/fstab,在本教程中我们将使用vim打开文件/etc/fstab

fstab全称file system table,即文件系统表的意思。它在开机的时候告诉系统挂载哪些分区、挂载点是什么、以什么格式挂载、挂载的选项等等。

请以root或具有sudo权限的用户运行以下vim命令编辑文件/etc/fstab

sudo vim /etc/fstab

复制粘帖以下内容到/etc/fstab文件的末尾:

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

完成编辑后保存文件并退出vim编辑器

导出文件系统

接下来我们将会定义NFS服务器共享选项和访问限制的配置,即允许那些客户端可以访问NFS共享目录。

/etc/exports配置文件可以定义NFS的共享选项和访问限制,请使用vim编辑器打开文件/etc/exports

sudo nano /etc/exports

导出wwwbackups目录,并仅允许192.168.33.0/24网络上的客户端访问:

/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.110(rw,sync,no_subtree_check)
/etc/exports

第一行包含fsid=0定义NFS根目录/srv/nfs。仅允许来自192.168.33.0/24子网的客户端对此NFS访问权限。crossmnt选项是必需的,共享目录是导出目录的子目录。

第二行显示了如何为一个文件系统指定多个导出规则。它导出/srv/nfs4/backups目录,只允许192.168.33.0/24网段的客户端具有读的权限。

并且仅允许IP地址是192.168.33.3的客户端具有读和写权限。sync选项告诉NFS在恢复之前将更改写入磁盘。最后一行应该是不言自明的了。

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

现在我们已经对/etc/exports文件完成后配置与设置,然后使用exportfs命令加载配置并导出NFS共享目录。

sudo exportfs -ra

如果你需要查看导出的目录配置信息,可以使用exportfs命令的-v查看导出目录的详细信息:

sudo exportfs -v

输出将包含访问限制的信息以及权限的信息。你可能还会注意一些我们没有定义的配置信息。

除了没有出现在我们定义的/etc/exports文件中的选项,这些是默认选项,如果要更改它们,则需要明确设置这些选项。

如你需要了解更多所有可用选项的信息,请在终端中输入man exports命令查看手册。

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

在CentOS上,root_squash在默认情况下是启用的。这是NFS安全性的最重要的选择之一。这样可以防止从客户端对已挂载的共享具有root权限。它将映射rootUIDGIDnobody/nogroup UID/GID

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

至此,您已经在CentOS服务器上设置/配置NFS服务器。现在,您可以转到下一步并配置客户端并连接到NFS服务器。

防火墙配置

如果您在计算机上运行着FirewallD防火墙,则需要打开NFS端口2049,以允许NFS端口上的连接。

假设您正在使用FirewallD用来管理防火墙。为了允许192.168.33.0/24网段的计算机访问NFS服务器。则需要运行以下firewall-cmd命令。

以下firewall-cmd命令将创建--new-zone新的nfs区域zone,并将服务NFS添加--add-service到新创建的nfs区域中。--add-source表示仅允许192.168.33.0/24网段的计算机访问NFS服务器。

sudo firewall-cmd --new-zone=nfs --permanent
sudo firewall-cmd --zone=nfs --add-service=nfs --permanent
sudo firewall-cmd --zone=nfs --add-source=192.168.33.0/24 --permanent
sudo firewall-cmd --reload

设置NFS客户端

既然已经设置了NFS服务器并导出了共享,则下一步将配置客户端并挂载远程文件系统。您也可以在macOS和Windows计算机上挂载NFS共享,但是我们将重点关注Linux系统。

安装NFS客户端

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

Debian和Ubuntu上安装NFS客户端

nfs-common软件包含用于在基于Debian的发行版上安装NFS共享的客户端的程序。要安装它,请运行以下apt命令安装NFS客户端:

sudo apt updatesudo apt install nfs-common

CentOS和Fedora上安装NFS客户端

在Red Hat及其衍生版本上安装nfs-utils软件包。请运行以下yum命令安装NFS客户端:

sudo yum install nfs-utils

挂载文件NFS系统

我们将在IP地址是192.168.33.110的客户端计算机上挂载NFS共享,该IP具有对/srv/nfs4/www目录的读写权限和对/srv/nfs4/backups的只读权限。为挂载两个目录,创建两个新目录以作为挂载点。您可以在你所需的任何位置创建此挂载点目录。

sudo mkdir -p /backupssudo mkdir -p /srv/www

使用以下mount命令挂载NFS共享的文件系统:

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

您也可以使用主机名代替NFS服务器IP地址192.168.33.10。但是客户端计算机需要将该主机名解析为IP地址。这通常是/etc/hosts文件在添加主机名与IP的映射来完成的。

挂载NFSv4文件系统时,您需要省略NFS根目录,因此你可以使用/backups,而不是/srv/nfs4/backups。使用mount或df命令验证是否成功挂载NFS共享目录:

df -h

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

Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00   38G  1.7G   36G   5% /
devtmpfs                         236M     0  236M   0% /dev
tmpfs                            244M     0  244M   0% /dev/shm
tmpfs                            244M  4.5M  240M   2% /run
tmpfs                            244M     0  244M   0% /sys/fs/cgroup
/dev/sda2                       1014M   87M  928M   9% /boot
tmpfs                             49M     0   49M   0% /run/user/1000
192.168.33.10:/backups           9.7G  1.2G  8.5G  13% /backups
192.168.33.10:/www               9.7G  1.2G  8.5G  13% /srv/www

要使挂载在重启时自动挂载,请你喜欢的编辑器打开/etc/fstab文件。在本教程中我们将使用vim打开文件:

sudo vim /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
/etc/fstab

要查找有关挂载NFS文件系统可用选项的更多信息,请在终端中键入man nfs。挂载共享目录的另一种选择是使用autofs工具或创建一个systemd服务文件。

测试NFS访问

让我们通过为每个共享目录,创建一个新文件来测试对NFS共享目录的访问。首先,尝试/backups挂载点使用touch命令在目录中创建文件

sudo touch /backups/test.txt

/backup文件系统被设置为只读权限,因此你将会看到一个Permission denied错误信息:

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

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

sudo touch /srv/www/test.txt

同样,您将看到Permission denied消息。

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

您可能还记得/var/www目录所有者www-data用户。此共享具有root_squash选项,该选项将root用户映射到对远程服务器没有写权限的nobody用户和nogroup组。

假设在客户端计算机存在一个www-data用户并且在服务器端也具有相同的UIDGIDwww-data用户。则可以,以www-data用户在/srv/www/共享目录中创建文件:

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

该命令将不显示任何输出,表示文件已成功创建。要验证它请使用ls命令列出/srv/www目录中的文件:

ls -la /srv/www

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

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

卸载NFS文件系统

如果不再需要远程NFS共享,则可以使用umount命令将其卸载已挂载的任何目录。例如,要卸载/backupNFS共享,请运行:

sudo umount /backups

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

结论

在本教程中,我们向您展示了如何设置NFS服务器以及如何在客户端计算机上挂载远程文件系统。如果要在生产中实施NFS并共享敏感数据,建议启用kerberos身份验证。

作为NFS的安全替代方法,您可以使用SSHFS通过SSH连接挂载远程目录。SSHFS默认情况下是加密的,并且更易于配置和使用。如有任何疑问,请随时发表评论。