7

如何在Ubuntu 18.04安装和配置NFS服务器

 2 years ago
source link: https://www.myfreax.com/how-to-install-and-configure-an-nfs-server-on-ubuntu-18-04/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
nfs

如何在Ubuntu 18.04安装和配置NFS服务器

NFS网络文件系统是一种分布式文件系统协议,使您可以通过网络共享远程目录

Updated At 22 Nov 2022 12 min read
By myfreax

如何在Ubuntu 18.04安装和配置NFS服务器

如何在Ubuntu 18.04安装和配置NFS服务器

NFS网络文件系统是一种分布式文件系统协议,使您可以通过网络共享远程目录。

使用NFS,您可以在系统上挂载远程计算机目录,并像对待本地文件一样使用远程计算机文件。

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

在本教程中,我们将介绍如何在Ubuntu 18.04设置NFS v4服务器。我们还将向您展示如何在客户端计算机挂载NFS文件系统。

本教程假定您有一台正在运行的Ubuntu 18.04服务器,另一台运行着任意Linux发行版的计算机。

服务器和客户端能够通过网络相互通信。如果您托管服务器提供商不提供私有IP地址。可以使用公共IP地址并设置服务器防火墙仅允许来自受信任源端口2049

本教程中的计算机的IP地址是NFS Server/服务器 IP: 192.168.33.10。NFS Clients/客户端 IPs: 192.168.33.0/24 网段内任意IP。

安装NFS服务器

要在Ubuntu 18.04安装NFS服务器,你只需要运行apt命令sudo apt install nfs-kernel-server更新软件包索引并安装NFS服务器软件包。

安装完成后,NFS服务将自动启动。默认情况下,在Ubuntu 18.04,NFS版本2是禁用的。版本3和版本4已启用。NFSv2现在已经很老了,我们没有理由再启用它。

NFS服务器配置文件分别是/etc/default/nfs-kernel-server/etc/default/nfs-common

您可以运行cat命令sudo cat /proc/fs/nfsd/versions来验证正在运行的NFS版本。

sudo apt update
sudo apt install nfs-kernel-server
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

创建共享目录

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

我们将共享具有不同配置的两个目录/var/www/opt/backups,以更好地说明如何配置NFS。

/var/www/www-data用户和组拥有和/opt/backups它的拥有者是root

请运行以下mkdir命令创建要共享的目录/var/www/opt/backups。然后将目录/var/www/opt/backups目录绑定到/srv/nfs4根目录。

sudo mkdir -p /var/www/
sudo mkdir -p /opt/backups
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,在本教程中我们将使用vim打开文件

复制粘帖以下行到文件/etc/fstab,然后保存文件并退出vim编辑器

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

/etc/fstab

导出文件系统

下一步就是定义共享选项和访问限制然后通过NFS服务器导出。/etc/exports文件包含了描述如何导出目录的说明。

在本教程中,我们需要导出wwwbackups目录,并仅允许IP是192.168.33.0/24网段的客户端访问。

继续使用你喜欢的文本编辑器打开文件/etc/exports,在本教程中我们将使用vim打开文件

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

/etc/exports

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

第二行显示如何为一个文件系统指定多个导出规则。它导出/srv/nfs4/backups目录,只允许192.168.33.0/24网段的客户端有读的权限,并且仅允许IP地址是192.168.33.3的客户端具有读和写权限。sync选项告诉NFS在恢复之前将更改写入磁盘。

最后一行应该是不言自明的了。所有可用选项的更多信息,请在终端中输入man exports查看手册。

保存文件并退出vim编辑器,然后运行命令导出目录sudo exportfs -ra

sudo exportfs -ra

每次修改/etc/exports文件时,都需要运行命令sudo exportfs -ra。如果有任何错误或警告,错误消息将打印在终端。

要查看当前活动的export及其状态,请运行命令sudo exportfs -v。输出将包含所有共享目录及其选项。

如您所见,还有一些我们尚未在/etc/exports文件中定义的选项。这些是默认选项,如果要更改它们,则需要显式设置这些选项。

