NFS概念
NFS(网络文件系统)是Unix系统和网络附加存储文件管理器常用的网络文件系统。允许多个客户端通过网络共享文件访问。
它和CIFS的作用和功能基本一致,区别在于CIFS支持linux和windows之间的共享,但是NFS是linux和linux或者unix和unix之间的文件共享,不支持与windows系统的共享。
NFS文件系统的搭建
在服务端
1.
yum install nfs-utils ##安装所要搭建该服务所需要的软件
systemctl start nfs
systemctl status nfs
2.
firewll-cmd --permanent --add-service=nfs ##主服务,nfs决定了谁能共享、共享的方式,共享的目录
firewll-cmd --permanent --add-service=rpc-bind ##分配端口
firewll-cmd --permanent --add-service=mountd ##mountd:指引共享,告知共享位置
三者之间的关系如图所示:
3.设置NFS服务器配置
mkdir /westos_nfs ##建立共享目录
touch file{1..10} ##在共享目录里建立文件,为了后续实验效果的直观
vim /etc/exports
在文件中写入
/westos_nfs *(sync) ##共享的目录为/westos_nfs 以磁盘和硬盘的方式共享
exportfs -rv ##刷新
sync和async的区别
sync:内核中的数据和硬盘完成目的之后再做更新,效率高但是稳定性较差
async:实时同步更新,效率低,但稳定性好
4.
在客户端
测试
showmount -e 172.25.254.104(服务端IP) ##登录
mount 172.25.254.104:/westos_nfs /mnt
cd /mnt ##在共享目录下查看是否共享成功,查看到在服务端的的共享目录下的文件,即共享成功
NFS的自动挂载
在文件系统挂载时,一旦挂载即使没有在被使用也会一直处于挂载状态直到卸载,这样就会造成资源空间的浪费,而nfs提供的共享方式能实现:用即挂载不用即卸载的目的,减少资源的浪费
默认挂载点的自动挂载
在客户端
yum install autofs -y ##下载自动挂载所需的软件
默认挂载点/net/172.25.254.204(服务端IP)
cd /net/172.25.254.104/westo_nfs ##ls 能查看到文件
cd ##退出挂载点,达到卸载时间,即卸载
设置文件系统3秒空闲,则卸载
卸载时间点的设置
vim /etc/autofs.conf ##对于7.0及以上版本,在该文件中设置卸载时间
vim /etc/sysconfig/autofs ##对于7.0版本,更改卸载时间(默认300s)
更改挂载点
上述实现了自动的挂载和卸载,但是挂载点只能是默认挂载点,那么当需要将系统文件挂载到指定的挂载点,比如/mnt/westos
需要进行如下操作
vim /etc/auto.master ##主策略文件
在文件中写入
/mnt /etc/auto.nfs ##最终挂载点的上层目录 子策略文件(文件名称可自定义)
vim /etc/auto.nfs ##子策略文件
在子策略文件中写入
westos ro(rw) 172.25.254.104:/westos_nfs ##最终挂载点挂载参数 挂载的文件系统
systemctl restart autofs.service ##重启自动挂载服务
测试
cd /mnt/westos ##ls能查看到/westos_nfs中的文件
可以查看但是没有写权限
在子策略文件中写挂载参数为rw后还是不可写,原因是:客户端能不能对共享文件做一系列操作是取决于服务端的许可,在子策略文件中写入的rw参数,只是对于挂载形式的参数,可以使用mount
查看
在服务端
vim /etc/exports ##在nfs服务的配置中写入可写权限
/westos_nfs *(rw,sync)
客户端测试
cd /mnt/westos
touch file
还是无法写入:原因是在服务端的/etc/exports中写入读写权限针对于服务端的超级用户
而言,客户端的超级用户和服务端的超级用户是独立分开的,并不是同一个超级用户
,也就是客户端的超级用户并没有读写的权限,所以还是客户端
还是无法对共享目录写入,
进行下列操作:
服务端
vim /etc/exports
在文件中写入:
/westos_nfs *(sync) 172.25.254.204(rw) ##对客户端主机给予写权限
exportfs -rv ##刷新
在客户端重新测试
cd /mnt/westos
touch file
这时的报错为:permission denied,是因为目录本身不允许写入
服务端
chmod 777 /westos_nfs ##满权限
客户端再次测试
cd /mnt/westos
touch file
可以成功建立,并用ll 查看当前建立文件所使用的用户,因为777满权限不安全,可以使用acl权限列表对该用户给权限即可,既不影响文件写入也保证了安全性
NFS服务相关参数的设定(rw,ro,sync,async,匿名用户(组)身份转换,超级用户身份继承
对于ro,rw 共享文件写权限上述操作已经实现
sync和async的区别
sync:内核中的数据和硬盘完成目的之后再做更新,效率高但是稳定性较差
async:实时同步更新,效率低,但稳定性好
匿名用户(组)身份转换(将匿名用户转换为本地用户身份)
客户端此时登录创建的文件的身份是匿名用户身份
服务端
查看系统中存在的本地用户的uid
在没有加任何参数设定的情况下
用户身份
vim /etc/exports
文件中写入
/westos_nfs *(sync) 172.25.254.204(rw,anonuid=1001)
客户端
cd /mnt/westos
touch file
ll ##查看此时的用户身份是否转换成功
用户组
vim /etc/exports
文件中写入
/westos_nfs *(sync) 172.25.254.204(rw,anonuid=1001,anongid=1001)
客户端
cd /mnt/westos
touch file
ll ##查看此时的用户身份是否转换成功
如果客户端是普通用户时,此时在服务端
vim /etc/exports
/westos_nfs *(sync) 172.25.254.204(rw,anonuid=1001,anongid=1001,all_squash)
在客户端用普通用户的身份进行测试
超级用户的身份的继承
当客户端身份是超级用户时,在文件中增加no_root_squash
,刷新生效后,客户端不进行超级用户的身份转换,直接继承服务端超级用户的身份。
vim /etc/exports
/westos_nfs *(sync) 172.25.254.204 (rw,no_root_squash)
客户端
cd /mnt/westos
touch file
ll ##查看此时的用户身份是否是root
注意:当客户端使用普通用户的身份进行操作时,该操作不会生效,创建文件的用户时客户端的普通用户。