NFS服务器架设及rpc概念

NFS:

	Network File System,网络文件系统。能够挂载网络上NFS服务器的目录到本地主机当成卷使用

环境:

虚拟机软件:vmware workstation
系统:CentOS Linux release 7.3.1611 (Core)
服务器软件:rpcbind 0.2.0	nfs-utils 1.3.0
虚拟机:
	服务器:
		IP:192.168.2.20	桥接
	客户端:
		IP:192.168.2.30	桥接

部署:

服务器端:
	1、关闭防护墙、selinux,避免干扰
		# systemctl stop firewalld
		# setenforce 0
	2、安装rpcbind和nfs-utils软体
		rpcbind:为某些应用提供端口注册服务,nfs必须用到。
			# yum install rpcbind -y
		nfs-utils:
			# yum install nfs-utils
			/etc/export:		设定可用的共享;
			/usr/sbin/exports:	服务器端管理共享资源的命令;
			/usr/lib/nfs/*tab:	记录资料
				etab:记录共享目录的完整权限设定;
				xtab:记录连接到服务器的客户端资料;
			/usr/sbin/showmount:客户端用来查看NFS服务器共享资源的命令;
	3、编辑/etc/exports文件:
		/share	192.168.2.30(rw) 192.168.2.0/24(ro) localhost(rw) *.shxing.com(ro)
		[共享目录] [可使用主机]  [可使用网段]	        [可使用主机名] 	[可使用域名]
		共享目录:行首写明共享目录路径;
		可使用主机:共享路径后写明可使用主机,主机的表示方式:
			a、IP地址,如192.168.2.30.
			b、网段,如192.168.2.0/24或192.168.2.0/255.255.255.0.
			c、主机名,如localhost,web-01等.
			d、域名,如www.shxing.com.
			注:主机名和域名可使用通配符*,主机名和域名必须能够被解析到,其他详细用法可man exports。
		使用权限:紧随主机后面使用()注明主机可用权限
			ro:仅读
			rw:读写
			sync:同步写入磁盘;
			async:异步写入磁盘;
			root_squash:客户端使用root权限登录时,压缩至anonymous用户权限;
			no_root_squash:不进行压缩
			all_squash:对所有登录用户进行压缩,即所有用户登录时仅具有anonymous用户权限;
			anonuid:anonymous用户的uid和gid默认为nfsnobody的uid和gid,这里可以另行设定,如anonuid=2010.
			anongid:另行设定anonymous的gid
			注:多个权限设定之间用逗号隔开;
				/etc/exports文件修改后,可使用exportfs -r命令重载此文件或reload服务
	4、启动rpcbind服务
		# systemctl start rpcbind
		要首先启用rpcbind服务,因为nfs服务要向其注册端口;若rpcbind服务重启,则端口对应会清空,
			需要重启向其注册端口的服务;
		rpcbind监听在tcp和udp的111端口.
	5、启动nfs服务
		#systemctl start nfs
		查看服务器上可用的nfs挂载:
		#showmount -e localhost
客户端:
	1、启动rpcbind服务:
		#systemctl start rpcbind
		此服务一般默认为开启状态,nfs服务无论客户端或者服务端都依赖于rpcbind服务,必须首先开启
	2、查看服务器可用挂载:
		#showmount -e 192.168.2.20
	3、创建挂载路径,并进行可用的nfs挂载
		#mkdir /nfs-share
		#mount -t nfs -o rw,nodev,nosuid,nouser,noauto,noexec 192.168.2.20:/
挂载路径的权限:
	决定用户挂载目录权限的因素:
		1、/etc/exports中定义的权限,ro,rw等;
		2、客户端挂载用户的ID号在服务器中对目录的权限;如客户端使用用户
			user1进行挂载,user1的UID是1003,GID是1003那么他挂载服务器
			上的目录时,他对目录的权限等同于服务器中UID=1003,GID=1003
			的权限,不区分用户的挂载,一般使用all_squash把用户权限都压缩为			 
			anonymous用户的权限(即nfsnobody用户),特定主机用户挂载特定
			路径,则在/etc/exports中定义目录的挂载限定为目标主机,在服务器
			上创建shell为/usr/sbin/nologin 、UID和GID为客户端使用客户ID的新
			用户,调整新用户对服务器挂载目录的权限以符合客户端的需求。
		3、客户端挂载时的挂载选项:ro,rw等
	因素优先级:
		1、客户端IP:
			/etc/exports文件中是否定义了此客户端对该输出目录的许可权限,
			有则该客户端允许挂载此目录,无则权限拒绝;
			定义权限ro,则此目录挂载时仅读;定义权限rw,则继续以下权
			限判定。
		2、客户端挂载用户ID号:
			客户端挂载用户的ID对被挂载目录的权限。
		3、客户端挂载时挂载选项:
			为ro,则只读;为rw,则为读写挂载。
	Tip:
		1、客户端IP对服务器输出目录有权限时,此客户端的任何用户都
			可以挂载此目录(就算用户对输出目录无任何权限),但挂载后
			会判断用户对此目录的权限,无任何权限的用户会被拒绝访问。
		2、客户端挂载路径在挂载后,目录权限变更为挂载用户ID对此目
			录的权限;
客户端挂载目录选项:
	客户端挂载时出于安全或性能考虑,会有诸多挂载选项:
	ro:仅读挂载;(以防普通挂载用户误删文件)
	rw:读写挂载;
	user:允许普通用户进行nfs的挂载和卸载操作;
	nouser:不允许普通用户进行nfs的挂载和卸载操作;root用户统一
			管理
	auto:mount -a挂载时是否挂载nfs;
	noauto:mount-a挂载时不挂载nfs;
	exec:允许执行程序文件;
	noexec:不允许执行程序文件,建议;(以免不安全的程序文件破
			坏系统数据)
	suid:是否允许suid权限;
	nosuid:不允许suid权限,建议;
	fg:在前台进行挂载操作;
	bg:在后台进行挂载操作,网络不稳定时建议;(当挂载无法正常
			进行一直持续时,会占据前台,此选项可释放前台)
	hard:无法连接服务器时,会持续挂载直到连接上;
	soft:连接服务器超时时,会重复挂载直到连上,建议(不会太占用
			系统资源)
	intr:当使用hard挂载选项时,加上此选项,连线是可以被中断的;
	rsize:读块大小,默认为1024;(当在局域网络并且内存足够时,
			可适当调整大小,比如32768)
	wsize:写块大小,默认为1024;(同上)

windows挂载nfs:

windows挂载使用nfs,要在‘打开或关闭windows功能’选项中添加nfs客户端
工具,添加完成后,打开cmd使用mount或umount命令来实现挂载和卸载
nfs共享目录,如:
	挂载:
		mount -o mtype=soft timeout=6 casesensitive=yes 
			\\192.168.181.11\data m:
	卸载:
		umount -a :卸载所有nfs挂载

开机挂载nfs:

nfs文件系统依赖于网络设备,所以当定义在/etc/fstab中时,从系统
的启动流程分析可得出,nfs文件并不会被自动挂载,可使用下面的方法:
			1、在rc.local中定义挂载;
			2、使用autofs挂载;
			3、也可以在/etc/fstab中定义挂载,加上bg,soft挂载选项,或
				使用_netdev选项(推荐,见man mount)
/etc/fstab挂载,例:
	192.168.181.11:/data /mnt nfs defaults,bg,nosuid,soft 0 0
	192.168.181.11:/data /mnt nfs defaults,_netdev 0 0
	当nfs服务器不能连接时,后台会生成一个mount进程重复进行
	连接尝试,直到连接成功
autofs:
	客户端自动nfs挂载软件,在使用到挂载路径时自动挂载,未使用一
	段时间后自动断开挂载
	软体:autofs.x86_64
	配置文件:
		1、/etc/auto.master和/etc/auto.master.d,定义本地侦
			测目录和对应的挂载配置文件;
			格式:
				/tmp/nfs.web	/etc/auto.web
				本地侦测目录	该目录对应的挂载配置文件
			Tip:
				*auto.master.d目录下的文件命名格式为*.autofs;
				*被侦测的目录如何事先未创建而由autofs自动创
				 建,则在autofs服务停止后会自动删除;已创建
				 则不会;
		2、/etc/auto.web,此文件由用户自行创建,名称和上面定义
			的文件名匹配即可
			格式:
				public	-rw,noexec,nosuid,nouser,bg,soft
					,intr	web:/share/public
				public:本地挂载目录,路径相对于/etc/auto.ma
					ster或/etc/auto.master.d下的配置文件中定
					义的侦测目录;
				-rw....:本段标准格式以‘-’开头,定义挂载时选项;
				web...lic:本段定义nfs服务器输出目录;
			配置文件创建好后,启动autofs服务,可实现自动挂载:
				#systemctl start autofs
命令:
	exportfs:
		exportfs -ar:导出/etc/exports中的 所有共享文件系统
		exportfs -au:停止所有的nfs共享文件系统
		exportfs -u FS:停止某个nfs共享文件系统
	rpcinfo
挂载选项rsize和wsize:
	读缓冲大小和写缓冲大小,设置不能超过服务器端设置的最大值;
	在内存足够时,一般较大的rsize和wsize会有较快的速度体验,但
	相对安全性降低;

nfs服务的请求流程:

1、nfs服务:nfs、mountd、idmapd
	nfs:响应客户端的nfs请求,向内核发起调用
	mountd:接受客户端的连接请求,对客户端进行IP验证
	idmapd:本地账号映射服务;
  rpcbind:portmapper,接受其他基于远程过程调用服务的端口注册
 2、nfs响应流程:
 	服务器端启动rpcbind服务,向其他服务提供端口注册服务
 	服务器端启动nfs服务,包括nfs、mountd、idmapd;
 	mountd向postmapper注册随机端口(可能是多个mountd进程,注册多个端口)
 	客户端向服务器端rpcbind服务监听端口111发出服务请求;
 	rpcbind根据请求服务类型,响应对应服务注册的端口给客户端;
 	客户端向rpcbind返回的端口发出服务请求;
 	服务器端mountd接受服务请求并验证客户端IP,验证通过后,给回通过token
 		给客户端;
 	客户端向服务器端nfs监听的端口2049发出带token的服务请求;
 	服务器端nfs服务验证token,根据服务请求内容向内核发起调用,调用完成后
 		返回完成信息给客户端

Conclusion:

1、nfs不支持账户密码访问,适用于安全性较高的内部环境
2、nfs在使用showmount -e时,会清晰显示服务器的目录层级
	存在安全隐患
3、nfs在实行访问控制时:
	@针对ip、网段、域名进行访问控制,如:
		192.168.181.10(ro);该ip仅读
		192.168.181.0/24(rw);该望都可读写
		*(ro);所有客户端可读
		*.ijia.com(ro);ijia.com域内主机可读
	@anonuid,anongid控制,一般配合all_squash,如
		192.168.181.10(all_squash,anonuid=1366);
		所有挂载用户压缩为anonymous,且uid为1366,在检查权限时
		检查uid为1366的用户对挂载目录具有的权限
		192.168.181.10(all_squash,anongid=2000);
		同上,检查gid为2000的组队挂载目录具有的权限
	@基于上一步所述,在针对不同客户端实现挂载权限控制时;
		可以创建两个用户或组,授权用户或组分别对共享目录具有ro和rw权限;
		在/etc/exports中,针对不同客户端,使用all_squash和anonudi或anongid
		对应到不同权限的用户或组的uid或gid
	@不同客户端在共享目录创建的目录可能属于同一用户,不方便进行
		文件管理
	@客户端用户在使用挂载时,如果创建文件,文件的属主属组在客户端显示
		为客户端用户组,在服务器端显示存在两种情况:
		1、客户端用户的ID号在服务器端存在,此时文件的属主属组为服务器端
		同ID号的账户;
		2、客户端用户的ID好在服务器端不存在,此时文件的属主属组为客户端
		用户的UID和GID
		即:NFS服务不验证用户,只验证IP,所以在其他组有写权限的共享目录
		中会存在许多没有属主属组的文件,带来安全隐患
4、nfs是linux内核实现的,常用于linux系统之间的文件共享与挂载,与windows
	系统兼容性一般;
	ftp是应用层服务,但无法提供文件系统挂载;
	samba是解决跨windows与linux平台的文件共享与挂载,是在linux平台上实现
	cifs协议;
5、DAS、NAS、SAN:
	DAS:directive attached storage,直接附加存储,如磁盘,阵列等;
	NAS:network attached storage,基于cifs、nfs等协议实现的文件系统级别的
		网络存储;
	SAN:storage area network,存储区域网络,块级别的网络存储
6、nsswitch和pam:
	nsswitch:network service switch,名称解析框架;
		配置文件:/etc/nsswith.conf
		模块:/usr/lib/libnss* ;/usr/lib64/libnss* ;
	pam:pluggable authentication module,用户认证框架;
		配置文件:/etc/pam.d/* ;
		模块:/usr/lib64/security/*.so ;

rpc概念:

rpc:remote procedure call protocol,远程过程调用协议
	一部分功能由本地程序完成
	另一部分功能由远程主机上的函数完成		
半结构化数据:
	xml:extended mark language
	json

问题:

1、客户端使用showmount -e server-hostname,提示:
	 ‘远程系统错误RPC: 端口映射器故障 - RPC: 已超时’
 	 使用showmount -e server-ip时正常,而ping主机名
	 时正常连通
解:后面莫名好了,未解!估计不是ip或主机名的问题,而是
	远程RPC的问题;
2、使用autofs进行目录自动挂载时,出现以下问题:
	挂载配置:/etc/auto.master.d/test1.autofs 内容
		/nfs-share	/etc/auto.master.d/autofs-test1
	/etc/auto.master.d/autofs-test1文件内容:
		web	-rw,nouser,nosuid	192.168.181.11:/data
	启动autofs自动挂载时,显示的挂载却是:
	/etc/auto.master.d/autofs-test1 挂载于 /nfs-share
尝试:取消子配置文件,直接定义在/etc/auto.master文件中,结果同样
解:事实上autofs运行时,侦测目录的挂载格式显示就是这样的;
	自寻烦恼
3、服务器端离线,客户端nfs挂载无法使用,会造成许多跟文件系统相关
	的命令卡住无法执行,如df 、du、fdisk等等
解:使用umount -f或-l 或-lf卸载挂载目录;或k掉挂载进程
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值