Consenti lo script rsync (rrsync) con restrizioni per le directory arbitrarie con authorized_keys


10

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

E la domanda è? command=L'opzione in authorized_keysaccetta solo un comando che viene eseguito. Questo è tutto.
Jakuje,

Ho cercato di chiarire la domanda
Stefan,

Risposte:


6

Una possibilità sarebbe quella di creare una vista di sola lettura delle directory di cui si desidera che l'utente dedicato sia in grado di eseguire il backup, con bindfs . Non usare affatto sudo; eseguire rrsyncil solo comando consentito a questo utente. Installazione unica:

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

Installazione dopo ogni avvio:

bindfs -o perms=a+r-w /actual/dir1 /somewhere/backup-views/dir1
bindfs -o perms=a+r-w /actual/dir2 /somewhere/backup-views/dir2

O righe corrispondenti in /etc/fstab:

/actual/dir1 /somewhere/backup-views/dir1 bindfs perms=a+r-w
/actual/dir2 /somewhere/backup-views/dir2 bindfs perms=a+r-w

Quindi impostare l'utente di backup per l'esecuzione rsyncsu /somewhere/backup-views.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.