跳至主要内容

Restic --使用aws备份案例

例子

用Amazon S3设置restic

前言

本教程将向您展示如何在AWS S3中使用restic。它将向您展示如何浏览AWS Web界面,创建S3存储桶,创建只能访问此存储桶的用户以及如何将restic连接到此存储桶。

先决条件

您的系统上应该已经有一个restic可以运行二进制文件。此外,您还应该拥有AWS账户 即使您使用免费套餐,您也可能需要提供信用卡详细信息才能进行结算 

登录到AWS

将浏览器指向 https://console.aws.amazon.com 并使用您的AWS账户登录。您将看到AWS主页:
AWS主页
通过使用左上角的“服务”按钮,可打开AWS提供的所有服务菜单:
AWS服务菜单
对于本教程,简单存储服务(S3)以及身份和访问管理(IAM)是相关的。

创建桶

首先,必须创建用于存储备份的存储桶。使用“服务”菜单,导航到S3。如果您已经有一些S3存储桶,您会在这里看到它们的列表:
S3铲斗列表
点击“创建存储桶”按钮,然后为新存储桶选择一个名称和区域。为了本教程的目的,该存储桶将被命名 restic-demo并驻留在法兰克福。由于存储桶名称空间在所有AWS用户之间共享,因此名称restic-demo可能无法提供给您。要有创意并选择一个独特的存储桶名称。
创建一个桶
没有必要配置存储桶的任何特殊属性或权限。因此,只需完成向导而不做任何进一步的更改:
审查桶创建
新创建的restic-demo存储桶现在将显示在S3存储桶的列表中:
与新的时段的名单

创建一个用户

