Permiso rsync denegado al hacer una copia de seguridad de un directorio remoto en mi máquina local

11

Recibo el error mencionado en el título.

Encontré esta pregunta similar: Ejecute rsync con permiso de root en la máquina remota . Eso no responde mi pregunta.

Soy el administrador del servidor remoto y quiero usar rsyncpara hacer una copia de seguridad de los archivos en mi casilla local. Aquí está mi comando rsync:

$ rsync -avz [email protected]:/var/www/ /backups/Sites/MySite/

Funciona principalmente. El inicio de sesión es a través de un par de llaves. No y no puedo usar una contraseña (EDITAR: para iniciar sesión a través de SSH). Solo unos pocos archivos no se transferirán debido a los permisos. No quiero cambiar esos permisos.

Aquí está el error:

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

Yo no quiero cambiar los permisos en ese archivo. Esto (y otros similares) no debe ser legible (excepto por la raíz).

Esto tiene que ejecutarse en un trabajo cron y prefiero una solución simple de una línea usando solo el comando rsync. La siguiente opción sería un script de shell al que pueda llamar desde el trabajo cron. En ningún caso puedo iniciar sesión manualmente en la máquina remota y convertirme en root (porque estaré dormido cuando se ejecute)

¿Cómo puedo usar rsync para hacer una copia de seguridad en mi casilla local?

MountainX
fuente
¿puede mostrarnos algo como ssh [email protected] "cat /var/www/webapp/securestuff/install.php"> localfile?
Florenz Kley
@Florenz Kley: No entiendo tu comentario
MountainX
muéstrame que puedes leer el archivo y te muestro un comando rsync que funciona :-). La opción # 2 de Grawity es probablemente su mejor apuesta.
Florenz Kley
@Florenz Kley: ssh [email protected] "echo mypassword | sudo -S cat /var/www/webapp/securestuff/install.php"> localfile
MountainX
Llegué rsync: send_files failed to open "/cygdrive/...": Permission denied (13). Entonces mi computadora fuente era Windows Cygwin. Situación ligeramente diferente, pero para la posteridad, mi solución fue hacer clic derecho en cmd.exe y Ejecutar como administrador .
Bob Stein

Respuestas:

8

No puede hacer una copia de seguridad de un archivo que no puede leer de otra manera, por lo que los permisos deberán ser modificados o anulados por la raíz .

Sus opciones con más detalle:

  • Anule los permisos rsync'ing como [email protected]directamente. (

  • ... o configurando sudo en el servidor para permitir la ejecución sin contraseña del rsynccomponente del lado del servidor.

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    y

    rsync --rsh="ssh [email protected] sudo" -avz /var/www/ /backups/...
    
  • Cree una cuenta dedicada de "copia de seguridad del sitio web" en el servidor. Cambie los permisos de los archivos para que puedan leerse en la cuenta de "copia de seguridad del sitio web"; puede usar ACL y setfaclpara eso. No use esta cuenta para nada más.

    rsync -avz [email protected]:/var/www/ /backups/sites/mysite/
    
  • Escriba un script en el servidor que volcaría / var / www / en un tarball cifrado. Nuevamente, esto se puede hacer como root (a través de crontab) o configurando sudo para que no requiera una contraseña para ese script. Por ejemplo:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r [email protected]
    

    La copia de seguridad se realizaría tirando todo el tarball cada vez, lo que podría ser ineficiente con sitios grandes:

    ssh [email protected] "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    El requisito de contraseña se eliminaría editando sudoers :

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    
usuario1686
fuente
Gracias. Buenas sugerencias Cualquiera de los dos probablemente funcionará para mí. También estoy considerando usar la solución en superuser.com/questions/270911/… si puedo descubrir sus posibles efectos secundarios.
MountainX
Por cierto, me refería a cualquiera de las últimas 2 opciones. No se permite iniciar sesión como root a través de SSH en el servidor.
MountainX
@MountainX: separé "rsync via sudo" como una opción separada. Podría funcionar también.
usuario1686
¡Gracias! "rsync via sudo" sería mi opción preferida. Intentaré tu sugerencia. Parece que necesito implementar esto usando visudo en Ubuntu en el servidor. No me he metido mucho con el visudo, pero me has dado lo suficiente para comenzar. Gracias de nuevo.
MountainX
5

En el host remoto, puede ejecutar rsync daemon con

uid root

en el /etc/rsyncd.confarchivo

Esto permitirá que el demonio use la CAP_DAC_OVERRIDEcapacidad y lea el sistema de archivos local sin cambiar los permisos / propiedad.

Si solo necesita hacer una copia de seguridad, es una buena práctica configurar rsync en modo de solo lectura:

solo lectura = verdadero

altmas5
fuente
0

Si solo puede leer los archivos root, debe tener rootacceso para hacer una copia de seguridad del archivo leyéndolo desde el sistema de archivos. rsyncestá leyendo los archivos del sistema de archivos, no del dispositivo sin formato.

Con la excepción de dump, ddy las copias de seguridad similares que copian la partición en lugar de los archivos, los programas de copias de seguridad leen los archivos del sistema de archivos. Las utilidades de respaldo no podrán leer y los archivos de respaldo para los cuales los permisos del ID de usuario utilizado para ejecutarlos impiden el acceso. Este es el caso con el que te encuentras.

En la mayoría de los casos, debe confiar en su software de respaldo lo suficiente como para permitirle leer todos sus datos. Esto también significa que debe confiar en su medio de respaldo con todos sus datos. En algunos casos, es posible que desee excluir algunos archivos de la copia de seguridad y utilizar un método alternativo para hacer una copia de seguridad de su contenido.

EDITAR: a medida que esté archivando los datos (copiando todos los permisos), necesitará acceso raíz en ambos servidores. Si está haciendo esto como una copia de seguridad, es posible que desee buscar una solución como BackupPC que usa rsync para leer los archivos, pero almacena los archivos en su propio árbol de directorios.

BillThor
fuente
Hay formas de dar acceso a rsync root. Simplemente no los conozco. Lo que pregunto es cómo dar acceso a rsync root para hacer una copia de seguridad de estos archivos. Tal vez necesito revisar la respuesta a "Ejecutar rsync con permiso de root en una máquina remota" y ver si puedo resolverlo ...
MountainX