如何在 Rocky Linux 8 上设置 NFS 挂载
在此页
- 先决条件
- 第 1 步 - 在主机和客户端上安装 NFS
- 第 2 步 - 在主机上创建共享目录
- 使用通用支架
- 使用主目录
- 测试通用共享
- 测试主目录共享
网络文件系统或 NFS 是一种分布式文件系统协议,它允许远程主机通过网络安装文件系统并对其执行文件操作,就好像它们是在本地安装的一样。当您希望通过多个客户端共享一台服务器的资源或允许多个客户端写入单个存储空间时,这尤其有用。
在本教程中,您将学习如何安装和配置基于 Rocky Linux 8 的 NFS 服务器和 NFS 客户端。为此,我们将设置一个主机或服务器来共享文件,并设置一个客户端来使用 NFS 挂载访问主机文件.
先决条件
- 两台 Rocky Linux 8 服务器。其中每一个都应该有一个具有 sudo 权限的非 root 用户。
- 主机和客户端都应该有一个静态 IP 地址。您甚至可以通过专用网络设置两者。对于我们的教程,我们将使用 host_ip 表示主机 IP 地址,使用 client_ip 表示客户端 IP 地址。
第 1 步 - 在主机和客户端上安装 NFS
主持人
要安装 NFS 包,您需要安装
nfs-utils
包。它为 NFS 服务器和相关工具提供守护进程。安装软件包。
$ sudo dnf install nfs-utils
启用并启动
nfs-server
服务。nfsd
、nfs-idmapd
、rpcbind
、nfsd
、rpcbind
等NFS挂载共享所需的剩余服务class=system>rpc.mountd,lockd
,rpc.statd
,rpc.quotad
和rpc.idmapd
随之自动启动。$ sudo systemctl enable nfs-server --now
验证 NFS 安装的版本。
$ sudo cat /proc/fs/nfsd/versions -2 +3 +4 +4.1 +4.2
NFS 版本 3 和 4 默认启用,版本 2 禁用。 NFSv2 非常陈旧和过时,因此您可以在它前面看到 -ve 标志。
NFS 将其配置存储在
/etc/nfsmount.conf
和/etc/nfs.conf
文件中。/etc/nfsmount.conf
用于配置 NFS 挂载,而/etc/nfs.conf
用于配置 NFS 守护进程和相关工具。对于我们的教程,默认设置就足够了,不需要更改。客户
在客户端上,安装
nfs-utils
和nfs4-acl-tools
包。$ sudo dnf install nfs-utils nfs4-acl-tools
Step2 - 在主机上创建共享目录
我们将使用两个具有不同配置设置的示例 - 一个使用通用挂载,另一个使用共享主机主目录。
NFS 安装目录不是客户端的一部分。因此,NFS 无法执行需要超级用户权限的任务。这意味着客户端不能更改所有权,不能以 root 用户身份写入它们,也不能执行高级任务。但是,在某些情况下,客户端上的受信任用户需要执行此类任务而不需要主机上的超级用户访问权限。 NFS 服务器可以配置为允许这样做,但它存在客户端可以访问主机的风险。
使用通用安装座
对于我们的第一个案例,我们将创建一个使用默认 NFS 行为的简单挂载,这意味着客户端无法执行任何需要超级用户权限的任务。
创建共享目录。
host:$ sudo mkdir /var/nfs/share -p
hosts root 用户将拥有这个目录,因为我们使用
sudo
创建它。host:$ ls -l /var/nfs total 0 drwxr-xr-x. 2 root root 6 Dec 13 07:30 share
出于安全原因,NFS 会将客户端的所有根操作转换为
nobody:nobody
凭据。因此,我们需要在主机端匹配它们。host:$ sudo chown nobody:nobody /var/nfs/general
使用主目录
对于我们的第二种情况,我们将使主机上的主目录对客户端可用。我们不需要创建它,因为它已经存在。我们不需要更改任何权限,因为它会影响主机上的用户。
第 3 步 - 在主机上配置 NFS 导出
在主机上打开文件
/etc/exports
进行编辑。host:$ sudo nano /etc/exports
将以下代码粘贴到文件中。
/var/nfs/share client_ip(rw,sync,no_subtree_check) /home client_ip(rw,sync,no_root_squash,no_subtree_check)
每个目录及其配置都需要单独一行。将
client_ip
值替换为客户端计算机的实际 IP 地址。让我们浏览一下 NFS 导出的所有选项。
- rw - 授予客户端机器对 NFS 卷的读写访问权限。
- sync - 此选项强制 NFS 在回复之前将更改写入磁盘。此选项被认为更可靠。但是,它也降低了文件操作的速度。
- no_subtree_check - 此选项可防止子树检查,这是主机必须检查文件是否可用以及每个请求的权限的过程。当文件在主机上重命名但仍在客户端上打开时,它也会导致问题。禁用它可以提高 NFS 的可靠性。
- no_root_squash - 默认情况下,NFS 将来自客户端根用户的请求转换为主机上的非特权用户。此选项禁用该行为,应谨慎使用以允许客户端获得对主机的访问权限。
完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
要导出共享,请运行以下命令。
host:$ sudo exportfs -arv exporting client_ip:/home exporting client_ip:/var/nfs/share
- -a - 此选项导致导出所有目录。
- -r - 此选项通过在
/var/lib/nfs/etab
目录中构建一个新列表来导出所有目录。此选项用于使用对/etc/exports
所做的任何更改刷新导出列表。 - -v - 启用详细输出。
要列出所有导出的目录,请运行以下命令。它将显示所有选项,包括未在
/etc/exports
文件中指定的默认选项。host:$ sudo exportfs -s /var/nfs/share client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /home client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
第 4 步 - 在主机上配置防火墙
Rocky Linux 使用 Firewalld 防火墙。检查防火墙状态。
host:$ sudo firewall-cmd --state running
这表明它已成功启动并运行。
防火墙适用于不同的区域,公共区域是我们将使用的默认区域。列出防火墙上所有活动的服务和端口。
host:$ sudo firewall-cmd --permanent --list-services
它应该显示以下输出。
cockpit dhcpv6-client ssh
接下来,我们需要允许流量到必要的 NFS 服务 -
mountd
、nfs
和rpc-bind
.我们还需要允许从客户端 IP 访问。如果您的客户端和主机服务器在同一子网中,则无需添加客户端 IP 地址。host:$ sudo firewall-cmd --permanent --add-service=nfs host:$ sudo firewall-cmd --permanent --add-service=rpc-bind host:$ sudo firewall-cmd --permanent --add-service=mountd host:$ sudo firewall-cmd --permanent --add-source=client_IP
重新加载防火墙以应用更改。
host:$ sudo firewall-cmd --reload
第 5 步 - 在客户端上创建挂载点和目录
现在 NFS 服务器/主机已配置,下一步是在客户端上设置挂载点和目录。您可以在客户端运行
showmount
命令查看Host上导出的文件系统列表。client:$ showmount -e host_ip Export list for host_ip: /home host_ip /var/nfs/share host_ip
始终在客户端上创建一个新目录作为挂载点或使用现有的空目录。如果您挂载的目录中有文件,它将隐藏。
创建挂载目录。
client:$ sudo mkdir -p /nfs/share client:$ sudo mkdir -p /nfs/home
使用主机的 IP 地址装载共享。
client:$ sudo mount host_ip:/var/nfs/share /nfs/share client:$ sudo mount host_ip:/home /nfs/home
验证挂载是否成功。
client:$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 16M 389M 4% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 2.4G 23G 10% / tmpfs 81M 0 81M 0% /run/user/1000 host_ip:/var/nfs/share 25G 2.4G 23G 10% /nfs/share host_ip:/home 25G 2.4G 23G 10% /nfs/home
两个共享都从同一个文件系统挂载。因此它们显示相同的磁盘使用情况。
也可以使用
mount
命令来验证。client:$ mount | grep nfs rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) host_ip:/var/nfs/share on /nfs/share type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip) host_ip:/home on /nfs/home type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)
第 6 步 - 测试 NFS 访问
测试通用共享
写一个测试文件到
/var/nfs/share
共享。client:$ sudo touch /nfs/share/test.txt
检查其所有权。
client:$ ls -l /nfs/share/test.txt -rw-r--r--. 1 nobody nobody 0 Dec 13 08:08 /nfs/share/test.txt
由于我们使用默认 NFS 设置安装此卷并使用
sudo
在客户端上创建文件,因此文件的所有权默认为nobody:nobody
。客户端超级用户不能对共享执行任何管理任务。测试主目录共享
写一个测试文件到
/nfs/home
共享。client:$ sudo touch /nfs/home/home.txt
检查其所有权。
client:$ ls -l /nfs/home/home.txt -rw-r--r--. 1 root root 0 Dec 13 08:09 /nfs/home/home.txt
由于我们使用了
no_root_squash
选项,它允许客户端 root 用户在共享本身上充当 root 用户。第 7 步 - 使挂载点永久化
默认情况下,NFS 共享是临时的,需要在启动时挂载。我们可以通过在客户端编辑
/etc/fstab
文件使它们永久存在。打开文件
/etc/fstab
进行编辑。client:$ sudo nano /etc/fstab
将以下行粘贴到文件底部。
. . . host_ip:/var/nfs/share /nfs/share nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
您可以通过运行以下命令找到有关上面列出的选项的更多信息。
client:$ man nfs client:$ man mount
如果您想在线阅读它们,可以通过 Google 搜索短语
man nfs
和man mount
来了解有关这些选项的更多信息。步骤 8 - 卸载 NFS 共享
如果您不再需要系统上的远程挂载,可以使用
umount
命令卸载它们。请注意,该命令称为 umount 而不是 unmount,这是一个常见的错误。移出共享挂载并卸载它们。
client:$ cd ~ client:$ sudo umount /nfs/share client:$ sudo umount /nfs/home
如果您不再需要在重新启动时再次挂载共享,请确保通过放置
#
注释掉/etc/fstab
文件中的相应条目> 在他们面前签名。结论
在本教程中,我们学习了如何创建 NFS 主机服务器并使用它挂载目录,我们与 NFS 客户端共享。如果您在专用网络中实施它,那么应该没有问题,但如果您在生产中使用它,那么您应该记住协议未加密并且您应该实施一些身份验证来保护您的数据。
如果您有任何问题,请在下面的评论中发表。