在 Ubuntu 20.04 上设置 NFS 服务器的简单方法

在本教程中,我们将讨论如何在 Ubuntu 20.04 服务器上设置 NFS 服务器。 网络文件系统 (NFS) 是一种常用的基于文件的存储系统,它允许远程系统通过计算机网络访问文件并与它们进行交互,就像它们是在本地安装一样。 这使系统管理员能够将资源分组到网络上的中央服务器上,以便于共享。

在 Ubuntu 20.04 上设置 NFS 服务器

在 Ubuntu 20.04 上安装 NFS 服务器

为了在 Ubuntu 20.04 上设置 NFS 服务器,您需要安装 NFS 内核服务器包,这是当前推荐用于 Linux 的 NFS 服务器,具有 NFSv3 和 NFSv4 等功能,通过 GSS 支持 Kerberos 等等。

NFS 在服务器-客户端架构中运行。 因此,请在 NFS 服务器系统上安装 NFS 内核服务器。

apt update
apt install nfs-kernel-server

在 Ubuntu 20.04 上设置 NFS 服务器

接下来,可以选择更新 NFS 域 /etc/idmapd.conf 配置文件。 如果未指定,这将默认设置为您系统的 DNS 域。 这可能会导致不同 DNS 域中的其他系统无法挂载共享。

例如,我系统的域是;

hostname -d
kifarunix-demo.com

因此,编辑 /etc/idmapd.conf 文件并取消注释第 6 行并设置值如果 Domain 到正确的域名。

sed -i "s/# Domain = localdomain/Domain = $(hostname -d)/" /etc/idmapd.conf

验证;

grep Domain /etc/idmapd.conf

样本输出;

Domain = kifarunix-demo.com

在 Ubuntu 20.04 上设置 NFS 导出

NFS 导出是 NFS 服务器上可供 NFS 客户端共享或访问的文件系统或目录。

在本教程中,我们将创建两个目录/NFS 共享。 公共目录和私有目录。

mkdir /media/{public,private}

接下来,编辑 /etc/s 配置文件并将上述目录配置为 NFS 共享。

要设置 NFS 共享:

  • 指定要共享的目录
  • 要共享的系统的 IP 地址或域名(如果您有 DNS 服务器)
  • 与共享目录关联的选项。

NFS 共享文件中的格式 /etc/出口 应该看起来像:

nfshare nfsclient_IP/network/domain [sharingoptions]
vim /etc/s

在我们的设置中,通用目录与任何人共享,私有目录与特定客户端共享。

在这种情况下,下面是我们的 NFS 导出配置,如下所示;

/media/public  *(ro,sync,root_squash,subtree_check)
/media/private 192.168.59.21(rw,sync,no_root_squash,no_subtree_check)

所以,让我们把上面的几行放在 /etc/s.

echo -e "/media/public  *(ro,sync,root_squash,subtree_check)n/media/private 192.168.59.21(rw,sync,no_root_squash,no_subtree_check)" >> /etc/s

上面使用的 NFS 共享挂载选项是;

  • ro 以只读权限在客户端上挂载目录。
  • rw 在具有读写权限的客户端上挂载共享目录。
  • sync 确保对共享目录所做的任何更改在服务器和客户端之间同步。
  • root_squash 将远程 root 用户权限映射到 NFS 服务器上的非特权用户。
  • no_root_squash 允许远程用户在 NFS 服务器上以 root 用户的完全权限访问共享。
  • subtree_check 确保在导出目录而不是块设备的情况下,NFS 服务器必须为每个请求检查共享目录中文件的存在。
  • no_subtree_check 指定 NFS 服务器不应为每个请求验证导出中文件的可用性。

咨询 man 5 s 了解更多 NFS 导出挂载选项。

在 Ubuntu 20.04 上重启 NFS 服务器;

systemctl restart nfs-server

导出 NFS 共享

接下来,运行以下命令导出共享目录。

fs -arvf

样本输出;

ing 192.168.59.21:/media/private ing *:/media/public

有关更多信息 fs 上面使用的选项, man fs.

在防火墙上允许 NFS 共享访问

如果防火墙在 Ubuntu 20.04 NFS 服务器上运行,则允许从客户端访问 nfs 共享。

例如,允许特定 IP/网络访问上述共享;

ufw allow from 192.168.59.0/24 to any port nfs

nfs 实际上打开了 2049 端口。

检查:

rpcinfo -p | grep nfs

接下来,由于我们使用的是基于端口的防火墙,您需要为 NFS rpc.mountd 配置一个固定端口(更多关于 SecuringNFS)。 它默认使用随机端口,使访问控制有点困难。

例如,假设我们希望它使用端口 50001,然后编辑文件,/etc/default/nfs-kernel-server, 并替换将端口添加到行中;

RPCMOUNTDOPTS="--manage-gids"

看起来像这样;

RPCMOUNTDOPTS="--manage-gids --port 50001"

Save 并在完成编辑后退出文件。

在防火墙上打开RPC挂载端口;

ufw allow from 192.168.59.0/24 to any port 50001

也打开 NFS portmapper 端口;

ufw allow from 192.168.59.0/24 to any port 111

重启NFS服务器;

systemctl restart nfs-server

配置 NFS 客户端

安装 NFS 客户端软件包

在充当 NFS 客户端的系统上,安装 NFS 客户端软件包:

sudo apt install nfs-common -y

同样,更新 NFS 共享域:

sed -i "s/# Domain = localdomain/Domain = $(hostname -d)/" /etc/idmapd.conf

创建一个目录来挂载远程 NFS 共享

要访问 NFS 客户端上的远程共享目录,您需要在 NFS 客户端上挂载这些目录。

mkdir -p /nfs-shares/{public,private}

列出 NFS 共享

运行以下命令,显示 IP 地址为 192.168.59.14 的 NFS 服务器的挂载信息。

showmount -e 192.168.59.14
 list for 192.168.59.14: /media/public  * /media/private 192.168.59.21

在 NFS 客户端上挂载 NFS 共享

在 NFS 客户端上挂载导出,如下所示;

sudo mount -t nfs 192.168.59.14:/media/public /nfs-shares/public
sudo mount -t nfs 192.168.59.14:media/private /nfs-shares/private/

使用以下命令验证安装;

df -hT -P /nfs-shares/private/ /nfs-shares/public/
Filesystem                   Type  Size  Used Avail Use% Mounted on 192.168.59.14:/media/private nfs4   14G  4.4G  8.7G  34% /nfs-shares/private 192.168.59.14:/media/public  nfs4   14G  4.4G  8.7G  34% /nfs-shares/public

如您所见,两个共享都已挂载。

为了最终确定这一点,让我们在 NFS 服务器上创建一些文件并验证这些文件是否对客户端可用。

touch /media/public/public-files.txt touch /media/private/private-files.txt

在客户端:

ls -1 /nfs-shares/public/ /nfs-shares/private/
/nfs-shares/private/: private-files.txt  /nfs-shares/public/: public-files.txt

这标志着我们关于如何在 Ubuntu 20.04 上设置 NFS 服务器的教程的结束

在 Debian 10 上设置 Samba 文件服务器的快速方法

如何在 Linux 和 Windows 系统上访问 Samba 共享

在 Ubuntu 20.04 上设置软件 RAID