自动备份
我想实现一个备份解决方案,将数据从Web服务器(WebServer)的各种目录复制到本地备份服务器(BackupServer)。备份应该在无人值守的情况下运行,因此我想使用基于密钥的身份验证和无密码私钥。
特权Rsync
我要备份的目录只有特权用户才能读取。我想使用rsync复制文件。我创建了一个专用的备份用户,并允许该用户使用sudo执行rsync,而无需使用visudo规则提示输入密码:
backup-user ALL = NOPASSWD: /usr/bin/rsync
安全注意事项
我想通过限制备份用户可以执行的命令来提高安全性,方法是将命令列表添加到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...
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
此限制有效,但仅允许我备份一个特定的目录,即/ var / backup / client1 /
我想在rsync命令中提供要从BackupServer备份的目录。是否有可能像rsync一样使用rrsync,例如:
rsync -avze ssh --rsync-path='sudo rrsync' backupuser@111.222.33.44:/media/data /backups/Server/
附加说明
我知道,authorized_hosts中的command =“ ...”部分确实将此用户的可执行命令限制为所提供的命令,但是对于普通的rsync,我可以执行以下操作以提供要备份的路径:参数:
command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"
这不适用于rrsync。
接受的解决方案
尽管从技术上说,这并不是该问题的明确答案,但我认为Gilles发布的解决方案是一种非常好的方法。我为要备份的实际目录的所有视图创建了一个根文件夹。因此,我可以安全地将身份验证限制为rrsync。
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
创建视图(重启后消失)
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版本
/home/stefan/Scans /mnt/Backups-Rsync-Readonly/VAR-WWW fuse.bindfs perms=0000:u=rD,force-user=rsync-backup 0 0
Authorized_keys
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
command=
中的选项authorized_keys
仅接受一个运行的命令。这就对了。