NFS的全称是Network File System,即网络文件系统。主要的目的是让网络中不同的主机共享彼此的文件。客户机可以将NFS服务器共享的目录挂载到本地的文件系统中,相当于自己的一个磁盘分区。比如说NFS服务器共享/shared这个目录,则NFS客户端便可以通过网络将这个目录挂载到自己的文件系统。
RPC(Remonte Procedure Call)远程过程调用,作用是让不同主机上的两个进程能够基于二进制格式实现数据通信。NFS是基于RPC的。NFS支持众多功能,每个功能都由不同的进程实现,因此NFS端口号并不固定,这时候就需要RPC了,RPC指定每个功能所对应的端口号,并且通知给客户端,这样客户端便可找到对应的端口去连接。
NFS在启动时随机选取数个端口,并向RPC注册,因此RPC知道每个端口对应的NFS功能。RPC使用固定的端口111监听客户端请求并返回给客户端正确的端口号,客户端收到正确端口号,便可直接与NFS daemon连接。因此RPC必须在NFS之前启动,否则NFS便无法向RPC注册。
NFS配置文件
/etc/exports 可能不存在,需手动建立。格式如:
/share 192.168.1.0/24(ro) 是什么意思呢?将/share目录以只读权限共享给192.168.1这个网段内的所有主机。
权限参数:
ro:共享目录的权限是只读
rw:共享目录的权限是读写
sync:数据同步写入磁盘,效率低
async:数据同步写入磁盘,效率高
root_squash:将root用户和组都映射为匿名用户和匿名组,限制了root用户权限。
no_root_squash:与上相反,保留root用户root组,不安全。
all_squash:登录NFS的所有用户,身份都被映射为匿名用户。
anonuid:匿名用户UID设置值,通常与前面xx_squash一起使用。
anongid:匿名用户GID设置值,通常与前面xx_squash一起使用。
exportfs 命令
-a :全部;
-r :重新挂载;
-u :卸载某一个目录;
-v :显示共享的目录
注意:-ar和-ur常一起使用,修改配置文件后不用重启nfs,直接使用exportfs重读配置文件即可。
查看服务器端都共享了哪些目录
showmount -e 服务器IP
显示哪些客户端挂载了哪些目录
showmount -a
实例演示
共享/shared目录,只允许192.168.1.0/24网段用户读写访问,且所有用户都映射为id号位1100的用户,UID和GID都设置为1000。
服务器IP:192.168.1.110
客户端IP:192.168.1.19
服务器端:
#mkdir /shared
#groupadd -g 1100 xiaoming
#useradd -g 1100 -u 1100 xiaoming
#vim /etc/exportfs
/shared 192.168.1.0/24(rw,all_squash,anonuid=1100,anongid=1100)
#exportfs -ra
# showmount -e 192.168.1.110
/shared 192.168.1.0/24
客户端:
#mkdir /nfs
#mount -t nfs -onolock,nfsvers=3 192.168.1.110:/shared/ /nfs
#cd /nfs
#touch a #touch失败,因为1100用户并没有对/shared目录写权限,设置即可。
服务器端:
setfacl -m u:xiaoming:rwx /shared
客户端即可touch文件。
#showmount -a 192.168.1.110
192.168.1.19:/shared