文章目录

  • 简介
  • NFS服务
  • NFS简介
  • NFS服务搭建
  • NFS的配置文件
  • 客户端的访问
  • showmount命令
  • mount命令
  • 卸载已挂载的目录
  • 备份数据的方案
  • 客户端自动挂载NFS
  • 通过计划任务自动备份
  • 哪些文件需要备份
  • 错误的NFS配置


简介

在过往的IT体系中,磁盘的性能一直在制约着整体的性能。而诸如于云计算、备份数据等需求往往需要海量的空间。
在实际的场景中,可以将存储分为如下三类:

  1. 单机版存储
  2. 类私有网盘存储
  3. 分布式存储
  • 单机版存储可以采用的方案如NFS、SMB等服务。
  • 私有网盘存储可以采用FreeNAS、owncloud等方案。
  • 分布式存储方案可以采用ceph、TFS等。

在企业的环境中可以进行针对性的选择,而出于企业备份数据的角度,课程中所讲述的存储方案为单机版与私有网盘的方案。

NFS服务

NFS简介

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

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

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

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

NFS服务搭建

在NFS的服务中,主要依赖于nfs-utils与rpcbind的来进行服务。
在centos中,使用如下命令安装所需服务
dnf -y install rpcbind nfs-utils

关于rpcbind的作用:

rpcbind实用程序是一个服务器,它将RPC程序编号转换为通用地址。它必须在主机上运行,才能在该机器上的服务器上进行RPC调用。

当一个RPC服务启动时,它告诉rpcbind它正在监听的地址,以及它准备服务的RPC程序编号。当客户端希望对给定的程序号进行RPC调用时,它首先联系服务器机器上的rpcbind,以确定应该将RPC请求发送到的地址。

rpcbind实用程序应该在任何其他RPC服务之前启动。通常,标准RPC服务器是由端口监视器启动的,因此在调用端口监视器之前必须启动rpcbind。

当rpcbind启动时,它检查某些名称到地址转换调用是否正确。如果失败,可能导致网络配置数据库损坏。由于RPC服务在这种情况下无法正常工作,rpcbind会报告条件并终止。

rpcbind实用程序只能由超级用户启动。

所以在NFS的服务的启动中,启动rpcbind后再启动NFS服务。

systemctl start rpcbind
systemctl start nfs-server
systemctl enable rpcbind
systemctl enable nfs-server

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

NFS的配置文件

NFS服务的配置文件为/etc/exports

建立分享的文件下

mkdir /share1
mkdir /share2

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

/share1 *(sync,ro) 192.168.0.50(sync,rw)
/share2 192.168.0.0/24(sync,ro)

编辑完成后,需要运行exportfs重新发布所共享的目录。(exportfs -r 重新读取配置文件)
如果需要重启服务,建议先重启rpcbind再重启NFS服务。

配置文件的含义如下:
输出"/share1"目录,对所有主机可读,对IP地址为192.168.0.50的主机可读可写。
输出"/share2"目录,对192.168.0.0/24网络内的所有主机可读。

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

地址可以使用完整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值。

客户端的访问

showmount命令

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

如果kali中没有showmount的指令,可通过如下指令进行查询与安装:

apt-cache search showmount
apt-get install nfs-common

mount命令

mount命令用于挂载磁盘,在nfs的服务中,需要使用mount -t nfs 或者mount.nfs的指令进行指定挂载的类型。
使用挂载前先在客户端创建挂载点。也就是mkdir创建好文件夹。例如:/mnt/share1 /mnt/share2
随后使用mount指令将远程主机的目录挂载至本机的目录。

mount -t nfs 192.168.0.33:/share1 /mnt/share1
mount.nfs 192.168.0.33:/share2 /mnt/share2

卸载已挂载的目录

mount |grep nfs 显示当前主机挂载的NFS共享目录
umount 挂在目录 命令卸载NFS 文件系统(不要在挂载的目录中进行操作)

备份数据的方案

假设现今我们在IDC的网络中,搭建了一台NFS的服务器用于给业务主机提供数据备份的服务。那么此时我们的需求可以梳理出大致需要完成以下三点的需要:

  1. 如果客户端重启后,那么挂载的连接将会失效,为此需要拥有自动挂载的方案。
  2. 备份的所拷贝的文件或文件夹时,需要采用时间戳进行命名,以便用于区分。
  3. 系统中哪些文件需要备份?

客户端自动挂载NFS

在客户机中,可通过使用rc.local的方式实现开机自动挂载。
在/etc/rc.local文件中添加如下内容:
mount.nfs 192.168.0.33:/backup /mnt/backup/ 随后创建挂载点,并给/etc/rc.local执行权限。

mkdir /mnt/backup
chmod +x /etc/rc.local

通过计划任务自动备份

首先我们先编写备份的脚本,以备份passwd文件为例:

#!/bin/bash
date="$(date +%F)"
cp /etc/passwd /mnt/backup/pass_$date

随后可通过计划任务进行配置周期性的运行脚本即可。

哪些文件需要备份

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

错误的NFS配置

第一,如果NFS暴露在公网中,虽然只给予了只读权限,那么外网主机通过访问共享即可得到敏感的数据。
第二,NFS在位于内网中的情况,那么当攻击者拿到其中一台主机的权限后,可通过访问备份的目录进入到数据集中的区域。
第三,如果将敏感的目录共享出去,攻击者有可能查看到/etc/shadow或者编辑密钥实现攻击。