本章节介绍如何提供基于文件的网络存储。包括NFS和Samba,但在我眼中,Samba已经成为鸡肋服务,因为勒索病毒的出现,很多政企都会在网络层面封禁135、137、138、139和445端口,而Samba协议就是使用这几个高风险端口,因此,是否用Samba真的好好考虑了。在我看来,还是别用。
文章目录RH358专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html
RH358提供基于文件的网络存储--导出NFS文件系统
1. 描述 NFS2. 启用NFS服务器3. 配置 NFS 导出
rwno_root_squash 4. 检查 NFS 导出5. 课本练习
1. 将服务器准备为NFS服务器。2. 创建/nfsshare目录并对其进行保护,以便只有student用户具有写访问权限。3. 导出/nfsshare目录。4. 将来自serverd的NFS导出挂载到servera的/share挂载点上。5. 对文件系统的访问权限进行认证。6. 确认lab.example.com DNS域中的其他系统可以以只读方式挂载导出。完成实验 总结
1. 描述 NFSNetwork File System (NFS) 是⼀种基于文件的存储协议,通常由 UNIX 系统和网络附加存储 network-attached storage(NAS) 设备使用。它提供跨网络对共享文件系统的透明远程访问。
Redhat Enterprise Linux 8默认使用NFS 4.2版本,支持使用NFSv4或NFSv3协议。不再支持NFSv2协议。NFS版本4 (NFSv4)只使用TCP传输,但是早期的NFS版本可以使用UDP或TCP。
NFS服务器导出文件系统目录及其内容,并与客户端共享。NFS客户端系统将导出的文件系统挂载到本地挂载点。
2. 启用NFS服务器在服务器上,nfs-utils包提供了与NFS共享目录所需的工具。
启用并启动nfs-server服务。
[root@host ~]# systemctl enable --now nfs-server
服务器端的NFS协议版本为4.1及以上,端口为2049/TCP。配置防火墙,允许访问nfs服务,以打开该端口。
[root@host ~]# firewall-cmd --permanent --add-service=nfs
[root@host ~]# firewall-cmd --reload
早期版本的NFS需要允许访问其他端口。
3. 配置 NFS 导出用于共享的主配置文件为/etc/exports。/etc/exports.d/*.exports 文件作为额外的配置读取,都使用相同的语法
在配置文件中,每一行声明一个导出点。第一个字段是导出目录的名称,其余部分列出访问共享目录的客户端及访问权限
**注意:**不要使用 NFS 导出同时是 SMB 共享的目录。可能会造成文件损坏或文件完整性或一致性问题
在配置文件中可以通过几种方式指定客户机系统。
dns可解析的主机名,如client1.example.com。在下面的例子中,client1.example.com系统可以挂载/srv/myshare目录。
/srv/myshare client1.example.com
带有*通配符的dns可解析主机名。下面的示例允许example.com域中的所有系统访问NFS共享。
/srv/myshare *.example.com
IPv4地址。下面使用192.168.0.12的IP地址访问NFS共享为例。
/srv/myshare 192.168.0.12
IPv4网络。下面以192.168.0.0/24网络为例进行说明。也可以使用192.168.0.0/255.255.255.0表示法。
/srv/myshare 192.168.0.0/24
IPv6地址。以IPv6地址为fde2:6494:1e09:2::20的客户端系统访问NFS共享为例。
/srv/myshare fde2:6494:1e09:2::20
IPv6网络。例如使用fde2:6494:1e09:2::/64 IPv6网络访问NFS共享。
/srv/myshare fde2:6494:1e09:2::/64
若要与多个客户端系统共享一个目录,请在目录名称后使用空格分隔的列表:
/srv/myshare 192.168.0.0/24 client1.example.com *.example.net
默认情况下,目录以只读方式与客户端共享。在每个客户端定义之后,可以在圆括号中指定导出选项以覆盖默认值。
**重要:**客户端定义的结尾和开括号之间不能有空格。
下面是最常见的选项。
rw此选项允许对指定的客户端进行读/写访问。没有这个选项(或者如果使用ro代替),NFS只授予读访问权。以下示例中,client1.example.com具有读写权限,而client2.example.com具有只读权限
/srv/myshare client1.example.com(rw) client2.example.com
no_root_squash默认情况下,当客户机上的root用户访问NFS导出时,服务器将其视为nobody用户的访问。这意味着,如果客户机上的root用户在导出中创建了一个文件,那么该文件将属于nobody用户。这也意味着,如果客户机上的root试图读取用户nobody无法读取的导出文件,则访问将失败。
您可以通过添加no_root_squash选项来禁用该安全保护。下面的示例允许使用client1.example.com系统读写权限和真实root用户对/srv/myshare导出目录的访问权限。
/srv/myshare client1.example.com(rw,no_root_squash)
**注意:**在Red Hat Enterprise Linux 7及更早的版本中,用户是nfsnobody而不是nobody。
4. 检查 NFS 导出使用exportfs命令列出NFS服务器当前导出的目录。
[root@host ~]# exportfs
/srv/myshare client1.example.com
缺省情况下,该命令不显示导出选项。使用-v选项列出这些选项,包括默认选项。
[root@host ~]# exportfs -v
/srv/myshare client1.example.com(sync,…,rw,secure,no_root_squash,…)
当修改/etc/exports或/etc/exports.d/*.exports文件中的导出点时。对于NFS服务,执行exportfs -r命令以考虑这些更改。作为一种替代方法,您还可以运行systemctl reload nfs-server。
5. 课本练习[student@workstation ~]$ lab filestorage-nfs start
该命令确保servera、serverb和serverd在网络上可用。
在本练习中,您将配置serverd使用NFS共享/nfsshare目录。将servera配置为将这个NFS挂载到/share目录下。
1. 将服务器准备为NFS服务器。为此,安装nfs-utils包,启动nfs-server服务,然后打开防火墙端口。
[root@serverd ~]# yum -y install nfs-utils [root@serverd ~]# systemctl enable --now nfs-server [root@serverd ~]# firewall-cmd --permanent --add-service=nfs success [root@serverd ~]# firewall-cmd --reload success2. 创建/nfsshare目录并对其进行保护,以便只有student用户具有写访问权限。
[root@serverd ~]# mkdir /nfsshare [root@serverd ~]# chown student /nfsshare [root@serverd ~]# ls -ld /nfsshare drwxr-xr-x. 2 student root 6 Jul 1 13:55 /nfsshare # 注意:学生用户具有读/写访问权限,而其他所有用户只有读访问权限。3. 导出/nfsshare目录。
# 以便仅servera.lab.example.com可以读/写挂载它。确保lab.example.com DNS域中的所有其他系统都可以只读地挂载共享导出。 [root@serverd ~]# vim /etc/exports.d/exercise.exports /nfsshare servera.lab.example.com(rw) *.lab.example.com(ro) [root@serverd ~]# systemctl reload nfs-server [root@serverd ~]# exportfs -v /nfsshare servera.lab.example.com(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /nfsshare *.lab.example.com(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)4. 将来自serverd的NFS导出挂载到servera的/share挂载点上。
[root@servera ~]# mkdir /share [root@servera ~]# echo "serverd.lab.example.com:/nfsshare /share nfs defaults 0 0" >> /etc/fstab [root@servera ~]# mount /share [root@servera ~]# df /share Filesystem 1K-blocks Used Available Use% Mounted on serverd.lab.example.com:/nfsshare 10474496 2534912 7939584 25% /share5. 对文件系统的访问权限进行认证。
[root@servera ~]# su - student -c "echo Hello World > /share/test.txt" [root@servera ~]# ls /share test.txt # 这个测试验证了在读写模式下可以访问导出。 [root@servera ~]# echo Hello World > /share/root_test.txt -bash: /share/root_test.txt: Permission denied # serverd上的NFS服务器将来自root的请求映射到nobody用户帐户。系统拒绝权限,原因是nobody用户对服务器上的/nfsshare目录没有写权限。6. 确认lab.example.com DNS域中的其他系统可以以只读方式挂载导出。
[root@serverb ~]# mount serverd.lab.example.com:/nfsshare /mnt [root@serverb ~]# df /mnt Filesystem 1K-blocks Used Available Use% Mounted on serverd.lab.example.com:/nfsshare 10474496 2534656 7939840 25% /mnt [root@serverb ~]# ls /mnt test.txt [root@serverb ~]# cat /mnt/test.txt Hello World [root@serverb ~]# su - student -c "echo Hello World > /mnt/from_serverb.txt" -bash: /mnt/from_serverb.txt: Read-only file system # 命令失败是因为文件系统是只读的。完成实验
[student@workstation ~]$ lab filestorage-nfs finish
总结介绍NFS。如何部署和配置NFS。导出NFS并挂载使用。若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。



