it-swarm-pt.tech

Não é possível fazer o rsync funcionar no modo daemon-over-ssh

Estou tentando configurar o rsync para copiar os dados de um servidor todos os dias. Para tornar o sistema o mais restrito possível, estou tentando usar o modo descrito na página de manual como: "USANDO OS RECURSOS DO RSYNC-DAEMON VIA A REMOTE-Shell CONNECTION"

Então, coloquei um arquivo chamado rsyncd.conf na pasta de início de raízes:

[root]
path = /
read only = true

e tentei copiar/etc/passwd como um teste:

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

Mas eu recebo o seguinte:

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]

Estou fazendo tudo isso porque, assim que começar a trabalhar, pretendo restringir o acesso especificando o comando

rsync --server --daemon .

em ~/.ssh/authorized_keys

11
rjmunro

Parece haver um bug na documentação ou na implementação do rsync. man rsync diz:

O Rsync suporta a conexão a um Host usando um Shell remoto e, em seguida, gerando um servidor “daemon” de uso único que espera ler seu arquivo de configuração no diretório home do usuário remoto.

mas ao se conectar ao root, de acordo com/var/log/messages, ele estava procurando em /etc/rsyncd.conf pelo arquivo de configuração (o local padrão para um arquivo rsyncd.conf quando não usado por SSH.

Tive que forçar o servidor ssh a usar o arquivo de configuração correto, adicionando

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

para /root/.ssh/authorized_keys.

O motivo pelo qual não coloquei a configuração no local padrão é que não queria que alguém iniciasse acidentalmente um daemon rsync normal - só quero que um daemon tenha tanto acesso quando tiver a chave ssh correta.

11
rjmunro

o rsync no modo daemon não é o que eu sugeriria se você quiser bloqueá-lo o máximo possível. Você deseja restringir o comando que uma chave SSH tem permissão para executar e invocar o comando de cópia usando essa chave.

Para descobrir a qual comando restringir a chave, execute a linha de comando rsync apropriada com uma pequena modificação no comando ssh:

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

Você verá uma linha na saída de depuração, como:

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

Esse comando exato é o que você deseja restringir a chave para poder ser executado em .ssh/authorized_keys:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
5
MikeyB