实验环境说明:本次实验在两台主机上完成,server(172.25.254.93),client(172.25.254.91)
一,NFS简介:
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。
rpc(remote procedure call 远程过程调用)和nfs
NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的?因为NFS有很多功能,不同的功能需要使用不同的端口。因此NFS无法固定端口。而RPC会记录NFS端口的信息,这样我们就能够通过RPC实现服务端和客户端的RPC来沟通端口信息。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口(小于1024)来进行数据的传输。RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那服务端的RPC就会将记录的NFS端口信息告知客户端。
Nfs-utils:NFS主程序、Portmap:RPC主程序
NFS默认需要启动的进程有rpc,mountd,nfsd,rpc,rquotad,rpc,idmapd。NFS服务器启动时最少需要两个daemons,一个管理client端是否能够登入的问题,另一个管理client端能够取得的权限。如果还需要管理quota的话,NFS还要加载rpc.rquotad程序。
1、nfsd(rpc.conf)
这个daemon的主要功能就是管理client端是否能够登入主机,其中还包含登入者的ID判别。
2、rpc.mount
这个daemon主要功能则是管理NFS的文件系统。当client端顺利通过rpc.nfsd登入主机后,在它可以使用NFS服务器提供规定文件之前,还会经过文件使用权限的认证程序。它会去读取NFS的配置文件/etc/exports来对比客户端的权限,当通过这一关之后,client端也就取得使用NFS文件的权限。这就是为什么单单在/etc/exports中设置NFS的权限是不够的。
注意:
在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。
二,NFS的相关配置:
server:
[root@server ~]# yum install -y nfs-utils
[root@server ~]# systemctl start nfs
[root@server ~]# firewall-cmd –permanent –add-service=nfs #取消火墙对nfs的限制
successroot@server ~]# firewall-cmd –add-service=rpc-bind –permanent #rpc-bind为nfs分配端口(111)
[root@server ~]# firewall-cmd –add-service=mountd –permanen #nfs必须以mount的形式才可以被使用
success
[root@server ~]# firewall-cmd –reload
注意:如果不添加上面的nfs,rpc-bind,mountd,会有不同的报错
[root@server ~]# mkdir /test/nfs -p
[root@server ~]# vim /etc/exports
/test/nfs *(sync) #sync表示server和client的数据实时同步
[root@server ~]# exportfs -rv
client:
[root@client ~]# yum install -y autofs
[root@client ~]# systemctl start autofs
识别nfs共享目录:
进入到/net/172.25.254.93/test/nfs后会自动自动挂载在同样的目录下:
[root@client nfs]# vim /etc/sysconfig/autofs #在配置文件中可以设置退出共享目录(/net/172.25.254.93/test/nfs)后多久自动卸载,因为长时间挂载会影响服务器性能。
13 TIMEOUT=5 #设置退出目录后5秒自动卸载
配置自动挂载在指定目录上:
在客户端:
[root@client ~]# vim /etc/auto.master
8 /mount /etc/auto.nfs #/mount为要设置的新的挂载点的最上层目录,/auto.nfs文件中记录着要挂载的底层目录以及所要挂载的对象,名字可以任意指定
[root@client ~]# vim /etc/auto.nfs
nfspoint -ro 172.25.254.93:/test/nfs #nfsponit是要挂载的目录的除了最上层目录的目录,可以是多层目录,但是父目录为/mount/,-ro为只读挂载,172.25.254.93:/test/nfs为nfs共享目录。
[root@client ~]# systemctl restart autofs.service
测试结果:
可以看见nfs共享目录已经自动挂载到指定的目录上,而且在退出目录后5秒自动卸载。如果不退出目录就不会自动卸载。
配置在客户端挂载的目录中可写
[root@server ~]# vim /etc/exports
/test/nfs *(sync,rw) #rw表示可写
[root@server ~]# exportfs -rv #刷新
[root@server nfs]# chmod 777 /test/nfs/ #若不修改共享目录权限,会报错,权限不允许
客户端:
可以看见本来是不可以在共享目录中写的,配置后可以写了
配置指定用户在目录中写内容,而不是nfsnobody
server:
[root@server ~]# vim /etc/exports
/test/nfs *(sync,rw,anonuid=1001,anongid=1001) #指定一1001用户的身份在目录中写
[root@server ~]# exportfs -rv
client:
如果1001是client本地的一个用户,则会以此用户名显示:
设置本地以root用户在共享目录中创建文件
server:
[root@server ~]# vim /etc/exports
/test/nfs *(sync,rw,no_root_squash) #此时应该取消掉原本指定的用户,避免冲突
[root@server ~]# exportfs -rv
client:
可以看见新创建的文件是以root身份创建的。
其他配置
1,设置172.25.254.91可写,其他主机只可读
server:
[root@server ~]# vim /etc/exports
/test/nfs 172.25.254.91(sync,rw,no_root_squash) *(sync,ro)
[root@server ~]# exportfs -rv
测试:用量台主机:client(172.25.254.91),client2(172.25.254.1)
可以看见client2是不可以在共享目录下创建文件的。
2,设置主机名以”.example”结尾的值可以读,不可以写
server:
[root@server ~]# vim /etc/exports
/test/nfs 172.25.254.91(sync,rw,no_root_squash) *.example(sync,ro)
3,设置特的ip的主机只可以读,不可以写
server:
[root@server ~]# vim /etc/exports
/test/nfs 172.25.254.91(sync,rw,no_root_squash) 172.25.254.[1-10](sync,ro)
三,NFS的局限:
1、局限性是存在单点故障,如果NFSserver宕机了所有客户端都不能访问共享目录
2.NFS数据是明文的,对数据完整性不做验证
3、多机器挂载服务器时,连接管理维护麻烦。