Servidor Rsync

Muita gente já conhece a ferramenta Rsync para transferência de arquivos entre máquinas distintas via rede, mas o utiliza apenas em modo básico que se parece com um scp, rcp com protocolo delta. Mas o Rsync funciona em modo daemon o que além de simplificar as coisas é seguro e eficiente o bastante para ser usado até como solução de backup.

Antes de mais nada instale o pacote do rsync em seu servidor. Para os felizes usuários Debian-Like (Debian, Ubuntu, Mint etc) basta um “aptitude install rsync”, os demais devem usar o gerenciador de pacotes adequado da sua distribuição.

Uma vez instalado, o que temos de fazer é criar um arquivo de configuração para o daemon, o arquivo com a senha de conexão e então ativar o serviço.

Criando o arquivo de configuração

o arquivo de configuração do Rsync é o /etc/rsyncd.conf e seu conteúdo é simplesmente uma declaração de “áreas” a serem compartilhadas remotamente por todo mundo e por isso chamadas de “compartilhamento”. Estes compartilhamentos podem ter um conjunto de regras para acesso, filtro, log, autenticação etc o que garantem a segurança dos dados compartilhados.

Um exemplo básico que se pode dar é o que segue abaixo onde eu crio duas “áreas” (compartilhamentos) para acesso remoto e irrestrito:

[documentroot]
path = /var/www
comment = Raiz do servidor Apache

[homes]
path = /home
comment = Pasta home dos usuários do sistema

Se o daemon rsync estiver rodando na máquina com esta configuração o comando abaixo listaria  os compartilhamentos:

rsync rsync://meuservidorrsync

Para ler o conteúdo de um compartilhamento destes bastaria tratá-lo como um diretório:

rsync://meuservidorrsync/documentroot

Mais simples que isso é impossível. Só lembre-se que nós ainda não iniciamos o servidor rsync, portanto estes comandos ainda não funcionam. Veremos a seguir como levantar o serviço Rsync.

Iniciando o servidor Rsync

Por padrão os sistemas Debian-like possuem um arquivo de configuração que impede o início do Rsync em modo daemon, por padrão. Este arquivo é o /etc/default/rsync e basicamente o que devemos fazer é editar (com o seu editor de textos preferido) este arquivo (você deve ter privilégios administrativos) e alterar uma linha dela .

Logo no início do arquivo deve haver uma linha assim:

RSYNC_ENABLE=false

Altere-a para “true” e salve o arquivo, assim:

RSYNC_ENABLE=true

Agora é só iniciar o serviço:

sudo service rsync restart

Agora sim, o daemon está rodando e os comandos que sugeri anteriormente, para listar os compartilhamentos, irão funcionar. Teste-os a vontade.

Usando o seu servidor Rsync

Agora que temos um servidor Rsync básico rodando podemos fazer uns testes de listagem e cópia de arquivos. O Rsync possui inúmeras opções que nos fariam perder muito tempo reescrevendo e lendo sobre o assunto então vou me limitar ao básico para simplificar a vida de quem está começando. Para o caso de precisar mais detalhes recorra ao manual ou então deixe um comentário no final do texto.

Listando o conteúdo do compartilhamento “homes”

rsync rsync://meuservidor/homes

Fazendo uma cópia do conteúdo de homes localmente

rsync -avz rsync://meuservidor/homes /home
 Fazendo uma cópia da pasta home local para o compartilhamento “homes”
rsync -avz  /home/ rsync://meuservidor/homes
 Ao copiar eu usei os parâmetros -a -v e -z que respecivamente indicam:
  • -a – Equivale aos parâmetros -r -l -p -t -o -g -D (Recursivo, copiar link simbólico, preservar permissões, horário de modificação, dono e grupo, copiar dispositivos e outros arquivos especiais)
  • -v – modo verboso para detalhar o que está sendo feito
  • -z – compacta os dados a serem transferidos reduzindo assim o consumo de banda de rede

Estes parâmetros são os básicos que serão usados quase como uma regra geral mas é claro que existem outros que você deverá conhecer para situações especiais.

Particularmente eu costumo usar os parâmetros: -HAXEvazu, os quais para decorar eu faço um trocadilho com “Rache Vaso”, mas isso é bobagem, leia o manual, verifique os parâmetros necessários a sua necessidade para cada caso e seja feliz.

Autenticando os usuários

A configuração de compartilhamentos da forma como indiquei não é nada segura, visto que qualquer um que souber o endereço do servidor Rsync poderá ler, copiar e até regravar os arquivos de lá. Uma  forma de restringir isso é limitar o acesso aos usuários autenticados.

Para autenticar usuários nós precisamos criar um arquivo /etc/rsyncd.secrets e lá definir a lista de usuários e suas senhas (em texto plano) que poderão acessar o servidor rsync.

