注:文中截图来自鸟哥的linux私房菜,链接见文末。
一、NFS简介
NFS:Network File System,网络文件系统。借助网络,不同机器、不同操作系统之间可以分享彼此的某些本地文件目录;允许一个机器通过网络挂载一个远程机器的某些目录,挂载后可以很方便的访问这些目录下的文件,就如同本地目录一般。
NFS采用C/S模式,目录分享者为服务器,挂载使用者为客户端,二者使用RPC进行通信。
二、NFS服务器
1. 服务组成
NFS支持的功能比较多,不同的功能会启动不同的RPC服务进程来完成,主要服务进程有:
(1)rpc.nfsd:NFS的主要服务进程,大部分工作由它来完成,主要负责管理客户端的登入,以及判别登入者ID。
(2)rpc.mountd:负责管理NFS的文件系统。客户端登入后,使用分享目录文件之前,进行文件权限判断,以及通过读取NFS配置文件/etc/exports对客户端进行权限控制。
(3)rpc.lockd:非必要,管理文件的锁定,解决多个客户端同时写入某个文件的问题,必须同时在客户端与服务端都开启才有效,常与rpc.statd同时使用。
(4)rpc.statd:非必要,用于检查文件的一致性,检测文件是否被损毁,必须同时在客户端与服务端都开启才有效。
2. 通信管理
为了支持NFS功能,启动了多个服务进程,每个进程都会占用一个端口来传输数据。除了rpc.nfsd固定使用2049端口,其他进程的端口都是随机选取一些未被使用的小于1024的端口。既是随机,客户端如何得知,进而与之通信呢?
所以除了NFS相关的服务进程,还需要启动另一个服务进程——rpcbind(CentOs5.x以前称为portmap)。rpcbind主要负责管理RPC服务进程与其端口之间的映射关系,NFS相关进程启动时,选取各自端口,然后向rpcbind注册映射关系。rpcbind固定在111端口监听客户端请求,客户端需要请求NFS相关服务进程时,先请求rpcbind得到对应端口,然后再通过端口直接与对应服务进程通信。整个过程示意图如下:
3. 权限控制
既是要将自己的文件分享给其他主机,自然要控制好其他主机登入后的操作权限,不可听之任之。NFS的权限配置文件为:/etc/exports,配置格式示例:
权限控制常见参数如下:
说明:
(1)通配符只能用在主机名上,不可用于网段。
(1)若client登录server的user的UID在server上不存在,则创建文档的拥有者会直接记录UID而不是用户名。
(3)不显式设置的话,默认属性里都具有root_squash。
(4)sync与async,默认属性为sync。
(5)/etc/exports只是一些比较特别的权限参数而已,还有很多预设参数,可见/var/lib/nfs/etab:
4. 安装 & 启动 & 管理
(1)安装
查看Linux Kernel版本:
uname -r
Linux Kernel版本若小于2.2不支持NFS功能。
查看是否已安装相关程序包:
rpm -qa | grep rpcbind
rpc -qa | grep nfs-utils
若未安装则安装:
yum install rpcbind
yum install nfs-utils
(2)启动
查看服务是否已启动:
systemctl status rpcbind
systemctl status nfs
若未启动则启动:
systemctl start rpcbind
systemctl start nfs
(3)管理
<1>showmount
查看当前主机/etc/exports所分享的目录信息:
查看当前主机与各个客户端分享的状态列表:
这些客户端分享状态的信息记录在/var/lib/nfs/xtab或/var/lib/nfs/rmtab。
<2>修改配置文件/etc/exports以后,需要重新nfs服务才可生效。若不想重启nfs服务,可执行exportfs指令使配置修改立即生效。exportfs指令参数解析如下:
5. 安全
(1)设置防火墙
仅开放NFS相关服务端口,但除了rpcbind和nfsd,其他服务进程端口不确定,iptables很难设置,若是CentOS6.x以上版本,可在文件/etc/sysconfig/nfs中为各个服务进程设置固定的端口,然后再设置iptable即可。
(2)操作权限设置
<1>使用/etc/exports设置更安全的权限,善用root_squash、all_squash、anonuid等权限参数。
<2>文件系统权限的设置。
(3)更安全的partition规划
预留一个partition作为NFS服务开放的文件系统,避免NFS文件大小与安全问题影响本地文件系统的使用。同时可在/etc/fstab为该partition设置更为严格的参数。
(4)NFS服务器关机前的注意事项
关机前需要先关闭rpcbind与nfs服务,否则要等很久才能正常关机成功。
三、NFS客户端
1. 手动挂载
(1)确认是否已启动rpcbind服务与nfs服务,若未启动则启动:
systemctl start rpcbind
systemctl start nfs
(2)查看NFS服务器分享的目录列表
showmount -e nfs-server-hostname/ip
(3)创建挂载点目录
(4)使用mount指令进行挂载,-t nfs指定文件系统类型:
(5)若不再需要使用挂载目录,则可使用umount指令卸载。
2. 挂载参数
虽然是挂载使用别人的文件目录,也需要做好自我保护。
安全参数:
特殊参数:
如果挂载了NFS服务器的目录,只要有用到文件系统,那么整个目录树系统就会主动的去查询全部的挂载点,如果NFS服务器与客户端之间的网络出现问题,或者服务器关机了,那么客户端只要执行涉及文件系统的指令(df,ls,cp等),整个系统就会很慢,因为需要等文件系统搜索等待超时后才会返回结果。
可在mount命令中使用- o指定安全/特殊参数,示例:
3. 开机自动挂载
开机自动挂载配置文件为/etc/fstab,但该文件配置的自动挂载发生于网络启动之前,NFS需要使用网络,故不能在此文件配置,可配置于文件/etc/rc.d/rc.local中。
4. 无法挂载可能原因
(1)服务器或客户端的rpcbind或nfs服务未启动。
(2)NFS服务器的/etc/exports未对当前主机授权相应目录。
(3)防火墙。
5. 自动挂载autofs的使用
RPC服务使得NFS的服务器和客户端任何一方脱机都可能造成另一方总是等待超时。autofs服务位于客户端主机,它会持续侦测某个指定目录,当需要使用该目录下的资源时,才会请求NFS服务器,自动挂载,若持续一段时间没有使用该目录下的资源,则又会自动卸载。
(1)配置文件设置
<1>主配置文件:/etc/auto.master(配置顶层目录)
配置挂载点目录及其数据对应文件:
挂载点目录不需要存在,autofs会自动创建;数据对应文件是自己定义的。
<2>数据对应文件(配置子目录)
配置了挂载点目录子目录与服务器源目录的对应关系:
(2)启动服务
systemctl start autofs
autofs会遍历/etc/auto.master中配置的每个挂载点目录,对每个挂载点目录遍历数据对应文件中配置的子目录。
参考: