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 espao do gmail para backup

Colaborao: Ronaldo Toledo Morais

Data de Publicao: 18 de Dezembro de 2008

Tenho vrios clientes que usam mquinas Linux servindo de firewall, proxies, vpn, etc....

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

Surge a a necessidade de um backup com todas as configuraes que permita ganhar um bom tempo e colocar novamente disponvel os servios interrompidos.

Bem, backups na mesma mquina no so seguros, podem tambm ir para o espao. Backups em outras mquinas da mesma rede tambm correm o risco de ir para o espao 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 necessrio para reconstituir os servios.

O gmail vem mesmo a calhar. Tem espao mais que suficiente para armazenar os backups de vrias instalaes e, at ento, tem se mostrado muito seguro, nunca perdi nada que estivesse ali armazenado.

Como feito o backup?

O cron inicia o servio todos os dias, executa um script em perl que gera um tar.gz do diretrio de backup e o compara com o ltimo, se encontrada alguma diferena o archive ento encriptado e enviado ao gmail. O script de qualquer forma envia uma cpia ao gmail aos sbados.

Observaes:

  • O diretrio de backups(/usr/local/backups) uma pasta onde h apenas links para diretrios e arquivos que devem ser includos no backup.

  • deve conter um arquivo com o nome excludefiles com o conteudo "anterior" que o nome do subdiretrio que conter sempre o ltimo archive criado e que no deve ser considerado na criao do novo archive.

  • Esta pasta /usr/local/backups deve ter permisso (700) de leitura e escrita apenas para o root, uma vez que poder conter informaes sensveis, costumo colocar nela um link para /etc/shadow)

  • o script de backup (/usr/local/bin/backup.pl) deve ter permisso de leitura apenas pelo root pois conter o usurio e senha do account no google e tambm a senha de encriptao.

  • 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 mdulos 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`;
# atenao  opo -h para que os links sejam seguidos ao invs de apenas copiados.

$diffs = "*"; #forcamos este flag para  nao ficarmos sem backup (caso no 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-encriptao `;

`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 relao completa dos artigos desta coluna