Intentando configurar chroot'd rsync

10

Estoy tratando de configurar un servidor de respaldo. Quiero hacer chroot a cada usuario (cliente) en su directorio de inicio, y solo permitirle usar sftp y rsync .

Rápidamente descubrí que no era el único que intentaba hacer algo como esto, y encontré esta guía y la seguí. Así que ahora tengo usuarios chroot'd con sftp solamente.

Luego descubrí que rsync necesita ssh para reproducirse en la otra máquina, y que sftp no es suficiente. Darle a cada usuario un inicio de sesión ssh es algo que quería evitar en primer lugar.

¿Alguien puede pensar en algunas posibles soluciones?

Gracias,

marca

Mark R.
fuente
Eche un vistazo a esta respuesta que escribí en algún momento vaya serverfault.com/questions/255084/…
user9517

Respuestas:

11

Una solución sftp también requeriría un inicio de sesión ssh para todos, por lo que realmente no ha perdido nada aquí. Otorgar acceso ssh no implica necesariamente un acceso completo al shell, por ejemplo, esto muestra cómo usar el authorized_keysarchivo ssh para permitir la copia de seguridad a través de rsync mientras limita los comandos disponibles solo para el receptor rsync.

De hecho, si opta por la autenticación basada en clave, en lugar de la autenticación de contraseña (que debería), podría ejecutar todo bajo una cuenta de usuario en lugar de requerir varias cuentas. Usaría teclas para identificar usuarios remotos y dirigir el receptor rsync a un directorio particular.

Algo como esto, en su authorized_keysarchivo:

command="/usr/bin/rsync --server -a . /tmp/user1" ssh-rsa ... user1
command="/usr/bin/rsync --server -a . /tmp/user2" ssh-rsa ... user2

Alguien que use la user1clave privada hará una copia de seguridad /tmp/user1, y alguien que use la user2clave privada hará una copia de seguridad /tmp/user2. Etcétera...

larsks
fuente
Link se ha ido 404.
luckydonald
He actualizado el enlace.
Larsks
6

Ejecute lo habitual rsyncdesde el cliente al servidor remoto, pero agregue un interruptor detallado adicional: SSH -vy luego grep para Sending command. Verá el comando exacto que el cliente está enviando al servidor remoto:

rsync -avz -e'ssh -v -i /ssh-keys/clientprivate.key' --bwlimit=8000 --delete root@server:/path/ /backup/myserver/ 2>&1 | grep "Sending command"

En mi caso, fue

rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path

Agregue esto command="..."al /home/USER/.ssh/authorized_keysarchivo del servidor remoto como se mencionó en @larsks. Agregue configuraciones de seguridad adicionales, si es necesario:

no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

Todos juntos:

command="rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /backup/path",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

(Tomado de muy buen tutorial http://en.positon.org/post/Rsync-command-restriction-over-SSH )

Arnis Juraga
fuente
Buena primera respuesta.
slm
2

Deberá proporcionar algún tipo de acceso de shell para poder usar rsync a menos que se conecte directamente al servidor rsync; el puerto predeterminado es 873 (TCP).

Desde la página de manual de rysnc :

Hay dos formas diferentes para que rsync contacte a un sistema remoto: usando un programa de shell remoto como el transporte (como ssh o rsh) o contactando a un demonio rsync directamente a través de TCP. El transporte de shell remoto se usa siempre que la ruta de origen o destino contiene un solo separador de dos puntos (:) después de una especificación de host. El contacto con un demonio rsync ocurre directamente cuando la ruta de origen o de destino contiene un separador de dos puntos (: :) después de una especificación de host, O cuando se especifica una URL rsync: // (consulte también las CARACTERÍSTICAS de lqusing RSYNC-DAEMON A TRAVÉS DE UN SHELL REMOTO) CONNECTIONrq para una excepción a esta última regla).

Para proporcionar acceso de shell limitado, considere la siguiente guía . (Nota: el enlace original está muerto) Resumen:

Esta configuración combina las mejores características de rsync, SSH y chroot. Rsync proporciona la flexibilidad y la eficiencia en la transferencia de archivos, SSH protege los datos que se transfieren y chroot protege los datos en el servidor del acceso no autorizado. El dummysh limita el acceso a rsync solamente.

Si bien el servidor rsync implementa chroot, carece de la protección SSH que a menudo se requiere. Además, abrir un puerto de servidor rsync adicional presenta un riesgo de seguridad y, a veces, no es posible ni técnica ni políticamente. Sftp y scp carecen de la flexibilidad y la eficiencia proporcionadas por rsync, especialmente cuando se trata de un árbol de directorios, como un sitio web.

O eche un vistazo al uso de rssh (hay una guía para configurar rssh aquí ):

rssh es un shell restringido para usar con OpenSSH, que solo permite scp y / o sftp. Ahora también incluye soporte para rdist, rsync y cvs. Por ejemplo, si tiene un servidor del que solo desea permitir que los usuarios copien archivos a través de scp, sin proporcionar acceso de shell, puede usar rssh para hacerlo.

runlevelsix
fuente
1
La noticia actual es que rssh no se mantiene y tiene un agujero de seguridad extraño. Vuelva a verificar el estado actual antes de invertir en él.
chutz
2
Puede usar el script perl en rrsynclugar de rssh, incluido en el paquete oficial rsync. Ver derek.simkowiak.net/backing-up-multiple-servers-with-rsnapshot
unhammer
0

puedes escribir un shell que envuelva rsync.

mira la idea general aquí: https://sixohthree.com/1458/locking-down-rsync-using-ssh

en su shell de envoltura puede hacer lo que quiera y quizás desarmar al usuario.

En mi caso, necesitaba activar la cuenta virtual con el mismo usuario * nix. Logré hacerlo usando este tipo de shell más muchas líneas en el archivo autorizado_claves. No he desarmado al usuario, pero he agregado un nivel de carpeta de usuario en el comando del servidor rsync.

mira al usuario del proceso de manera diferente usando la clave ssh

peligroso
fuente
0

SFTP con capacidades Rsync, sin shell

Puede usar LFTP + SFTP en un entorno chroot y lograr los mismos resultados que con rsync, sin proporcionar al usuario un shell o realizar personalizaciones pesadas en ssh con envoltorios.

Esto es más seguro y puede ser sustancialmente más rápido.

Aaron
fuente