Embora as senhas estejam em texto plano, por padrão o rsync só inicia se este arquivo for exclusivamente lido pelo usuário root (comportamento que pode se modificado com o parâmetro strict mode), então você não precisa se preocupar com a segurança dele.

Caso você tente inciar o Rsync em modo daemon sem definir a permissão 600 e a propriedade para o root o servidor não iniciará.

Para os nossos exemplos vamos criar um arquivo /etc/rsyncd.secrets com o conteúdo a seguir:
backup:E4#t&fd
welington:df#@t34HY12

Agora que criamos dois usuários com suas respectivas senhas vamos definir o que cada um deles poderá acessar, modificando a configuração dos compartilhamentos no arquivo /etc/rsync.conf.

[documentroot]
path = /var/www
comment = Raiz do servidor Apache
auth users backup, welington
secrets file = /etc/rsyncd.secrets
[homes]
path = /home
comment = Pasta home dos usuários do sistema
auth users = backup
secrets file = /etc/rsyncd.secrets

Com esta configuração o usuário de backup poderá acessar ambos os compartilhamentos, já o usuário welington só poderá acessar o compartilhamento documentroot.

Esteja consciente que as versões atuais do Rsync ainda usam o fraquíssimo protocolo de autenticação desafio-resposta chaves MD4 de 128bits, já quebrado, então caso precise usá-lo pela Internet eu recomendo que o faça via túnel SSH ou VPN para aumentar a segurança.

Restringindo as estações que acessam o servidor Rsync

Para aumentar ainda mais o nível de segurança você pode usar os parâmetros hosts allow e hosts deny para restringir quais máquinas poderão acessar os compartilhamentos . Como nos exemplos abaixo:
[homes]
path = /home
comment = Pasta home dos usuários do sistema
auth users = backup
secrets file = /etc/rsyncd.secrets
hosts allow = 192.168.5.0/24
hosts deny = 192.168.5.52, 192.168.5.90, 192.168.5.200

Scripts pre-transferência / pós transferência

Imagine que você queira usar o Rsync para fazer o backup de um servidor LAMP. O backup do /var/www (Document root do Apache) é fácil já que são apenas arquivos comuns, mas no caso do MySQL, seja um backup via dump (mysqldump) ou backup quente (copiar as pastas de dados do MySQL), você precisa executar alguns comandos antes de iniciar a transferência e em alguns casos outros comandos ao término. Neste caso então nós podemos fazer uso dos parâmetros pre-xfer e post-xfer como abaixo:

[mysqlbackup]
path = /tmp/mysqldump
comment = Pasta home dos usuários do sistema
pre-xfer = /root/dumpmysql.sh
post-xfer = /root/removedumpmysql.sh
Neste exemplo hipotético eu omiti os parâmetros de autenticação apenas para simplificar mas é claro que você pode e deve colocá-los em uma situação real.

Pré transferência

Todas as vezes que eu iniciar uma transferência de/para este compartilhamento “mysqlbackup” o script definido em “pre-xfer” será executado. Este script poderia executar o mysqldump por exemplo para gerar um dump da base de dados, compactá-lo, criptografar etc e então você poderia fazer a cópia do arquivo.

É importante alertar que caso o seu script retorne um valor diferente de 0 a transferência será abortada. Isso é útil pois caso o serviço do Mysql esteja fora do ar e você não consiga criar um dump, ou o comando tar para compactar o arquivo não esteja disponível, você pode impedir que a transferência de “lixo” seja realizada. Quando criar o seu script então termine-o com “return 0” para sucesso e “return 1”, por exemplo, para ocaso de falhas.

Dentre as informações que o Rsync deixa disponível para o seu script estão o nome do módulo, o caminho real correspondente, o Ip do cliente conectado, login do usuário etc. Consulte o manual do Rsyncd.conf para obter mais informações sobre eles.

Pós transferência

Analogamente ao caso anterior, ao terminar a transferência o script determinado em post-xfer poderia remover os arquivos temporários que foram criados, enviar um e-mail para o administrador etc. Há inúmeras possibilidades de uso deste parâmetro.

Últimas considerações

O Rsync é uma ferramenta poderá para transferência de arquivos. É importante que o sysadmin que se interesse por ela dê uma lida nos manuais para conhecer e entender cada um dos seus parâmetros, o que o poupará de horas de testes.

Caso você deseje usar o Rsync como ferramenta de backup definitivo há um frontend WEB muito bom que eu uso e recomendo chamado BackupPC, que é do mesmo grupo de desenvolvedores do popular sistema Amanda. A partir dele você pode controlar todos os recursos do Rsync e manter seus backups centralizados.

Referências

Rsync. http://rsync.samba.org/
Manual do Rsync – na linha de comandos digite: man rsync
Manual do Rsyncd.conf – na linha de comandos digite: man rsyncd.conf
BackupPC – http://backuppc.sourceforge.net/

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *