网络文件系统¶
知识:
复杂性:
阅读时间: 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=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)
客户端工作站 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