使用AWS Web界面的“服务”菜单导航到IAM。这会将您带到IAM主页。要创建新用户,请点击左侧的“用户”菜单条目:
IAM主页
如果您之前已经拥有使用IAM的设置用户,您会在这里看到它们的列表。使用顶部的“添加用户”按钮创建一个新用户:
IAM用户列表
对于本教程,新用户将被命名restic-demo-user随意选择最适合您需求的名称。该用户只能通过该restic程序访问AWS ,而不能通过Web界面访问。因此,“访问类型”选择了“编程访问”:
选择用户名和访问类型
在下一步中,可以将权限分配给新用户。要使用这个用户,只需要访问restic-demo存储桶。选择“直接附加现有政策”,这将在下面列出预先定义的政策。之后,点击“创建策略”按钮创建一个自定义策略:
分配策略
使用策略向导将打开一个新的浏览器窗口或选项卡。在Amazon IAM中,策略被定义为JSON文档。对于本教程,将使用“可视编辑器”来生成策略:
创建一个新政策
为了restic工作,必须使用可视策略编辑器创建两个权限语句。第一项声明的设置如下:
Service: S3
Allow Actions: DeleteObject, GetObject, PutObject
Resources: arn:aws:s3:::restic-demo/*
该语句允许restic在名为的S3存储桶内创建,读取和删除对象restic-demo将存储桶的名称调整为您之前创建的存储桶的名称。接下来,使用“添加附加权限”按钮添加第二条语句:
Service: S3
Allow Actions: ListBucket, GetBucketLocation
Resource: arn:aws:s3:::restic-demo
再次,restic-demo用您的存储桶的实际名称替换请注意,与以前不同,/*在存储桶名称后面没有此语句允许restic列出存储在存储区中的对象restic-demo并查询存储区的区域。
点击“查看策略”按钮继续下一步,并输入该策略的名称和说明。对于本教程,该策略将被命名restic-demo-policy点击“创建策略”完成该过程:
政策审查
返回到之前创建新用户的浏览器窗口或选项卡。单击策略列表上方标记为“刷新”的按钮以确保新创建的策略对您可用。之后,使用搜索功能搜索restic-demo-policy使用左侧的复选框选择此策略。然后,继续下一步。
将策略附加到用户
下一页将显示即将创建的用户帐户的概述。如果一切正常,请点击“创建用户”完成该过程:
用户创建评论
用户创建后,将显示其访问凭据。它们由“访问密钥ID”(认为用户名)和“秘密访问密钥”(认为密码)组成。将它们复制到一个安全的地方。
用户凭证
您现在已经完成了AWS中的配置。随时关闭您的网络浏览器。

初始化Restic存储库

打开一个终端并确保你已经restic准备好二进制文件。首先,选择一个密码来加密您的备份。在本教程中,apg用于此目的:
$ apg -a 1 -m 32 -n 1 -M NCL
I9n7G7G0ZpDWA3GOcJbIuwQCGvGUBkU5
请注意将此密码与您的AWS凭证一起放在安全的地方。接下来,restic的配置将被放置到环境变量中。这将包含敏感信息,例如您的AWS秘密和存储库密码。因此,请确保下一个命令最终不会出现在shell的历史记录文件中。调整环境变量的内容以适合您的存储桶的名称和用户的API凭证。
$ unset HISTFILE
$ export RESTIC_REPOSITORY="s3:https://s3.amazonaws.com/restic-demo"
$ export AWS_ACCESS_KEY_ID="AKIAJAJSLTZCAZ4SRI5Q"
$ export AWS_SECRET_ACCESS_KEY="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"
$ export RESTIC_PASSWORD="I9n7G7G0ZpDWA3GOcJbIuwQCGvGUBkU5"
环境设置完成后,可能会调用restic来初始化存储库:
$ ./restic init
created restic backend b5c661a86a at s3:https://s3.amazonaws.com/restic-demo

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
restic现在已准备好与AWS S3一起使用。尝试创建备份:
$ dd if=/dev/urandom bs=1M count=10 of=test.bin
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0,0891322 s, 118 MB/s

$ ./restic backup test.bin
scan [/home/philip/restic-demo/test.bin]
scanned 0 directories, 1 files in 0:00
[0:04] 100.00%  2.500 MiB/s  10.000 MiB / 10.000 MiB  1 / 1 items ... ETA 0:00
duration: 0:04, 2.47MiB/s
snapshot 10fdbace saved

$ ./restic snapshots
ID        Date                 Host        Tags        Directory
----------------------------------------------------------------------
10fdbace  2017-03-26 16:41:50  blackbox                /home/philip/restic-demo/test.bin
快照已创建并存储在S3存储桶中。现在可以恢复此快照:
$ mkdir restore

$ ./restic restore 10fdbace --target restore
restoring <Snapshot 10fdbace of [/home/philip/restic-demo/test.bin] at 2017-03-26 16:41:50.201418102 +0200 CEST by philip@blackbox> to restore

$ ls restore/
test.bin
快照已成功恢复。本教程结束。

以root身份运行备份系统而不运行restic

动机

创建一台计算机的完整备份需要一个能够读取所有文件的特权进程。在类UNIX系统上,传统上这是root用户。以超级用户身份运行的进程具有超级功能 他们不仅可以读取所有文件,还可以以任何可能的方式修改系统。
拥有权利的同时也被赋予了重大的责任。如果以root身份运行的进程出现故障,被利用或仅以错误的方式进行配置,则可能会对系统造成任何可能的损害。这意味着您只需要以完全信任的root身份运行程序。即使您信任某个程序,使用尽可能少的权限运行程序也是很好且常见的做法。

Linux上的功能

幸运的是,Linux具有将root的功能划分为单独的独立功能的功能您可以从以root身份运行的进程中删除这些进行限制。您可以将功能添加到以普通用户身份运行的进程中,这就是我们要做的。

完全备份没有根

为了能够完全备份系统,restic必须读取所有文件。幸运的是,Linux知道这个能力。我们可以将此单一功能分配给restic,然后作为非特权用户运行。
首先我们创建一个新的用户restic,它将创建备份:
root@a3e580b6369d:/# useradd -m restic
然后我们下载并安装restic二进制文件到用户的主目录中。
root@a3e580b6369d:/# mkdir ~restic/bin
root@a3e580b6369d:/# curl -L https://github.com/restic/restic/releases/download/v0.8.0/restic_0.8.0_linux_amd64.bz2 | bunzip2 > ~restic/bin/restic
在为restic二进制指定任何特殊功能之前,我们限制其权限,以便只有root用户和新创建的restic用户才能执行它。否则,另一个 - 可能是不可信的用户可能会滥用特权restic二进制文件来规避文件访问控制。
root@a3e580b6369d:/# chown root:restic ~restic/bin/restic
root@a3e580b6369d:/# chmod 750 ~restic/bin/restic
最后,我们可以使用setcap向restic二进制文件添加扩展属性。在每次执行时,系统都会读取扩展属性,并对其进行解释并分配相应的功能。
root@a3e580b6369d:/# setcap cap_dac_read_search=+ep ~restic/bin/restic
从现在起,用户restic可以运行restic来备份整个系统。
root@a3e580b6369d:/# sudo -u restic /opt/restic/bin/restic --exclude={/dev,/media,/mnt,/proc,/run,/sys,/tmp,/var/tmp} -r /tmp backup /

评论

此博客中的热门博文

Restic --备份

备份 现在我们准备好备份一些数据。 在特定时间点的目录内容在restic中被称为“快照”。 运行以下命令并再次输入上面选择的存储库密码: $ restic -r /srv/restic-repo --verbose backup ~/work open repository enter password for repository: password is correct lock repository load index files start scan start backup scan finished in 1.837s processed 1.720 GiB in 0:12 Files: 5307 new, 0 changed, 0 unmodified Dirs: 1867 new, 0 changed, 0 unmodified Added: 1.700 GiB snapshot 40dc1520 saved 正如你所看到的,restic创建了该目录的备份并且速度非常快! 40dc1520 在这种情况下 ,刚刚创建的特定快照由一系列十六进制字符标识 。 如果你没有通过这个 --verbose 选项,restic将打印更少的数据(但你仍然会得到一个很好的实时状态显示)。 如果再次运行该命令,restic将会创建另一个数据快照,但这次更快。 这是工作中的重复数据删除! $ restic -r /srv/restic-repo backup --verbose ~/work open repository enter password for repository: password is correct lock repository load index files using parent snapshot d875ae93 start scan start backup scan finished in 1.881s processed 1.720 GiB in 0:03 Files: 0 new, 0 changed, 5307 unmodified Dirs

Restic --删除备份快照

删除备份快照 所有的备份空间都是有限的,所以restic可以删除旧的快照。 这可以通过手动(通过指定要删除的快照ID)或者使用描述要忘记哪些快照的策略来完成。 对于所有删除操作,需要依次调用两个命令: forget 删除快照并 prune 实际删除快照从存储库中引用的数据。 这可以通过 forget 命令 --prune 选项 来自动 执行, 如果快照已被删除 ,该 prune 命令 会自动 运行 。 建议 在修剪后 运行 restic   check ,以确保提醒您可能的损坏存储库的内部数据结构。 删除一个快照 该命令 snapshots 可用于列出存储库中的所有快照,如下所示: $ restic -r /srv/restic-repo snapshots enter password for repository: ID Date Host Tags Directory ---------------------------------------------------------------------- 40dc1520 2015-05-08 21:38:30 kasimir /home/user/work 79766175 2015-05-08 21:40:19 kasimir /home/user/work bdbd3439 2015-05-08 21:45:17 luigi /home/art 590c8fc8 2015-05-08 21:47:38 kazik /srv 9f0bc19e 2015-05-08 21:46:11 luigi /srv 要删除快照 /home/art ,请使用该 forget  命令并在命令行上指定快照ID: $ restic -r /srv/restic-repo forget bdbd3439 enter password for repository: removed snapshot d3f01f63 之后,此快照被删除: $ restic -r /srv/res