在hackthebox上打的一个靶机 上面运行一个restic程序 因为需要提权到root所以学习了一下这个
https://restic.readthedocs.io/ 这个是官网
https://github.com/restic/restic github地址
可以在上面按照说明下载安装
也可以使用
apt-get install restic
按照官网介绍如果需要从源码中构建需要go 1.9以上版本 详细在官网上有手册介绍
restic 使用的时候感觉命令格式与git 类似 有些子命令 这些子命令可以使用--help查看帮助手册
每个目录或者文件的备份都需要一个保存的位置 这个保存的位置在restic中称为存储库
这个存储库可以是远程或者本地 又或或者其他的设备
如果需要自动备份由几个环境变量需要设置(如果不是自动备份可以不用设置 ):
存储库位置:RESTIC_REPOSITORY
密码文件位置:RESTIC_PASSWORD_FILE,--password-file
设置环境变量 RESTIC_PASSWORD
在备份之前需要初始化一个仓库 这个仓库可以用作以后备份的保存
restic init -r ${path}
仓库初始化需要设置密码 以后访问这个仓库都需要这个密码才能有权限访问
在靶机中使用的是远程仓库rest-server 这个另一篇介绍
访问rest远程仓库
restic -r rest:${URL}
举个例子如何将本地文件备份到目标仓库中
restic backup -r ${restic-repo} ${dir} --verbose
backup 是restic子命令之一 备份目标文件到仓库中 有其他一些选项 可以使用restic backup --help查看
-r ${restic-repo} 仓库位置可以是远程仓库
${dir} 需要备份的目录
--verbose 打印备份信息
在靶机中sudo -l 查看到的命令是 sudo restic back -r rest:*
而backup 命令下有一个--files-from 备份时读取文件 所以使用这个选项读取了shadow 文件进而得到root权限读取文件
而备份的时候注意上面命令都在root权限下所以注意权限设置 最好另外设置一个用户 因为靶机不能外联所以不能在本地创建存储库,而将文件备份到本地
按照官网所讲 如果同一个仓库中有重复的数据则会被删除 所以备份过程中可以包括或者忽略某个文件
如果成功备份会在备份的仓库中创建一个快照 并且会有一个快照id 生成
这个快照就是这次备份的结果多次备份会创建多个快照 当然同一个文件多次备份并不会保存任何数据因为不过仓库中已经有该文件
比较两个快照
restic -r ${restic-repo} diff ${id} ${id}
按照两个快照id进行比较 会统计两个快照的差异
成功备份之后查看仓库中的内容
restic snapshots -r ${restic-repo}
列出目标仓库中的所有快照
-c, --compact use compact format
-h, --help help for snapshots
-H, --host host only consider snapshots for this host
--last only show the last snapshot for each host and path
--path path only consider snapshots for this path (can be specified multiple times)
--tag taglist only consider snapshots which include this taglist (can be specified multiple times) (default [])
主机标签或者目录,或者组合方式过滤快照
restic check -r ${restic-repo}
如果文件被损坏检查之后会有报错信息
这时如果还原快照会收到同样的错误信息也就是文件出错无法恢复
--read-data检查所有数据文件状态
将某个存储库中的快照恢复到目标目录中
restic -r ${restic-repo} restore ${id} --target ${dir}
从存储库${restic-repo} 中恢复ID为${id}的快照到目标目录${dir}中
可以在恢复过程中包含或者过滤某个文件恢复这个快照中的子集
也可以直接将文件读取使用dum 命令
修剪某个快照会耗费较多时间
获得仓库中的快照列表之后
可能会删除某个不使用的快照以节省空间 命令forget 需要指定快照的ID
restic -r ${restic-repo} forget ${id}
不过此快照中的文件引用的数据仍存储在存储库中
清除未引用的数据可以使用prune
restuc -r ${restic-repo} prune
forget 命令中也有该参数
如果使用自动备份可能会有较多的快照以及删除时的繁琐删除也有同样的设置 可以自动删除