跳至内容

网络文件系统

知识: ⭐ ⭐ 复杂性: ⭐ ⭐

阅读时间: 15 分钟

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

概论

NFS 是一种客户端/服务器协议:服务器为网络(客户端)提供全部或部分文件系统资源。

客户端和服务器之间的通信通过 **R**emote **P**rocedure **C**all (**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: 允许来自 rockylinux.org 域的以 client_ 开头的 FQDN
  • * 用于所有人

同一行上可以有多个客户端规范,用空格隔开。

资源权限

有两种类型的权限

  • 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) 客户端工作站 1 上的用户可以修改资源,而客户端工作站 2 上的用户只能读取资源。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