você está aqui: Home  → Colunistas  →  Segredos do Google


De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Usando o espaço do gmail para backup

Colaboração: Ronaldo Toledo Morais

Data de Publicação: 18 de Dezembro de 2008

Tenho vários clientes que usam máquinas Linux servindo de firewall, proxies, vpn, etc....

Alguma vezes acontece alguma falha devido a problemas de energia elétrica, sobrecargas, etc, e aparece a necessidade de reinstalar e reconfigurar o sistema.

Surge aí a necessidade de um backup com todas as configurações que permita ganhar um bom tempo e colocar novamente disponível os serviços interrompidos.

Bem, backups na mesma máquina não são seguros, podem também ir para o espaço. Backups em outras máquinas da mesma rede também correm o risco de ir para o espaço caso uma sobrecarga corra pelo cabo de rede.

O ideal mesmo é um backup que fique armazenado fora do local fisico da empresa e que garantidamente contenha sempre tudo o que for necessário para reconstituir os serviços.

O gmail vem mesmo a calhar. Tem espaço mais que suficiente para armazenar os backups de várias instalações e, até então, tem se mostrado muito seguro, nunca perdi nada que estivesse ali armazenado.

Como é feito o backup?

O cron inicia o serviço todos os dias, executa um script em perl que gera um tar.gz do diretório de backup e o compara com o último, se encontrada alguma diferença o archive é então encriptado e enviado ao gmail. O script de qualquer forma envia uma cópia ao gmail aos sábados.

Observações:

  • O diretório de backups(/usr/local/backups) é uma pasta onde há apenas links para diretórios e arquivos que devem ser incluídos no backup.

  • deve conter um arquivo com o nome excludefiles com o conteudo "anterior" que é o nome do subdiretório que conterá sempre o último archive criado e que não deve ser considerado na criação do novo archive.

  • Esta pasta /usr/local/backups deve ter permissão (700) de leitura e escrita apenas para o root, uma vez que poderá conter informações sensíveis, costumo colocar nela um link para /etc/shadow)

  • o script de backup (/usr/local/bin/backup.pl) deve ter permissão de leitura apenas pelo root pois conterá o usuário e senha do account no google e também a senha de encriptação.

  • o script faz uso do pacote sendEmail e http://linux.softpedia.com/get/Communications/Email/SendEmail-12990.shtml e openssl

  • o pacote sendemail faz uso dos módulos perl Net-SSLeay e IO-Socket-SSL que podem ser baixados de www.cpan.org

Abaixo vai uma amostra do que coloco na pasta /usr/local/backups

drwxr-xr-x  2 root root   4096 2008-11-25 03:38 anterior
lrwxrwxrwx  1 root root     14 2008-11-25 03:31 binlocal -> /usr/local/bin
drwxr-xr-x  3 root root   4096 2007-05-09 14:23 certificados
lrwxrwxrwx  1 root root     29 2008-11-25 03:35 crontab -> /var/spool/cron/crontabs/root
lrwxrwxrwx  1 root root     27 2008-11-25 03:30 ddclient.conf -> /etc/ddclient/ddclient.conf
lrwxrwxrwx  1 root root     14 2008-11-25 03:32 etclocal -> /usr/local/etc
-rw-r--r--  1 root root      9 2008-11-25 03:37 excludefiles
lrwxrwxrwx  1 root root     11 2008-12-06 03:12 passwd -> /etc/passwd
lrwxrwxrwx  1 root root     21 2008-11-25 03:33 rc.firewall -> /etc/rc.d/rc.firewall
lrwxrwxrwx  1 root root     18 2008-11-25 03:33 rc.local -> /etc/rc.d/rc.local
lrwxrwxrwx  1 root root     11 2008-12-06 03:12 shadow -> /etc/shadow
lrwxrwxrwx  1 root root     31 2008-11-25 03:35 squid.conf -> /usr/local/squid/etc/squid.conf

Abaixo vai o script devidamente comentado.

#!/usr/bin/perl
chdir "/usr/local/backup";
`mkdir anterior` if not -d "anterior";
`touch excludefiles` if not -e "excludefiles";

$cliente = $ARGV[0]; # parametro passado ao script(identifica o backup)

`rm anterior/*`;
chomp($ultimo = `ls -1 *.bz2`);
`mv $cliente*.bz2 anterior/`;

chomp($timestamp = `date +"%Y%m%d-%H%M"`);
chomp($today = `date +"%a"`);
`tar --exclude-from excludefiles -chPvjf  $cliente-backup-$timestamp.tar.bz2 * > listbackup-$cliente-$timestamp`;
# atençao à opção -h para que os links sejam seguidos ao invés de apenas copiados.

$diffs = "*"; #forcamos este flag para  nao ficarmos sem backup (caso não exista nada em anterior)

chomp($diffs = `diff $cliente-backup-$timestamp.tar.bz2 anterior/$ultimo`) if $ultimo ne "";

`openssl enc -e -a -salt -bf -in $cliente-backup-$timestamp.tar.bz2 -out $cliente-backup-$timestamp.tar.bz2.cript -k senha-de-encriptação `;

`echo "************************************" >> listbackup-$cliente-$timestamp`;
`echo "para descriptografar este tarfile use o comando" >> listbackup-$cliente-$timestamp`;
`echo "openssl enc -d -a -salt -bf -in nomearqcripto -out arqdecripto" >> listbackup-$cliente-$timestamp`;
`echo "************************************" >> listbackup-$cliente-$timestamp`;

do {
  system("echo backup iniciado as $timestamp nao enviado ao gmail, sem modificacoes >> /var/log/log.backup") ;
  `rm anterior/*`; # e limpamos a pasta de backups anteriores,pode haver lixo acumulado la
  `rm listbackup*`;
  `rm *backup*cript`;
 exit;
 } if $diffs eq "" and ($today ne "Sat" and $today ne "Sab");

system("echo backup iniciado as $timestamp | /usr/local/bin/sendEmail -u Backup $cliente $timestamp -xu conta-no-gmail -xp senha-no-gmail -o tls=auto -s smtp.gmail.com:587  -t conta-no-gmail -a listbackup-$cliente-$timestamp $cliente-backup-$timestamp.tar.bz2.cript -f conta-no-gmail");

system("echo erro ao enviar backup iniciado as $timestamp >> /var/log/log.backup") if $?;
system("echo backup enviado ok ao gmail as $timestamp >> /var/log/log.backup") if not $?;
`rm listbackup*`;
`rm *backup*cript`;

Este script foi evoluindo de acordo com as necessidades e, claro, pode ser melhorado tremendamente.

Recomende este artigo nas redes sociais

 

 

Veja a relação completa dos artigos desta coluna