什么是NFS服务?
网络文件系统 (NFS) 是 Unix 系统和网络附加存储文件管理器常用的网络文件系统 , 允许多个客户端通过网络共享文件访问。它可用于提供对共享二进制目的访问 , 也可用于允许用户在同一工作组中从不同客户端访问其文件NFS 协议有多个版本 :Linux 支持版本 4 、版本 3 和版本 2, 而大多数系统管理员熟悉的是 NFSv3 。默认情况下 , 该协议并不安全 , 但是更新的版本 ( 如 NFSv4) 提供了对更安全的身份验证的支持 , 甚至可以通过 kerberos 进行加密
NFS原理介绍
首先:NFS包括两部分,服务端及客户端
由于NFS服务功能很多,会有很多端口,这些端口还有可能不固定,那么客户端就无法与服务器进行通信,因为程序间通信必须通过端口(tcp/udp都是端到端通信),那么就需要一个中间的桥接机制,RPC进程即充当这样一个角色,RPC的端口是一定的(111),当NFS启动时,会向RPC进行注册, 那么客户端PRC就能与服务器RPC进行通信, 从而进行文件的传输。
当客户端用户打开一个文件或目录时,内核会判断,该文件是本地文件还是远程共享目录文件,如果是远程文件则通过RPC进程访问远程NFS服务端的共享目录,如果是本地文件,则直接打开。
一、NFS的基本配置
配置yum源
1.只读访问
在服务端:
[root@server ~]# yum install nfs-utils -y ##安装nfs
[root@server ~]# systemctl start nfs ##开启nfs服务
[root@server ~]# systemctl stop firewalld ##关闭防火墙
[root@server ~]# systemctl disable firewalld ##开机自动关闭火墙
[root@server ~]# vim /etc/exports
写入: /mnt *(sync,ro) ##对/mnt有只读权限
[root@server ~]# exportfs -rv ##刷新共享目录并输出详细信息
exporting *:/mnt
在客户端:测试
[root@client ~]# showmount -e 172.25.254.228
[root@client ~]# umount /mnt
[root@client ~]# mount 172.25.254.228:/mnt/ /mnt/
[root@client ~]# df
[root@client ~]# cd /mnt
[root@client mnt]# ls
[root@client mnt]# touch file ##对文件管理只有只读权限
2.读写访问
在服务端:
[root@server ~]# vim /etc/exports
/mnt *(sync,rw) ##对/mnt有读写权限
[root@server ~]# exportfs -rv ##刷新共享目录并输出详细信息
[root@server ~]# ls -ld /mnt
[root@server ~]# chmod 777 /mnt/
[root@server ~]# ls /mnt
[root@server ~]# touch /mnt/file
在客户端:
[root@client ~]# cd /mnt
[root@client mnt]# touch /mnt/file1
在服务端:
3.root用户的访问权限
在服务端:
[root@server ~]# vim /etc/exports
/mnt *(sync,rw,no_root_squash) ##root用户具有根目录的完全管理访问权限(使用nfs时,如果用户是root,不进行权限压缩,即root用户在nfs上创建的文件 属组和属主仍然是root)
[root@server ~]# exportfs -rv
exporting *:/mnt
在客户端:
[root@client ~]# cd /mnt
[root@client mnt]# ls
file file1
[root@client mnt]# touch file2
[root@client mnt]# ll
4.指定IP权限
在服务端:
[root@server ~]# mkdir /westos
[root@server ~]# vim /etc/exports
/mnt *(sync,rw,anonuid=1000,anongid=1000) ##anonuid,anongid指匿名用户映射的UID,GID
/westos 172.25.254.128/24(sync,ro) 172.25.254.28(sync,rw,no_root_squash) ##指定前面的IP是只读权限,后面IP为可读可写权限
[root@server ~]# exportfs -rv
在客户端:
此时客户端只有只读的权限172.25.254.128/24(sync,ro)
在真机上:
此时真机有读写权限172.25.254.28(sync,rw,no_root_squash)
并且用户是root,不进行权限压缩,即root用户在nfs上创建的文件 属组和属主仍然是root
二、autofs自动挂载
在服务端上:
[root@server ~]# vim /etc/exports
删除之前写进去的内容
写入:/westos 172.25.254.128/24(sync,rw,no_root_squash)
[root@server ~]# exportfs -rv ##刷新共享目录并输出详细信息
exporting 172.25.254.128/24:/westos
[root@server ~]# systemctl start nfs
在客户端:
[root@client ~]# yum install autofs -y ##安装autofs
[root@client ~]# systemctl start autofs
[root@client ~]# showmount -e 172.25.254.228 ##查看nfs共享状态
Export list for 172.25.254.228:
/westos 172.25.254.128/24
[root@client ~]# cd /net
[root@client net]# ls ##此时查看为空
[root@client net]# cd 172.25.254.228 ##进入挂载点
[root@client 172.25.254.228]# pwd
/net/172.25.254.228
[root@client 172.25.254.228]# ls
westos
[root@client 172.25.254.228]# cd westos ##只有cd进入到nfs共享目录westos下,会立马激活,自动挂载
[root@client westos]# ls
挂载路径是在两个配置文件里写入的目录路径。
[root@client westos]# df
[root@client westos]# cd
[root@client ~]# vim /etc/sysconfig/autofs
13 TIMEOUT=5 ##5秒钟后自动卸载
[root@client ~]# systemctl restart autofs.service
[root@client ~]# df
系统默认时间为300秒,为了能看难道实验结果,我们改为5秒自动卸载。
三、autofs的指定挂载点
在客户端:
[root@client ~]# vim /etc/auto.master
第8行写入: /nfs /etc/auto.westos ##最终挂载点的上层目录
[root@client ~]# vim /etc/auto.westos
westos -ro 172.25.254.228:/westos ##最终挂载点的名称
[root@client ~]# systemctl restart autofs.service
[root@client ~]# cd /nfs
[root@client nfs]# ls
[root@client nfs]# cd westos
[root@client westos]# df ##查看挂载点
[root@client westos]# mount
[root@client ~]# vim /etc/auto.westos
westos -rw,vers=3 172.25.254.228:/westos
[root@client ~]# systemctl restart autofs.service
[root@client ~]# cd /nfs
[root@client nfs]# cd westos
[root@client westos]# mount