Permita el script restringido rsync (rrsync) para directorios arbitrarios con claves_autorizadas

10

Automatización de copias de seguridad

Me gustaría implementar una solución de respaldo con copias de datos de varios directorios desde un servidor web (WebServer) a un servidor de respaldo local (BackupServer). La copia de seguridad debe ejecutarse desatendida y, por lo tanto, me gustaría utilizar una autenticación basada en clave con una clave privada sin contraseña.

Rsync privilegiado

Los directorios que quiero respaldar solo pueden ser leídos por un usuario privilegiado. Me gustaría usar rsync para copiar los archivos. Creé un usuario de respaldo dedicado y permití que el usuario ejecute rsync con sudo sin que se le solicite una contraseña con la regla visudo:

backup-user ALL = NOPASSWD: /usr/bin/rsync

Consideraciones de Seguridad

Me gustaría mejorar la seguridad al restringir los comandos que el usuario de respaldo puede ejecutar agregando una lista de comandos al archivo autorizado_keys del servidor web. Instalé rrsync como se menciona en esta publicación .

command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...

Rrsync espera un subdirectorio

A diferencia de rsync normal, rrsync espera que se proporcione un subdirectorio en el archivo de clave autorizado, como se describe en esta publicación de 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 

Esta restricción funciona pero solo me permite hacer una copia de seguridad de un directorio específico, a saber, / var / backup / client1 /

Me gustaría proporcionar los directorios que quiero respaldar desde BackupServer en el comando rsync. ¿Existe la posibilidad de usar rrsync exactamente como rsync, por ejemplo:

rsync -avze ssh --rsync-path='sudo rrsync' [email protected]:/media/data  /backups/Server/

Aclaracion adicional

Soy consciente de que la parte command = "..." en Authorized_hosts limita los comandos ejecutables para este usuario exactamente a los proporcionados, pero con el rsync normal, puedo hacer algo como esto para proporcionar la ruta que quiero respaldar como un parámetro:

command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"

Esto no funciona con rrsync.

Solución aceptada

Aunque técnicamente no es la respuesta definitiva a la pregunta, creo que la solución publicada por Gilles es un enfoque muy agradable. Creé una carpeta raíz para todas las vistas del directorio real que quiero respaldar. Por esta razón, puedo restringir de forma segura la autenticación solo 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

Crear vistas (desaparecidas después del reinicio)

    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

Versión 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
Stefan
fuente
¿Y la pregunta es? command=La opción en authorized_keysacepta solo un comando que se ejecuta. Eso es.
Jakuje
Traté de aclarar la pregunta
Stefan,

Respuestas:

6

Una posibilidad sería crear una vista de solo lectura de los directorios que desea que ese usuario dedicado pueda realizar copias de seguridad, con bindfs . No uses sudo en absoluto; crea rrsyncel único comando que está permitido para este usuario. Configuración de una sola vez:

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

Configuración después de cada arranque:

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 líneas correspondientes en /etc/fstab:

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

A continuación, configurar el usuario de copia de seguridad para funcionar rsyncen /somewhere/backup-views.

Gilles 'SO- deja de ser malvado'
fuente