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 me@myserver.com:/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?


¿puede mostrarnos algo como ssh me@myserver.com "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 me@myserver.com "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 root@myserver.comdirectamente. (

  • ... 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 me@myserver.com 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 website-backup@myserver.com:/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 mountainx@example.com
    

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

    ssh me@myserver.com "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
    

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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.