小编Ste*_*fan的帖子

允许对具有authorized_keys 的任意目录的受限rsync (rrsync) 脚本

自动备份

我想实现一个备份解决方案,将数据从 Web 服务器 (WebServer) 的各种目录复制到本地备份服务器 (BackupServer)。备份应该在无人值守的情况下运行,因此我想使用基于密钥的身份验证和无密码私钥。

特权同步

我要备份的目录只能由特权用户读取。我想使用 rsync 来复制文件。我创建了一个专用的备份用户,并允许用户使用 sudo 执行 rsync,而无需使用 visudo 规则提示输入密码:

backup-user ALL = NOPASSWD: /usr/bin/rsync
Run Code Online (Sandbox Code Playgroud)

安全注意事项

我想通过将命令列表添加到 WebServer 的 authorized_keys 文件来限制备份用户可以执行的命令来提高安全性。我安装了这篇文章中提到的 rrsync 。

command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...
Run Code Online (Sandbox Code Playgroud)

Rrsync 需要一个子目录

与普通的 rsync 相比,rrsync 期望在授权密钥文件中提供一个子目录,如本博文所述

command="/usr/share/rsync/rrsync  /var/backup/client1/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa 
Run Code Online (Sandbox Code Playgroud)

此限制有效,但它只允许我备份一个特定目录,即 /var/backup/client1/

我想在 rsync 命令中提供我想要从 BackupServer 备份的目录。是否有可能像 rsync 一样使用 rrsync,例如:

rsync -avze ssh --rsync-path='sudo rrsync' backupuser@111.222.33.44:/media/data  /backups/Server/
Run Code Online (Sandbox Code Playgroud)

额外说明

我知道authorized_hosts 中的command="..." 部分确实将此用户的可执行命令限制为完全提供的命令,但是使用正常的rsync,我可以执行类似的操作来提供我想要备份的路径一个参数:

command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"
Run Code Online (Sandbox Code Playgroud)

这不适用于 rrsync。

接受的解决方案

尽管从技术上讲不是问题的明确答案,但我认为 Gilles 发布的解决方案是一种非常好的方法。我为要备份的实际目录的所有视图创建了一个根文件夹。出于这个原因,我可以安全地将身份验证限制为仅 rrsync。 …

ssh backup rsync

14
推荐指数
1
解决办法
9590
查看次数

标签 统计

backup ×1

rsync ×1

ssh ×1