0x00 前言简述
0x01 NFS安装配置
(1) CentOS 系统
(2) Ubuntu 系统
0x02 NFS配置介绍
/etc/exports
/var/lib/nfs/etab
0x03 NFS安全配置
0x04 入坑出坑
0x05 参考连接
0x00 前言简述
描述: 先来学习三大步,任何事物皆可用;
Q: 什么是NFS?为什么要NFS?
描述:NFS(Network File System)即网络文件系统, 利用网络使得在不同的机器之间共享文件。
通过NFS可以将另一台机器的某个目录挂载到本机的某个目录下, 在使用的时候挂载过来的目录就像在本地一样, 极大的方便了多台服务器之间的文件共享。
补充:在提到NFS服务的时候都会提到RPC服务,那么什么是RPC服务,为什么需要RPC服务呢?
答:RPC是Remote Procedure Call
的缩写即远程过程调用,其次关于为什么要RPC服务是因为NFS服务在启动的时候对于端口的选择是随机的,NFS在启动的时候回随机选择小于1024的端口进行数据的传输。而RPC的主要功能就是记录每个NFS服务所对应的端口号,当客户端尝试连接NFS服务时它会将其对应的端口号发送给客户端
,客户端根据获得的端口号进行连接。
rpc.nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器
rpc.mount:主要功能是管理NFS的文件系统,当客户端顺利通过nfsd登录NFS服务器后,在使用NFS服务所提供的磁盘前,还必须通过目录使用权限的验证,它会读取NFS的配置文件/etc/exports(初始文件为空)来对比客户端权限
portmap:主要功能是进行端口映射工作
idmap:进程实现用户映射和压缩
Q: NFS 特点有哪里?
(1) 方便多台服务器之间的文件共享
(2) 搭建使用简单
(3) 可进行密码认证以及Kerberos认证
Q:NFS 应用场景
(1) 比如Kubernetes中多台主机共享存储资源;
NFS 版本说明
(1) NFSv2 and NFSv3
# NFSv3同时支持TCP和UDP传输层协议# NFSv3使用大量辅助协议通过portmap/rpcbind获取rpc.mounted监听端口,再进行身份验证其次验证通过后nfs客户端才能与rpc.nfsd建立联系并访问共享
Example for NFSv2 and NFSv3:# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)mount -t nfs 11.11.165.115:/data /tmp/data -o proto=tcp -o nolock
(2) NFSv4:
Example for NFSv4:# /srv/nfs4 gss/krb5(rw,sync,fsid=0,crossmnt,no_subtree_check)# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)# 客户端挂载过程需要通过mount –t nfs4指定NFS版本为4,默认采用nfsv3。mount -t nfs4 192.168.78.1:/data /tmp/data
NFSv4和NFSv3的差别如下:
(1) NFSv4设计成了一种有状态的协议,自身实现了文件锁功能和获取文件系统根节点功能,不需要NLM和MOUNT协议协助了。
(2) NFSv4增加了安全性,支持RPCSEC-GSS身份认证。
(3) NFSv4只提供了两个请求NULL和COMPOUND,所有的操作都整合进了COMPOUND中,客户端可以根据实际请求将多个操作封装到一个COMPOUND请求中,增加了灵活性。
(4) NFSv4文件系统的命令空间发生了变化,服务器端必须设置一个根文件系统(fsid=0),其他文件系统挂载在根文件系统上导出。客户端需要使用“nfs server ip:/”挂载伪文件系统,伪文件系统一般使用RO方式共享,其他共享可以通过mount –bind选项在伪文件系统目录下挂载;
(5)NFSv4支持delegation。由于多个客户端可以挂载同一个文件系统,为了保持文件同步,NFSv3中客户端需要经常向服务器发起请求,请求文件属性信息,判断其他客户端是否修改了文件。如果文件系统是只读的,或者客户端对文件的修改不频繁,频繁向服务器请求文件属性信息会降低系统性能。NFSv4可以依靠delegation实现文件同步。当客户端A打开一个文件时,服务器会分配给客户端A一个delegation。只要客户端A具有delegation,就可以认为与服务器保持了一致。如果另外一个客户端B访问同一个文件,则服务器会暂缓客户端B的访问请求,向客户端A发送RECALL请求。当客户端A接收到RECALL请求时将本地缓存刷新到服务器中,然后将delegation返回服务器,这时服务器开始处理客户端B的请求。
(6) NFSv4修改了文件属性的表示方法。由于NFS是Sun开发的一套文件系统,设计之出NFS文件属性参考了UNIX中的文件属性,可能Windows中不具备某些属性,因此NFS对操作系统的兼容性不太好。NFSv4将文件属性划分成了三类:
* Mandatory Attributes: 这是文件的基本属性,所有的操作系统必须支持这些属性。
* Recommended Attributes: 这是NFS建议的属性,如果可能操作系统尽量实现这些属性。
* Named Attributes: 这是操作系统可以自己实现的一些文件属性。(7)服务器端拷贝:如果客户需要从一个NFS服务器拷贝数据到另外一个NFS服务器,nfsv4可以让两台NFS服务器之间直接拷贝数据,不需要经过客户端。
(8)资源预留和回收:NFSv4为虚拟分配提供的新特性。随着存储虚拟分配功能的普及使用,nfsv4可以为预留固定大小的存储空间;同样在文件系统上删除文件后,也能够在存储上面释放相应空间。
(9)国际化支持:NFSv4文件名、目录、链接、用户与组可以使用 UTF-8字符集,UTF-8兼容ASCII码,使得NFSv4支持更多语言。
(10)RPC合并调用:NFSv4允许将多个请求合并为一个rpc引用,在NFSv3每个请求对应一个rpc调用。WAN环境中,NFSv4合并rpc调用可以显著降低延迟。
(11)安全性:NFSv4用户验证采用“用户名+域名”的模式,与Windows AD验证方式类似,NFSv4强制使用Kerberos验证方式。(Kerberos与Windows AD都遵循相同RFC1510标准),这样方便windows和*nix环境混合部署。
(12)pNFS并行NFS文件系统,元数据服务器负责用户请求调度、数据服务器负责客户请求处理。pNFS需要NFS服务器和客户端协同支持,pNFS架构示意图如下:
NFS 服务协议
描述:#对于不同的网络情况,有针对地选择 UDP 或 TCP 传输协议。传输协议可以自动选择,也可以手动设置。
# 一般情况下,使用 TCP 的 NFS 比较稳定,使用 UDP 的 NFS 速度较快。
# 在机器较少,网络状况较好的情况下,使用 UDP 协议能带来较好的性能。
# 当机器较多,网络情况复杂时,推荐使用 TCP 协议(V2 只支持 UDP 协议)。
# 在局域网中使用 UDP 协议较好,因为局域网有比较稳定的网络保证,使用 UDP 可以带来更好的性能。
# 在广域网中推荐使用 TCP 协议,TCP 协议能让 NFS 在复杂的网络环境中保持最好的传输稳定性。
客户端连接NFS服务的过程:
1.客户端首先向NFS服务所在的服务器的RPC服务发起请求RPC服务的端口固定为 111
$rpcinfo -p 192.168.1.216# program vers proto port service# 100000 4 tcp 111 portmapper# 100003 3 tcp 2049 nfs# 100003 4 tcp 2049 nfs# 100227 3 tcp 2049 nfs_acl# 100003 3 udp 2049 nfs# 100227 3 udp 2049 nfs_acl
2.RPC服务在接收到客户端的请求之后,找到注册的NFS服务所对应的端口号,并将端口号发送给客户端例如:
tcp