例子
用Amazon S3设置restic
前言
本教程将向您展示如何在AWS S3中使用restic。它将向您展示如何浏览AWS Web界面,创建S3存储桶,创建只能访问此存储桶的用户以及如何将restic连接到此存储桶。
登录到AWS
通过使用左上角的“服务”按钮,可打开AWS提供的所有服务菜单:
对于本教程,简单存储服务(S3)以及身份和访问管理(IAM)是相关的。
创建桶
首先,必须创建用于存储备份的存储桶。使用“服务”菜单,导航到S3。如果您已经有一些S3存储桶,您会在这里看到它们的列表:
点击“创建存储桶”按钮,然后为新存储桶选择一个名称和区域。为了本教程的目的,该存储桶将被命名
restic-demo
并驻留在法兰克福。由于存储桶名称空间在所有AWS用户之间共享,因此名称restic-demo
可能无法提供给您。要有创意并选择一个独特的存储桶名称。
没有必要配置存储桶的任何特殊属性或权限。因此,只需完成向导而不做任何进一步的更改:
新创建的
restic-demo
存储桶现在将显示在S3存储桶的列表中:创建一个用户
使用AWS Web界面的“服务”菜单导航到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 /
评论
发表评论