NFS简介
NFS:Network File System网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现
RPC采用C/S模式。客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
NFS优势:节省本地存储空间,将常用的数据如:home目录,存放在一台NFS服务器上且可以通过网络访问,那么本地终端将减少自身存储空间的使用。
RPC的主要功能就是在知道服务器端的每个NFS功能所对应的端口号,并且告诉客户端。让客户端可以连接到正确的服务器端口上去。那么RPC是如何知道每个NFS的端口号呢?这是因为当服务器在启动NFS时会随机使用多个端口,并主动向RPC注册,因此RPC可以知道每个端口对应的NFS功能。而RPC又是固定使用111端口来监听用户端的请求并回答客户端正确的NFS端口号。所以NFS服务器需要先启用RPC,然后再启动NFS。
NFS配置
1、部署环境
服务器端:CentOS7.7 192.168.1.100
客户端:CentOS7.7 192.168.1.200
2、服务器端配置
安装软件包
# yum install nfs-utils
修改配置文件(# man 5 exports查看帮助)
# vim /etc/exports
/nfsdata *(rw) #如果是*允许所有用户,必须给rw权限,否则是ro权限
设置共享目录属性
# chown nfsnobody:nfsnobody /nfsdata
启动nfs服务
# systemctl start nfs-server
重启nfs服务(可选)
# systemctl restart nfs-server
# exportfs -rv #重读配置文件,可以不用重启服务就加载配置信息
3、客户端配置
# yum install nfs-utils
查看xxx服务器支持的挂载目录
# showmount -e 192.168.1.100
Export list for 192.168.1.100:
/nfsdata *
挂载nfs目录
# mount -t nfs 192.168.1.100:/nfsdata /nfs/
4、企业用的客户端挂载参数优化
(1)禁止更新目录及文件时间戳挂载
mount -t nfs -o noatime,nodiratime 192.168.1.100:/nfsdata /data
(2)安全加优化的挂载方式
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=65536,wsize=65536 192.168.1.100:/nfsdata /data
服务器端的nfs挂在参数参考
ro:只读访问
rw:读写访问
sync:所有数据在请求时写入共享
async:NFS在写入数据前可以相应请求
secure:NFS通过1024以下的安全TCP/IP端口发送
insecure:NFS通过1024以上的端口发送
wdelay:如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay:如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
Hide:在NFS共享目录中不共享其子目录
no_hide:共享NFS目录的子目录
subtree_check:如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check:和上面相对,不检查父目录权限
anonuid=xxx:anongid=yyy,指定NFS服务器/etc/passwd文件中匿名用户的UID和组GID,而非nfsnobody,可配合all_squash使用,相当于给默认的nfsnobody替换成别的
squash(压榨)详解:默认远程用户连接 nfs服务器时候,在共享目录创建文件的用户名由服务器指定根据UID指定。如客户端用户是wang,UID是1001,那么服务器上1001的用户如果是zhang,那么创建这个文件的用户为zhang。
all_squash:所有远程用户(包括root用户)都变成nfsnobody,即使no_root_squash也压榨root
no_all_squash:保留共享文件的UID和GID(默认)
root_squash:root用户的创建的文件变成nfsnobody
no_root_squash:root用户创建的文件用户名为root