跳至内容

网络文件系统

知识: ⭐ ⭐ 复杂度: ⭐ ⭐

阅读时间: 15 分钟

Network File System (NFS) 是一种网络挂载的文件共享系统。

概述

NFS 是一个客户端/服务器协议:服务器为网络中的所有或部分客户端提供文件系统资源。

客户端和服务器之间的通信通过 Remote Procedure Call (RPC) 服务进行。

远程文件被挂载到某个目录中,并显示为本地文件系统。客户端用户可以无缝地访问服务器共享的文件,浏览目录就像访问本地目录一样。

安装

NFS 需要两个服务才能运行

  • network 服务(当然)
  • rpcbind 服务

使用命令查看服务状态

systemctl status rpcbind

如果 nfs-utils 包未安装

sudo dnf install nfs-utils

nfs-utils 包需要安装多个依赖项,包括 rpcbind

使用以下命令启动 NFS 服务

sudo systemctl enable --now nfs-server rpcbind

安装 NFS 服务会创建两个用户

  • nobody:用于匿名连接
  • rpcuser:用于 RPC 协议操作

配置防火墙是必需的

sudo firewall-cmd --add-service={nfs,nfs3,mountd,rpc-bind} --permanent 
sudo firewall-cmd --reload

服务器配置

警告

目录权限和 NFS 权限必须保持一致。

/etc/exports 文件

使用 /etc/exports 文件设置资源共享。此文件中的每一行对应一个 NFS 共享。

/share_name client1(permissions) client2(permissions)
  • /share_name: 共享目录的绝对路径
  • clients: 授权访问资源的客户端
  • (permissions): 资源权限

使用以下方式声明允许访问资源的机器

  • IP 地址: 192.168.1.2
  • 网络地址: 192.168.1.0/255.255.255.0 或 CIDR 格式 192.168.1.0/24
  • FQDN: client_*.rockylinux.org:允许访问以 client_ 开头、来自 rockylinux.org 域的主机名
  • * 表示所有人

同一行可以指定多个客户端,用空格隔开。

资源权限

有两种类型的权限

  • ro:只读
  • rw:读写

如果未指定权限,则应用只读权限。

默认情况下,NFS 服务器会保留客户端用户的 UID 和 GID(root 用户除外)。

要强制使用与写入资源的用户不同的 UID 或 GID,请指定 anonuid=UIDanongid=GID 选项,或使用 all_squash 选项将数据设置为 anonymous 访问。

警告

no_root_squash 参数将客户端的 root 用户识别为服务器的 root 用户。从系统安全角度来看,此参数可能存在危险。

root_squash 参数是默认启用的(即使未指定),它将 root 用户识别为 anonymous 用户。

案例研究

  • /share client(ro,all_squash) 客户端用户对资源具有只读访问权限,并在服务器上被识别为匿名用户。

  • /share client(rw) 客户端用户可以修改资源,并在服务器上保留其 UID。只有 root 用户被识别为 anonymous

  • /share client1(rw) client2(ro) 工作站 client1 上的用户可以修改资源,而工作站 client2 上的用户只能读取。UID 在服务器上保留,只有 root 用户被识别为 anonymous

  • /share client(rw,all_squash,anonuid=1001,anongid=100) 客户端1 的用户可以修改资源。在服务器上,他们的 UID 会被更改为 1001,GID 会被更改为 100

exportfs 命令

exportfs(导出文件系统)命令用于管理与 NFS 客户端共享的本地文件表。

exportfs [-a] [-r] [-u share_name] [-v]
选项 描述
-a 启用 NFS 共享
-r /etc/exports 文件应用共享
-u share_name 禁用指定共享
-v 显示共享列表

showmount 命令

showmount 命令用于监视客户端。

showmount [-a] [-e] [host]
选项 描述
-e 显示指定服务器上的共享
-a 显示服务器上所有当前共享

此命令还可确定客户端工作站是否有权限挂载共享资源。

注意

showmount 命令会对结果进行排序并隐藏重复项,因此无法确定客户端是否多次挂载了同一目录。

客户端配置

NFS 服务器上的共享资源可以通过客户端上的挂载点进行访问。

如果需要,请创建一个本地文件夹用于挂载

sudo mkdir /mnt/nfs

列出服务器上可用的 NFS 共享

$ showmount –e 172.16.1.10
/share *

挂载服务器的 NFS 共享

mount –t nfs 172.16.1.10:/share /mnt/nfs

可以通过 /etc/fstab 文件在系统启动时自动挂载

$ sudo vim /etc/fstab
172.16.1.10:/share /mnt/nfs nfs defaults 0 0

作者:Antoine Le Morvan

贡献者:Steven Spencer, Serge, Ganna Zhyrnova