sudo exportfs -v
/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.110(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 18.04,root_squash默认情况下是启用的。这是NFS安全性的最重要的选择之一。

这样可以防止从客户端对已挂载的共享具有root权限。它将映射rootUIDGIDnobody/nogroup UID/GID

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

至此,您已经在Ubuntu 18.04安装配置NFS服务器。现在,您可以转到下一步配置客户端并连接到NFS服务器。

防火墙配置

如果您的服务器正在运行着防火墙,则需要添加一条规则,允许NFS端口连接。

假设您正在UFW命令用来管理防火墙。为了仅允许来自192.168.33.0/24子网进行访问,请运行命令sudo ufw allow from 192.168.33.0/24 to any port nfs

要验证防火墙规则的更改,请运行命令sudo ufw status。输出将会显示允许端口2049的连接。sudo ufw allow nfs命令将会允许任何源IP地址。

sudo ufw allow from 192.168.33.0/24 to any port nfs
sudo ufw allow nfs
sudo ufw status
To                         Action      From
--                         ------      ----
2049                       ALLOW       192.168.33.0/24           
22/tcp                     ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)  

安装设置NFS客户端

现在我们已经设置NFS服务器并导出了共享,则下一步将配置客户端并挂载NFS文件系统。

您也可以在macOS和Windows计算机挂载NFS共享目录,但是我们将重点关注Linux系统。

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

如果你的计算机运行的是基于Debian的Linux发行版,例如Ubuntu,Linux mint。请运行命令sudo apt update && sudo apt install nfs-common安装NFS文件系统挂载软件。

如果你的计算机运行的是基于RedHat的Linux发行版,例如CentOS,Fedora。请运行命令sudo yum install nfs-utils安装NFS文件系统挂载软件。

sudo apt update && sudo apt install nfs-common
sudo yum install nfs-utils

挂载NFS文件系统

我们将在IP地址是192.168.33.110客户端计算机挂载NFS共享,该IP具有对/srv/nfs4/www目录的读写权限和对/srv/nfs4/backups的只读权限。

为挂载两个目录,我们将创建两个目录作为挂载点。您可以在你所需的任何目录创建此挂载点目录。

然后运行mount命令挂载NFS共享文件系统,vers=4表示使用V4版本的NFS,192.168.33.10:/backupsNFS服务器共享目录。/backups挂载点。

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

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的映射来完成,这是hosts文件格式127.0.1.1 ubuntu,第一列是IP地址,第二列是主机名称,可以是任何名称。

挂载NFS v4版本的文件系统时,可以省略NFS根目录,因此你可以使用/backups,而不是/srv/nfs4/backups挂载NFS共享目录。

最后使用mount或df命令验证是否成功挂载NFS共享目录,df命令将打印所有已挂载的文件系统。最后两行是已挂载的共享目录。

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

要自动挂载NFS共享目录,请你喜欢的编辑器打开/etc/fstab文件。复制粘帖以下行到文件/etc/fstab

/etc/fstab文件包含一个挂载点列表,这些条目定义在系统启动时将在何处以及如何挂载文件系统。

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

sudo vim /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访问

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

/backup文件系统被设置为只读权限,因此你会看到一个权限拒绝错误消息touch: cannot touch ‘/backups/test’: Permission denied。

sudo touch /backups/test.txt
touch: cannot touch ‘/backups/test’: Permission denied

接下来,尝试在/srv/www目录,运行命令sudo touch /srv/www/test.txt创建测试文件。

同样,您将看到错误消息touch: cannot touch ‘/srv/www’: Permission denied,也就是权限拒绝错误。

sudo touch /srv/www/test.txt
touch: cannot touch ‘/srv/www’: Permission denied

您可能还记得/var/www目录所有者www-data用户。此共享设置root_squash选项。

root_squash选项将root用户映射到远程服务器nobody用户和nogroup组。nobody用户和nogroup组是没有写权限读写导出的共享目录。

假设在客户端计算机存在用户www-data,在服务器端也有用户www-data且相同的UIDGID

则可以运行命令sudo -u www-data touch /srv/www/test.txt/srv/www/共享目录中创建文件。

该命令将不显示任何输出,表示文件已成功创建。要验证它可以运行ls命令列出/srv/www目录文件。

sudo -u www-data touch /srv/www/test.txt
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文件中定义了挂载记录,请确保删除包含挂载点的行或者在该行的开头添加#注释掉。

sudo umount /backups

结论

在本教程中,我们向您展示了如何在Ubuntu 18.04设置NFS服务器以及如何在客户端计算机挂载NFS文件系统。

如果要在生产中实施NFS并共享敏感数据,建议启用kerberos身份验证。作为NFS的安全替代方案,您可以使用SSHFS通过SSH连接挂载NFS共享。

SSHFS默认是加密的协议,并且更易于配置和使用。如有任何疑问,请随时发表评论。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK