环境

VMware Workstation 14

系统

Server:Kali-linux-2023.1(IP:192.168.20.101)

Client:Centos-Stream-9-latest(IP:192.168.20.102)

说明

NFS简介

NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

以下是NFS最显而易见的好处:

  • 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
  • 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
  • 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。

需要特别强调,NFS服务用于Linux类的主机间的文件共享,当需要与windows生态进行访问时,需要采用SMB协议。

服务搭建

在NFS的服务中,主要依赖于nfs-utils与rpcbind的来进行服务。

I.在centos中,使用如下命令安装所需服务

1
[root@Server ~]# yum install rpcbind nfs-utils -y

II.启动服务

1
2
3
4
systemctl start rpcbind
systemctl start nfs-server
systemctl enable rpcbind
systemctl enable nfs-server

查看rpc服务的注册情况,可使用rpcinfo的指令进行查看。

1
rpcinfo -p localhost

III.NFS配置文件

01.配置目录为/etc/exports,根据需要建立分享文件

1
2
mkdir /share1
mkdir /share2

02.编辑/etc/exports,输入如下内容:

1
2
/share1 *(sync,ro) 10.10.20.101(sync,rw)
/share2 10.10.20.0/24(sync,ro)

编辑完成后,需要运行exportfs重新发布所共享的目录。(exportfs -r 重新读取配置文件)

如果需要重启服务,建议先重启rpcbind再重启NFS服务。

配置文件含义如下:

输出”/share1”目录,对所有主机可读,对IP地址为10.10.20.101的主机可读可写。

输出”/share2”目录,对10.10.0.0/24网络内的所有主机可读。

配置文件每行分为两段:第一段为共享的目录,使用绝对路径,第二段为客户端地址及权限。

1
2
3
4
5
6
7
8
9
10
11
地址可以使用完整IP或网段,例如10.0.0.8或10.0.0.0/24,10.0.0.0/255.255.255.0当然也可以地址可以使用主机名,DNS解析的和本地/etc/hosts解析的都行,支持通配符,例如:*.fsec.io  
权限有:
· rw:read-write,可读写;
· ro:read-only,只读;
· sync:文件同时写入硬盘和内存;
· async:文件暂存于内存,而不是直接写入内存;
· no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。
· root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
· all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
· anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
· anongid:匿名用户的GID值。

IV.客户端访问

01.showmount命令:

showmount -e显示本地NFS服务器中的共享列表

showmount -e IP 显示指定NFS服务器中的共享列表

02.mount命令:

mount命令用于挂载磁盘,在nfs的服务中,需要使用mount -t nfs 或者mount.nfs的指令进行指定挂载的类型。

使用挂载前先在客户端创建挂载点。

1
mkdir -p /mnt/share1 /mnt/share2

随后使用mount指令将远程主机的目录挂载至本机的目录。

1
2
mount -t nfs 10.10.20.101:/share1 /mnt/share1
mount.nfs 10.10.20.101:/share2 /mnt/share2

当我们进入到挂载好的目录中,分别进行创建文件的测试,会发现虽然同时失败,但报错的信息却分别为权限不够只读文件系统

但我们所配置的权限中,特定的IP已经给予rw的权限,却提示权限不够。换言之,share2的权限是对的,share1的写入权限为错误状态。

exports目录权限中,有这么一个参数no_root_squash

其作用是:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有root 的权限!。默认情况使用的是相反参数root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的UID 与 GID 都会变成 nobody 那个身份。

为此重新修正权限后即可完成写入。

V.卸载已挂载的目录

mount |grep nfs显示当前主机挂载的NFS共享目录

umount 命令卸载NFS 文件系统(不要在挂载的目录中进行操作)

哪些文件需要备份

数据无价!!!

数据库、web代码、web所上传的文件、日志等。

错误的NFS配置

第一,如果NFS暴露在公网中,虽然只给予了只读权限,那么外网主机通过访问共享即可得到敏感的数据。

第二,NFS在位于内网中的情况,那么当攻击者拿到其中一台主机的权限后,可通过访问备份的目录进入到数据集中的区域。

第三,如果将敏感的目录共享出去,攻击者有可能查看到/etc/shadow或者编辑密钥实现攻击。