Otorgue permisos de usuario a todos los archivos y carpetas

9

Quiero tener un usuario que tenga acceso a todos los archivos y carpetas del sistema. Esto es con el propósito de usar RSYNC en una máquina local para hacer una copia de seguridad de una máquina remota.

En este momento estamos usando al usuario backupsy aunque hemos agregado este usuario a los grupos sudoy adminrsync aún devuelve mensajes como:

rsync: opendir "/ location / to / folder" falló: Permiso denegado (13)

rsync: send_files no pudo abrir "/ location / to / file": Permiso denegado (13)

Alguna idea de cómo le damos backupspermiso al usuario para acceder a todo (salvo agregar al usuario a todos los grupos), el servidor remoto que estamos tratando de respaldar es un servidor de alojamiento dedicado donde cada cuenta tiene su propio usuario en el sistema).

Gracias por cualquier ayuda.

Thomas Clayson
fuente
1
¿Puedes dar ejemplos de caminos? Si son unos /proc, /devetc. , entonces se esperan errores.
Phil
añadir un usuario backupsa sudoy adminno cambiar nada.
favadi
@ Phil Estoy intentando hacer una copia de seguridad de todo el directorio / home. Los archivos / directorios que están fallando son aquellos /home/a/c/account/users/mail:usernameque tienen permisos drwx------y son propiedad de ellos mail:4096. ¿Supongo que porque el usuario backupsestá en el grupo sudoo adminno tiene acceso porque no hay permisos de acceso para los grupos? No sé, pero es un error en carpetas / archivos como ese.
Thomas Clayson
@favadi Ya lo hice ... todavía no funciona.
Thomas Clayson
Tendrás que ejecutar el rsynccomando con sudo.
Phil

Respuestas:

6

El simple hecho de agregar al usuario backupsal grupo de usuarios sudono otorga automáticamente a la cuenta acceso a todos los archivos del sistema. Le da al usuario el permiso para ejecutar el sudocomando.

Como está utilizando la autenticación de clave pública (presumiblemente sin una frase de contraseña), abordaría esto con la seguridad y la facilidad de implementación en mente. El uso le sshpermite restringir al usuario para que ejecute solo comandos muy específicos. En este caso, puede permitir que el usuario backupsejecute rsynccon permisos de superusuario.

Ya ha realizado el intercambio de claves y la autenticación verificada es exitosa. En el authorized_keysarchivo en el host remoto desde el que está respaldando el /homedirectorio, puede agregar una command=directiva a la clave que utiliza el usuario backups. Esta directiva solo permitirá que ese comando se ejecute cuando esa clave se use para la autenticación. Entonces, el primer campo de la clave sería similar a esto:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

Puede ir aún más lejos y agregar más opciones a la clave, como from=myhost,no-pty,no-X11-forwarding.

Esto debería brindarle una seguridad decente y no requerir que modifique los permisos subyacentes del sistema de archivos. Probablemente necesitarás jugar con el comando que colocas en el authorized_keysarchivo hasta que funcione como esperas; puede tomar un poco para envolver su cerebro a su alrededor. El comando especificado en el authorized_keysbásicamente anulará las rsyncopciones que pasará desde el host de conexión.

Mucha buena información en man sshd. Desea leer específicamente la sección FORMATO AUTHORIZED_KEYS.

George M
fuente
Ok, estoy siguiendo, creo. Agregar esa directiva al archivo autorizado_claves le permitirá ejecutar un comando remoto con permisos de superusuario, ¿verdad? ¿Cómo cambiaría el comando rsync -e ssh -az [email protected]:/home /location/of/local/folderpara indicarle que se ejecute como superusuario en la máquina remota? ¿O lo hará automáticamente? Gracias por tu tiempo y ayuda. :)
Thomas Clayson
1
La directiva no le permite ejecutar automáticamente el comando como superusuario. Cuando esa clave específica se utiliza para la autenticación, restringe al usuario SOLAMENTE al comando especificado. Los permisos de superusuario provienen de "sudo". Técnicamente, puede poner todo su comando "rsync" en el archivo autorizado_keys e iniciar la conexión ssh desde el host de respaldo. Todo el proceso comenzaría automáticamente después de que se complete la autenticación. Comenzaría la conexión con algo como "ssh backups @ remotehost sudo rsync"
George M
Tarda un poco en comprender tu cerebro, pero es genial cuando finalmente hace clic y te das cuenta de lo que puedes hacer.
George M
2

Una opción es ejecutar un servidor rsync en el sistema remoto.

Básicamente, cree un rsync.confcon uid=rootluego use rsync -az rsync://domain.com.

Consulte http://pastebin.com/5hQx1mRV para ver un ejemplo que alguien más escribió y Configuración del daemon rsync para conocer algunos conceptos básicos sobre cómo habilitar un servidor en Ubuntu.

Tenga en cuenta que debe tener en cuenta la seguridad de esto. Probablemente, un mejor enfoque es hacer que el sistema remoto empuje a su sistema local.

Mikel
fuente
Eso se ve muy bien, gracias. ¿Entonces rsync todo desde la /backup/lccarpeta en el servidor remoto? ¿Cambio el pathbit para /homeque eso funcione?
Thomas Clayson
Gracias por la edición amigo. El único problema con eso es que no podemos garantizar una dirección IP estática donde estamos, y queremos hacerlo a través de cron para que ocurra todo el tiempo. Si "presionamos", podría dejar de funcionar si nuestra dirección IP cambia. : /
Thomas Clayson
@ThomasClayson: Para eso es DNS dinámico. :)
Warren Young
1

Tal vez podría usar ACL si el sistema de archivos subyacente lo admite.

Debe agregar la copia de seguridad de grupo en la ACL de cada archivo y directorio. Pero para agregarse automáticamente para el archivo y el directorio recién creados, primero debe establecer la ACL predeterminada en todos los directorios existentes. Entonces en el servidor remoto:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

Entonces debe tener permiso de rx para todos los directorios existentes y leer para archivos. Puede hacer esto con 2 comandos (sin el -d esta vez)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

Esto le dará un permiso adicional para leer los archivos en la copia de seguridad del grupo sin cambiar el usuario y el grupo existentes que poseen cada archivo.

Nota: para acelerar el hallazgo | comando xargs puede agregar la siguiente opción al comando xargs: -P ncon n el número de procesos paralelos. Puede configurarlo en la cantidad de CPU que tiene en su máquina + 1.

Huygens
fuente
Los xargs paralelos no acelerarán las cosas en este caso, porque el cuello de botella es E / S, no CPU.
Mikel
Linux usa cachés en la memoria antes de confirmar los cambios en el disco, por lo que se siente más rápido desde el punto de vista del usuario. E incluso un pequeño disco duro portátil podría manejar la carga de configurar múltiples ACL en paralelo. No es tanto E / S. Pruébelo :)
Huygens
Acabo de leer aquí superuser.com/a/422954/53206 que simplemente podrías usar: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) ¡mucho más simple!
Huygens