Automatizzare i backup
Vorrei implementare una soluzione di backup con copia dei dati da varie directory da un server Web (WebServer) a un server di backup locale (BackupServer). Il backup dovrebbe essere eseguito incustodito e pertanto vorrei utilizzare un'autenticazione basata su chiave con una chiave privata senza password.
Privilegio Rsync
Le directory di cui voglio eseguire il backup sono leggibili solo da un utente privilegiato. Vorrei usare rsync per copiare i file. Ho creato un utente di backup dedicato e consento all'utente di eseguire rsync con sudo senza che venga richiesta una password con la regola visudo:
backup-user ALL = NOPASSWD: /usr/bin/rsync
Considerazioni sulla sicurezza
Vorrei migliorare la sicurezza limitando i comandi che l'utente di backup può eseguire aggiungendo un elenco di comandi al file authorized_keys del WebServer. Ho installato rrsync come indicato in questo post .
command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...
Rrsync prevede una sottodirectory
Contrariamente al normale rsync, rrsync prevede che venga fornita una sottodirectory nel file chiave autorizzato, come descritto in questo post del blog
command="/usr/share/rsync/rrsync /var/backup/client1/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa
Questa restrizione funziona ma mi consente di eseguire il backup solo di una directory specifica, vale a dire / var / backup / client1 /
Vorrei fornire le directory di cui voglio eseguire il backup dal BackupServer nel comando rsync. Esiste la possibilità di utilizzare rrsync esattamente come rsync, ad esempio:
rsync -avze ssh --rsync-path='sudo rrsync' backupuser@111.222.33.44:/media/data /backups/Server/
Chiarimento aggiuntivo
Sono consapevole che la parte command = "..." in authorized_hosts limita i comandi eseguibili per questo utente esattamente a quelli forniti, ma con il normale rsync, posso fare qualcosa del genere per fornire il percorso che voglio fare il backup come un parametro:
command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"
Questo non funziona con rrsync.
Soluzione accettata
Sebbene tecnicamente non sia la risposta definitiva alla domanda, penso che la soluzione pubblicata da Gilles sia un approccio molto carino. Ho creato una cartella principale per tutte le visualizzazioni della directory effettiva di cui voglio eseguire il backup. Per questo motivo, posso tranquillamente limitare l'autenticazione a 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
Crea visualizzazioni (dopo il riavvio)
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
Versione 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=
L'opzione inauthorized_keys
accetta solo un comando che viene eseguito. Questo è tutto.