文章目录
- 简介
- NFS服务
- NFS简介
- NFS服务搭建
- NFS的配置文件
- 客户端的访问
- showmount命令
- mount命令
- 卸载已挂载的目录
- 备份数据的方案
- 客户端自动挂载NFS
- 通过计划任务自动备份
- 哪些文件需要备份
- 错误的NFS配置
简介
在过往的IT体系中,磁盘的性能一直在制约着整体的性能。而诸如于云计算、备份数据等需求往往需要海量的空间。
在实际的场景中,可以将存储分为如下三类:
- 单机版存储
- 类私有网盘存储
- 分布式存储
- 单机版存储可以采用的方案如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的服务器用于给业务主机提供数据备份的服务。那么此时我们的需求可以梳理出大致需要完成以下三点的需要:
- 如果客户端重启后,那么挂载的连接将会失效,为此需要拥有自动挂载的方案。
- 备份的所拷贝的文件或文件夹时,需要采用时间戳进行命名,以便用于区分。
- 系统中哪些文件需要备份?
客户端自动挂载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或者编辑密钥实现攻击。