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
rsync -avz /home/ rsync://meuservidor/homes
- -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á.
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
[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
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
Ú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/