搭建NFS服务

目录

一、环境

二、搭建NFS

1、在server上安装NFS服务端

2、启动nfs服务

3、将你想共享给客户端的文件路径写入到/etc/exports中

4、使用exportfs命令重新扫描/etc/exports文件,来使改动立刻生效

​5、安装客户端并在客户端查看服务端共享的目录

6、将服务端共享的目录挂载到客户端主机中

7、查看挂载路径下的内容是否和服务端共享目录下的一致

三、重点注意的点

1、ro、rw

2、root_squash、not_root_squash

3、all_squash、not_all_squash

4、anonuid、anongid

5、rpcinfo -p


一、环境

server(服务端)client1(客户端1)client2(客户端2)
ip10.0.0.15410.0.15110.0.0.161
操作系统RockyRockyUbuntu
软件包nfs-utilsnfs-utilsnfs-common

二、搭建NFS

1、在server上安装NFS服务端

yum -y install nfs-utils

注意:

a、在Rocky中,nfs的客户端以及服务端都在nfs-utils这个包中

b、而在Ubuntu中,nfs客户端以及服务端的包是分开的

#安装客户端
apt install nfs-common

#安装服务端
apt install nfs-kernel-server

2、启动nfs服务

systemctl start nfs-server.service 

3、将你想共享给客户端的文件路径写入到/etc/exports中

vim /etc/exports


#允许访问的服务端文件+允许访问服务端文件的客户端ip+客户端的权限
#151是读写权限,161只读权限,其他权限默认
/data/nfs 10.0.0.151(rw) 10.0.0.161(ro)

注意:

exports文件内容的格式为:/path/share 192.168.1.20(rw,insecure,sync,all_squash)
ip后的参数默认是(ro,sync,root_squash,no_all_squash)

主要选项
# ro 只读
# rw 读写
# root_squash 远程客户端主机上的 root 用户映射成 NFS 主机上的 UID=65534 的用户
# no_root_squash 远程客户端主机 root 用户映射成 NFS 服务器的 root
# all_squash 远程客户端主机用户都映射成 NFS 主机上的 UID=65534 的用户,此项会覆盖no_root_squash
# anonuid 指定用户映射成特定的用户的UID
# anongid 指定用户映射成特定的用户的GID
# sync 同步落盘,在请求数据时立即写入NFS的磁盘上,性能低,安全性高
# async 异步落盘,数据先暂存于缓冲区,再一次性落盘,性能高,安全性低
# insecure 允许非授权访问
# subtree_check 如果共享子目录,强制NFS 检查父目录权限
# no_subtree_check 不检查父目录权限
# wdelay 多个用户写时等待同时写
# no_wdelay 多个用户写时不等待,立即写,当使用 async 项时,无需此设置 
# hide 不共享NFS 服务中的子目录,在 NFSv4中无效
# no_hide 共享NFS 服务器上的子目录,在 NFSv4中无效
# secure NFS 服务通过1024以下的安全TCP/IP端口通讯
# insecure NFS 服务通过1024以上的安全TCP/IP端口通讯

4、使用exportfs命令重新扫描/etc/exports文件,来使改动立刻生效

#读取配置
exportfs -r

#查看配置
exportfs -v

5、安装客户端并在客户端查看服务端共享的目录

#在Ubuntu中安装nfs客户端或在rocky安装客户端
apt install nfs-common 或 yum -y install nfs-utils

#showmount -e 这个命令的功能是显示 NFS 服务器上所有的共享目录
showmount -e 10.0.0.154

6、将服务端共享的目录挂载到客户端主机中

#挂载路径/client/nfs是我自建的(空目录文件),可以选择任意你想要的路径
mount 10.0.0.154:/data/nfs /client/nfs

7、查看挂载路径下的内容是否和服务端共享目录下的一致

可以看到客户端下/client/nfs下目录读取的内容是服务端下/data/nfs,到此为止nfs服务搭建完成。以上搭建过程中,nfs客户端采用的clien2,如果采用client1也是差不多的过程,就不写了,需要注意的是在Ubuntu中和Rocky中安装nfs客户端的方法有所区别,这个我在前面已经强调过了。

三、重点注意的点

1、ro、rw

ro:表示只读,如果需要创建文件或修改文件等操作则需要写权限。

rw:读写权限。

在/etc/exports中可以修改权限,然后重新执行exportfs -r重新读取配置文件        

从上图可以明显看到,在执行写操作的时候提示从read only 到Permission denied,说明不是因为ro的原因导致的无法写操作。下面继续分析。

2、root_squash、not_root_squash

squash这个单词的中文释义是“压制、抑制”,所以root_squash这个参数的作用大概也能从字母意思猜到:压制root权限。

root_squash:这个参数表示NFS服务器会把客户端的root用户(UID为0)映射为一个匿名用户根据UID来进行映射,通常是nobody,跟版本有关,UID为65534),以防止root用户在NFS服务器上拥有超级权限。这是默认的设置,可以提高安全性。

这种情况下如何让客服端拥有写权限呢?

上面提到了,将客户端的root账号映射成了服务端的匿名用户,那么匿名用户的权限就是客户端root的权限,所以只需要给匿名用户加上写权限即可。

#给属主、属组、other添加rwx权限
chomd 777 /data/nfs

从上图可以看出,服务端共享文件加了权限后,客户端拥有了写权限。并且,客户端创建的文件,在服务端显示的属主属组为nobody,这也印证了前面所说的客户端root映射服务端匿名账号。

no_root_squash:这个参数表示NFS服务器不会对客户端的root用户进行映射,而是保留其原始的UID。相当于客户端root账号映射服务端root账号,拥有所有权限,一定程度上会降低安全性。

注意:客户端与服务端账号的映射都是通过UID来映射的,不是通过用户名

在服务端和客户端创建俩个UID相同的用户,在客户端上创建文件,分别在客户端以及服务端查看属组属主,明显可以看出是通过UID进行映射的。

3、all_squash、not_all_squash

all_squash:这个参数表示NFS服务器会把所有客户端的用户(不管是不是root)都映射为一个匿名用户,此项会覆盖no_root_squash

这里需要注意,all_squash会把客户端的所有用户进行映射到默认匿名用户,如果配置文件中有anonuid和anongid则按这俩个参数映射到相应的用户和组。这里客户端文件属组显示nogroup的原因是在Ubuntu中GID为65534的组就叫nogroup。

no_all_squash:这个参数表示NFS服务器不会对所有客户端的用户进行映射,而是保留其原始的UID。这个参数是默认的设置。

这里需要注意了,这个普通用户mage并没有映射到nobody,而是保留了原始的UID

4、anonuid、anongid

NFS服务器可以通过anonuid和anongid这两个参数来指定匿名访问用户的本地用户UID和本地用户组GID。也就是说,anonuid和anongid可以通过这俩个参数在指定客户端映射到服务端的哪个账户

举例:

①配置文件中加入anonuid=2000,客户端创建a.sh后,在服务端可以看到a.sh的属主是server,而属组是nobody。这是因为我们只指定了anonuid,未指定anongid,所以属组还是按默认的映射。

②配置文件中加入anonuid=2000,anongid=2000,客户端创建b.sh后,在服务端可以看到b.sh的属主属组都是是server。

5、rpcinfo -p

rpcinfo -p:查看注册在指定主机上的rpcbind V2 版本的 RPC 服务。

protmapper是rpcbind以前的名字,这里可以看到nfs中其他服务占用的端口,其中有些端口是固定不变的,有些是会变化的。比如rpcbind一直是占用111。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值