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

11

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 do manual como: "USANDO OS RECURSOS DO RSYNC-DAEMON ATRAVÉS DE UMA CONEXÃO COM SHELL REMOTO"

Então eu coloquei um arquivo chamado rsyncd.conf na pasta raiz:

[root]
path = /
read only = true

e tentou copiar o / 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]

A razão pela qual estou fazendo tudo isso é que, uma vez que funcione, pretendo restringir o acesso especificando o comando

rsync --server --daemon .

em ~ / .ssh / allowed_keys

rjmunro
fonte
O que está conectado / var / log / secure ou / var / log / messages no servidor de recebimento?
9339 Dave Cheney
Foi: rsync: não foi possível abrir o arquivo de configuração "/etc/rsyncd.conf": Esse arquivo ou diretório não existe (2) Obrigado, isso levou a uma solução, a qual postarei como resposta.
Rjmunro 12/05/09

Respostas:

11

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

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

mas ao conectar-se ao root, de acordo com / var / log / messages, ele procurava no arquivo /etc/rsyncd.conf (o local padrão para um arquivo rsyncd.conf quando não usado no SSH.

Eu 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.

A razão pela 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.

rjmunro
fonte
5

O rsync no modo daemon não é o que eu sugeriria se você quiser travá-lo o mais apertado possível. Você deseja restringir o comando que uma chave SSH tem permissão para executar e chamar o comando copy 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 executar .ssh / allowed_keys:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
MikeyB
fonte
3
Quero poder fazer backups diferentes somente de leitura de partes do sistema - por exemplo, backup de bancos de dados e bancos de dados SQL todos os dias, mas outras coisas uma vez por semana. Eu precisaria de um comando específico e de uma chave específica para cada backup possível e não seria capaz de fazer backups ad-hoc extras com a mesma infraestrutura.
Rjmunro 12/05/09
2
Suficiente Fair - Eu tomo "A fim de tornar o sistema tão restrito quanto possível" literalmente :)
MikeyB
1
Você pode colocar vários comandos em um script e passar ao script os parâmetros como entrada de primeira linha.
Alecco
1
existe uma maneira de gerar o comando serial sem ter que passar pelas informações de depuração? '-vlogDtprze.iLs'
qodeninja