目录
一、NFS是什么?
用于在Linux或unix系统之间进行文件共享。NFS服务允许客户端通过网络将NFS服务器共享出的目录挂载到本地,这样客户端就可以通过访问挂载目录,来访问NFS服务器上的共享文件内容。
二、NFS工作相关流程
因为NFS服务有很多功能,提供不同功能的进程使用的端口号也就会各不相同,如果客户端想要请求NFS服务器的某项功能,势必需要先知道其功能的目的端口号,才能从NFS服务器哪里获得服务。那么NFS服务这么多功能端口号,客户端如何知道NFS服务器的某项功能使用的什么端口号呢?这就需要RPC远程过程调用协议来记录NFS服务器各功能所使用的端口号。其过程如下:
1.首先在服务端,NFS服务启动以后,就会随机的使用一些端口号,然后NFS服务就会将自己使用的端口号告诉本系统内的RPC服务,RPC记录下NFS各个功能所使用的端口。并开启RPC服务的111端口等待客户端通过RPC请求来获取到NFS服务所使用的端口号。
2.客户端启动自身的RPC(portmap)服务,向服务端的RPC(portmap)服务请求NFS文件共享服务开放的端口号。
3.服务端RPC服务收到用户的请求后,查阅NFS服务所使用的端口号,并将其使用的端口号告诉给客户端。
4.客户端知道NFS服务器使用的端口号后,就可以通过获取到的目的端口号与NFS服务器进行数据传输。
注意:在服务端上,因为NFS服务需要向RPC服务注册自己所使用的端口号,因此RPC只有先于NFS服务启动,NFS服务才能将自己使用的端口号注册到本地的RPC服务上。
三、NFS服务主配置文件 /etc/exports
每一行记录都代表着一个共享目录和其访问权限设置
语法:共享目录路径 [客户端IP或域名 共享权限] //其后可以跟多个客户端。
各参数含义
共享目录路径:本服务器要共享的目录路径,需使用绝对路径
客户端IP或域名:指定允许那些网络客户端可以访问共享目录
共享权限:指定客户端访问共享目录所拥有的权限和远程客户端访问共享文件所使用的用户映射到本服务器是什么用户。
目录访问权限参数
ro------设置远程用户以只读的方式访问共享目录
rw------设置远程用户以读写的方式访问共享目录
用户映射参数
all_squash | 无论NFS客户端使用什么普通账户访问,均映射为NFS服务器的匿名用户和组 (常用) |
no_all_squash | 无论客户端使用什么账户访问,都不进行匿名用户和组的映射,root用户除外。(默认) |
root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 ,匿名用户默认是nobody系统用户(默认,不常用) |
no_root_squash | 当NFS客户端以root管理员访问时,射为NFS服务器的root管理员 (不常用) |
anonuid | 配置all_squash参数时使用。开启匿名用户或组映射后,指定其映射的匿名用户的UID。(常用) |
anongid | 配置all_squash参数时使用。开启匿名用户或组映射后,指定其映射的匿名用户所属组的GID。(常用) |
secure | 远程客户端只能使用小于1024的目的端口来请求NFS服务 |
insecure | 允许客户端 从大于1024的端口请求NFS服务 |
sync(同步) | NFS服务器收到客户端传送过来的数据时,会将数据边写入内存缓冲区,边将缓冲区中的数据写入到本地硬盘中,然后将结果信息返回给客户端。包证数据不丢失,但传输效率低(常用) |
async(异步) | NFS服务器将客户端传输过来的数据先写入到本地内存缓冲区中,待缓冲区内存满了,在将其写入到本地硬盘中。数据容易丢但传输效率高(不常用) |
wdelay | 检查是否有写操作,如果有则等到本地NFS服务器内存缓冲区满了,在将所有写的内容存入到服务器硬盘中。(默认,须与async配合使用) |
no_wdelay | 若有写操作立即写入到服务器硬盘中(须与sync配合使用) |
subtree_check | 若共享目录是一个子目录,NFS服务会检查其父目录的权限是否允许客户端访问。 |
no_subtree_check | NFS服务不检查子共享目录的父目录权限是否允许客户端访问。 |
四、NFS综合配置案例
NFS服务器IP:192.168.100.254/24
实验需求:
1、共享/mnt/share目录,允许192.168.100.0/24网段的主机访问该共享目录。除了root用户其余所有用户都只能删除自己创建的目录。(root用户默认会映射服务端的nobody匿名用户,因此远程客户端用root用户访问共享目录也只能管理自己创建的目录,除非关闭root匿名用户映射)。
2、共享/mnt/managerdata目录,仅允许公司zhang用户利用IP地址为192.168.100.10主机对该共享目录进行读写。
3、共享/mnt/upload目录,仅允许192.168.100.0/24网段主机利用该共享目录上传文件,所有远程用户上传的文件所属用户和组都显示为nfsupload用户和组,UID和GID均为1100。
4、共享/home/nfs目录,该目录除允许192.168.100.0/24网段的用户只读访问外,也向互联网用户提供数据内容的读写。
Server端:
1、安装NFS服务所需的软件
2、创建共享目录,并为共享目录设置相应权限
@NFS服务器用户映射关系是以远程客户端用户的UID来映射到本地相同UID的用户,如果本地没有此UID的用户,则远程用户在共享目录中创建的文件属主组只显示远程用户ID标识。
@NFS服务器若之允许远程客户机的某个用户访问共享文件夹时,在通过修改共享文件夹属主方式限制用户时,系统可以没有此对应的用户直接指定远程客户端用户ID就行。
3、修改nfs的主配置文件/etc/exports,指定要共享的目录,并设置其相应权限。
4、防火墙放行nfs相关服务。
5、开启nfs服务,并读取nfs配置文件使配置立即生效。
Client端:
1、测试实验需求1:
2、测试实验需求2:
3、测试实验需求3:
4、测试实验需求4,并永久挂载共享目录:
五、实验总结
1、如果NFS服务器要为其它子网内的主机提供服务,则路由器需关闭防火墙,否则客户端在查询NFS共享的文件夹时,会报无法获取RPC信息。
2、客户端在NFS服务器创建的文件所属普通用户是以客户端的账户ID来映射的。
3、默认NFS在共享子文件夹时,不管父文件夹是否允许用户访问,只要子文件夹允许用户访问,则远程客户端用户就能够访问NFS服务器的共享文件夹。
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!