首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >允许具有authorized_keys的任意目录的受限rsync (rrsync)脚本

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

Unix & Linux用户
提问于 2016-04-13 14:25:42
回答 1查看 11.1K关注 0票数 17

自动备份

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

特权Rsync

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

代码语言:javascript
运行
复制
backup-user ALL = NOPASSWD: /usr/bin/rsync

安全考虑事项

我希望通过将命令列表添加到authorized_keys文件中来限制备份用户可以执行的命令,从而提高安全性。正如在这个职位中提到的,我安装了rrsync。

代码语言:javascript
运行
复制
command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...

Rrsync需要一个子目录

与正常的rsync不同,rrsync期望在授权的密钥文件中提供一个子目录,如本博客帖子所述。

代码语言:javascript
运行
复制
command="/usr/share/rsync/rrsync  /var/backup/client1/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa 

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

我想在rsync命令中提供要从BackupServer备份的目录。是否有可能使用rrsync与rsync完全相同,例如:

代码语言:javascript
运行
复制
rsync -avze ssh --rsync-path='sudo rrsync' backupuser@111.222.33.44:/media/data  /backups/Server/

附加澄清

我知道command=“.”authorized_hosts中的部分确实将该用户的可执行命令限制在提供的可执行命令上,但是对于正常的rsync,我可以这样做来提供我想要作为参数备份的路径:

代码语言:javascript
运行
复制
command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"

这不适用于rrsync。

接受解决方案

虽然技术上不是这个问题的明确答案,但我认为吉利斯的解决方案是一个非常好的方法。我为要备份的实际目录的所有视图创建了一个根文件夹。因此,我可以安全地将身份验证限制为rrsync。

代码语言:javascript
运行
复制
One time todo

    sudo mkdir /mnt/Backups-Rsync-Readonly
    sudo chown -R rsync-backup /mnt/Backups-Rsync-Readonly
    sudo mkdir /mnt/Backups-Rsync-Readonly/VAR-WWW
    sudo mkdir /mnt/Backups-Rsync-Readonly/MySQL-Backups
    sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/
    sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/MySQL-Backups
    sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/VAR-WWW

创建视图(重新启动后消失)

代码语言:javascript
运行
复制
    sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /var/www /mnt/Backups-Rsync-Readonly/VAR-WWW
    sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /MySQL-Dumps /mnt/Backups-Rsync-Readonly/MySQL-Backups

Fstab版本

代码语言:javascript
运行
复制
    /home/stefan/Scans    /mnt/Backups-Rsync-Readonly/VAR-WWW fuse.bindfs perms=0000:u=rD,force-user=rsync-backup 0   0

Authorized_keys

代码语言:javascript
运行
复制
command="/usr/bin/rrsync -ro /mnt/Backups-Rsync-Readonly",from="192.168.0.10",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-04-13 23:02:18

一种可能的方法是创建一个目录的只读视图,您希望该专用用户能够使用绑定飞秒进行备份。根本不要使用sudo;使rrsync成为该用户唯一允许的命令。一次性设置:

代码语言:javascript
运行
复制
mkdir /somewhere/backup-views /somewhere/backup-views/dir1 /somewhere/backup-views/dir2
chmod 700 /somewhere/backup-views
setfacl -m u:rx:backup-user /somewhere/backup-views

每次启动后安装:

代码语言:javascript
运行
复制
bindfs -o perms=a+r-w /actual/dir1 /somewhere/backup-views/dir1
bindfs -o perms=a+r-w /actual/dir2 /somewhere/backup-views/dir2

/etc/fstab中的相应行:

代码语言:javascript
运行
复制
/actual/dir1 /somewhere/backup-views/dir1 bindfs perms=a+r-w
/actual/dir2 /somewhere/backup-views/dir2 bindfs perms=a+r-w

然后将备份用户设置为在rsync上运行/somewhere/backup-views

票数 10
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/276198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档