网络文件系统¶
知识:
复杂度:
阅读时间: 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=UID
和 anongid=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