允許使用 authorized_keys 對任意目錄進行受限 rsync (rrsync) 腳本
自動備份
我想實現一個備份解決方案,將數據從 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
授權密鑰
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
一種可能性是使用bindfs創建您希望專用使用者能夠備份的目錄的只讀視圖。根本不要使用 sudo;發出
rrsync
唯一允許該使用者使用的命令。一次性設置: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
每次啟動後設置:
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
:/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
。