1.nfs简介
- 主要用于网络中linux或unix计算机之间的TCP/ip的网络资源共享,它是属于FreeBSD支持的文件系统中的一种
- 可以实时透明读写远端的NFS服务器,就像访问本地文件一样
- nfs是应用层协议,监听2049/tcp和2049/udp套接字上
- 基于IP 进行认证,这是也它的缺点之一
- 节省本地存储空间,用户可以将Home目录放在NFS服务器上被访问使用
1.1应用场景
- 多个机器共享一台CDROM或其他设备
- 在大型网络中,配置一台中心NFS服务器用来放置用户的home目录,方便用户在不同站点登陆
- 不同客户端在NFS上访问文件,节省本地空间
- 在NFS服务器上备份保存工作数据
2.nfs工作机制
2.1体系组成
nfs体系主要有两个组成部分
- 一台nfs服务器
- 若干客户机
客户机通过TCP/IP网络远程访问存放在NFS服务器上的数据
NFS服务器正式启动前,需要根据实际环境和需求,配置一些NFS参数
2.2实现原理
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的系统协议,它可以跨越传输层和应用层
工作机制:1.客户端发起一个RPC系统调用基于TCP协议发送给服务端 2.服务端监听某个套接字,当收到客户端的系统调用请求后,将收到的请求和其传递的参数通过本地的系统调用执行一遍,并将结果返回给本地的服务进程 3.服务端的服务进程收到返回的执行结果后将其封装成响应报文,再通过rpc协议返回给客户端 4.客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行
NIS(Network Information System)网络信息系统,主要是对主机账号等系统提供集中管理的网络服务。{明文协议,不建议在公网中使用}
NFS服务器端运行着四个进程:
nfsd //nfs的守护进程,建监听在2049/tcp和2049/udp上,但不负责文件存储(由NFS服务器本地内核负责调度存储)用于理解客户端发起的rpc请求,并将其转交给本地内核,然后存储在指定的文件系统上。
mountd //用于验证客户端是否在允许访问此NFS文件系统的客户端列表中,在则允许访问(发一个令牌,持令牌去找nfsd)否则拒绝访问
//mountd的服务端口是随机的,由rpc服务(portmapper)提供随机端口号
idmapd //实现用户账号的集中映射,把所有的账号都映射为NFSNOBODY,但是在访问时却能以本地用户的身份去访问
portmapper //NFS服务器的rpc服务,其监听于111/TCP和111/UDP套接字上,用于管理远程过程调用(RPC)
2.3工作机制
- 客户端发起查看file信息的指令(ls file)给内核,内核通过NFS模块得知此文件并不是本地文件系统中的文件,而是在远程NFS主机上的一个文件
- 客户端主机的内核通过RPC协议把查看file信息的指令(系统调用)封装成rpc请求通过TCP的111端口发送给NFS服务端主机的portmapper
- NFS服务端主机的portmapper(RPC服务进程)告诉客户端说NFS服务端的mountd服务在某某端口上,你去找它验证
- 客户端得知服务端的mountd端口号请求验证
- mountd收到验证请求后验证发起请求的客户端是否在允许访问此NFS文件系统的客户端列表中,在则允许访问(发放一个令牌,持令牌去找nfsd)否则拒绝访问
- 验证通过后客户端持mountd发放的令牌去找服务端的nfsd进程,请求查看某文件
- 服务端的nfsd进程发起本地系统调用,向内核请求查看客户端的nfsd进程,请求查看某文件
- 服务端的nfsd进程发起本地系统调用,向内核请求查看客户端要查看文件的信息
- 服务端的内核执行nfsd请求的系统调用,并将结果返回给nfsd服务
- 服务端的内核执行nfsd请求的系统调用,并将结果返回给nfsd服务
- nfsd进程收到内核返回的结果后将其封装成rpc请求报文并通过tcp/ip协议返回给客户端
2.4相关配置参数
/etc/exports
nfs的主配置文件,可以定义NFS系统的输出目录(即共享目录),访问权限和允许访问的主机等参数,该文件默认为空,么有配置输出任何共享目录,这是基于安全性的考虑,如此即使启动了NFS服务也不会输出任何共享资源
exports 语法:<输出目录>[客户端1(选项1,选项2)]
客户端:172.16.12.129 (指定IP地址的主机)
172.16.12.0/24(指定子网中的所有主机)
www.baidu.com(指定域名的主机)
*.baidu.com(指定baidu.com域中的所有主机)
*(缺省)所有主机
ro (设置输出目录只读)
rw (输出目录可读写)
- 用户映射选项:
all_squash //将远程访问的所有普通用户及所属组都映射为匿名用户或组(nfsnobody)
no_all_squash //不将远程访问的所有普通用户及所属用户组都映射为匿名用户或用户组(默认选项)
root_squash //将root用户及所属用户组都映射为匿名用户或用户组
no_root_squash //不将root用户及所属用户组都映射为匿名用户或用户组
anonuid=xxx //将远程访问的所有用户都映射为匿名用户并指定匿名用户为本地用户账户(UID=xxx)
anongid //将远程访问的所有用户组都映射为匿名用户组,并指定该匿名用户组为本地用户组(GID=xxx) - 常用的其他选项
secure //限制客户端只能从小于1024的TCP/IP端口连接NFS服务器(默认)
insecure //允许客户端大于1024的TCO/IP的端口连接NFS服务器
sync //将数据同步写入内存缓冲区或磁盘中,效率较低,但可保证数据一致性
async //将数据先保存在内存缓冲区,必要时才写入磁盘
wdelay //检查是否有相关的写操作,如果有则这些写操作一起执行 可提高效率(默认设置)
no_wdelay //若有写操作则立即执行,应与sync配置使用
subtree_check 若输出目录是一个子目录,则NFS服务器将检查父目录的全限(默认设置)
no_subtree_check //即使输出目录是一个子目录,NFS服务亦不检查父目录的权限,可提高效率
nohide //若将一个目录挂载到另一个目录,则原来的目录通常就被隐藏起来或看起来像空的一样,要禁用这种行为,需启用hide选项
安装步骤
1.先下载安装nfs组件nfs-utils及rpcbind
2.选择需要共享的目录,或新建目录(此处为新建需要共享的目录),然后修改权限
3.进入到nfs配置文件目录,通过vim或者vi编辑文件(vim /etc/exports)
编辑文件为:/nfs/shared 192.168.4.100(rw)
4.启用exports以及相关服务,相关命令为:exports -r 及systemctl restart nfs-server rpcbind
5.进行服务端验证,及查看端口
6,安装客户端组件,以及创建连接目录
7.挂载相关目录
8.实时查看连接目录,格式为:cat /lys/aaa bbb ccc