No se puede hacer que rsync funcione en modo daemon-over-ssh

11

Estoy tratando de configurar rsync para copiar los datos de un servidor todos los días. Para que el sistema sea lo más restringido posible, estoy tratando de usar el modo descrito en la página del manual como: "UTILIZAR LAS FUNCIONES DE RSYNC-DAEMON A TRAVÉS DE UNA CONEXIÓN DE CONCHA A DISTANCIA"

Así que puse un archivo llamado rsyncd.conf en la carpeta de inicio de root:

[root]
path = /
read only = true

e intenté copiar / etc / passwd como prueba:

rsync -vv -e ssh myserver::root/etc/passwd .

Pero me sale lo siguiente:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

La razón por la que estoy haciendo todo esto es porque una vez que lo hago funcionar, planeo restringir el acceso especificando el comando

rsync --server --daemon .

en ~ / .ssh / optional_keys

rjmunro
fuente
¿Qué se registra en / var / log / secure o / var / log / messages en el servidor receptor?
Dave Cheney
Fue: rsync: no se puede abrir el archivo de configuración "/etc/rsyncd.conf": No existe tal archivo o directorio (2) Gracias, eso condujo a una solución, que publicaré como respuesta.
rjmunro

Respuestas:

11

Parece que hay un error en la documentación o la implementación de rsync. man rsync dice:

Rsync admite la conexión a un host mediante un shell remoto y luego genera un servidor "daemon" de un solo uso que espera leer su archivo de configuración en el directorio de inicio del usuario remoto.

pero cuando se conectaba a la raíz, de acuerdo con / var / log / messages, buscaba en /etc/rsyncd.conf el archivo de configuración (la ubicación estándar para un archivo rsyncd.conf cuando no se usaba sobre SSH).

Tuve que forzar al servidor ssh a usar el archivo de configuración correcto agregando

command="rsync --config=/root/rsyncd.conf --server --daemon ."

a /root/.ssh/authorized_keys.

La razón por la que no solo puse la configuración en la ubicación predeterminada es que no quería que alguien iniciara accidentalmente un demonio rsync normal, solo quiero que un demonio tenga tanto acceso cuando tenga la clave ssh correcta.

rjmunro
fuente
5

rsync en modo demonio no es lo que sugeriría si quieres bloquearlo lo más posible. Desea restringir el comando que una clave SSH puede ejecutar e invocar el comando de copia usando esa tecla.

Para averiguar a qué comando restringir la clave, ejecute la línea de comando rsync adecuada con una ligera modificación en el comando ssh:

rsync -avz -e 'ssh -v' stuff somewhere:/place

Verá una línea en la salida de depuración como:

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

Ese comando exacto es el que desea restringir para que la clave pueda ejecutarse en .ssh / optional_keys:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
MikeyB
fuente
3
Quiero poder hacer diferentes copias de seguridad de solo lectura de partes del sistema, por ejemplo, copias de seguridad de correo electrónico y bases de datos SQL todos los días, pero otras cosas una vez por semana. Necesitaría un comando específico y una clave específica para cada posible copia de seguridad, y no podría hacer copias de seguridad adicionales ad-hoc con la misma infraestructura.
rjmunro
2
Bastante justo: tomo "Para que el sistema sea lo más restringido posible" literalmente :)
MikeyB
1
Puede poner varios comandos en un script y pasar el script a los parámetros como entrada de primera línea.
alecco
1
¿Hay alguna manera de generar el comando serial sin tener que pasar por la información de depuración? '-vlogDtprze.iLs'
qodeninja