você está aqui: Home  → Arquivo de Mensagens

Sistema simples de Backup via Scp(secure copy)

Colaboração: Aldemari Borges

Data de Publicação: 02 de Julho de 2009

Esta proposta visa criar um sistema de backup baseado em Shell Script, além dos comandos nativos do Linux.

Objetivos desta solução

  • ser simples de configurar
  • utilizar o protocolo scp(cópia remota criptografada)
  • utilizar o empacotador TAR e o compressor GZIP
  • haver mascaramento da data e hora que o backup foi gerado no arquivo gerado(.tar.gz)
  • Os Backups serão gerados em disco rígido inicialmente, mas podem ser gravados em outra mídia

Objetivos futuros(help)

  • enviar relatório de erros e acertos de backup's via email
  • haver alguma interface web(php, python, ruby ou perl) que faça a interação de definições das variáveis
  • Haver interface web(php, python, ruby ou perl) que gere relatórios dos arquivos gerados de acertos e erros
  • Haver algum recurso de reconhecimento de não crescimento de tamanho de determinado arquivo de backup
  • Enviar email quando o servidor de backup atingir 90% de utilização de seu espaço em disco
  • Haver possibilidade de gravação em Fitas DAT

ARQUITETURA

  • Cada cliente deverá possuir o shell script que deverá rodar agendado via cron
  • Cada cliente será encarregado de enviar o arquivo 'backupeado' para o serividor principal(repositório)
  • O servidor deverá adicionar em sua lista de autorização de chaves públicas, cada servidor cliente

Vamos ao passos:

1. Criação do usuário que fará a tarefa dos backups:

No servidor cliente(aquele que enviará seu próprio backup para o repositório remoto):

  root@clienthost:~# adduser backscp

Obs: Colocar senha bastante difícil, já que este usuário existirá em todas as máquinas.

Obs: Há a possibilidade de restringir o acesso via ssh por hosts e users(ver manual do openssh server)

2. Criação das chaves assimétricas:

Afim de criarmos uma solução independente das chaves do host criadas em /etc/ssh, iremos criar uma chave específica para o usuário em questão.

Estas chaves se localizarão no ~.ssh (diretório local do usuário backscp, na pasta oculta .ssh).

Digite o comando abaixo:

  backscp@clienthost:~$ ssh-keygen

Tecle 'Enter' até a finalização do processo de criação como abaixo:

  Generating public/private rsa key pair.
  Enter file in which to save the key (/home/backscp/.ssh/id_rsa):
  Created directory '/home/backscp/.ssh'.
  Enter passphrase (empty for no passphrase):
  Enter same passphrase again:
  Your identification has been saved in /home/backscp/.ssh/id_rsa.
  Your public key has been saved in /home/backscp/.ssh/id_rsa.pub.
  The key fingerprint is:
  fc:d5:81:59:96:cb:a7:e7:81:19:93:39:30:41:01:b3 backscp@borges
  The key's randomart image is:
  +--[ RSA 2048]----+
  |         oo+o o. |
  |          oo =.  |
  |         E  =.+. |
  |       .     Bo..|
  |        S   . Bo |
  |         . . o...|
  |          .    o.|
  |                .|
  |                 |
  +-----------------+

O comando acima gerou uma chave criptográfica de 2048 bits, utilizando o algoritmo RSA.

Temos então:

  • Chave privada(nesta não se mexe): ~.ssh/id_rsa
  • Chave pública: ~.ssh/id_rsa.pub

3. Enviar a chave pública para o servidor que será o repositório

  backscp@clienthost:~$ scp  .ssh/id_rsa.pub backscp@repositoriohost:~

No servidor remoto(REPOSITÓRIO):

com o usuário backscp (como sugestão apenas):

  backscp@repositoriohost:~$ mkdir ~.ssh
  backscp@repositoriohost:~$ cat id_rsa.pub »» .ssh/authorized_keys

PRONTO!!! Estabelecemos a relação de confiança entre as máquinas via ssh

Para testar:

No servidor remoto(repositoriohost) apague o ~/id_rsa.pub

No servidor cliente(clienthost) re-envie o arquivo do id_rsa.pub:

  scp .ssh/id_rsa.pub backscp@repositoriohost:~

Não deverá ser solicitada a senha, o arquivo deverá ser copiado de forma transparente.

OBSERVAÇÃO

Para cada clienthost (máquina que pretende-se backapear), deverá ser adicionado ao arquivo autorized_keys do servidor repositório (cat id_rsa.pub >> .ssh/authorized_keys)

Vantagens até o momento:

Poderíamos fazer mapeamentos NFS ou CIFS, no entanto, haveria sempre sessões abertas no cliente/servidor. O que de certa forma, para redes maiores, poderá afetar em alguns milisegundos. Com a solução de envio via scp (secure copy), apenas será aberta a sessão durante a sua real utilização.

Há a outra vantagem em relação a segurança, pois os dados trafegam criptografados.

Continuando.....

Criemos estes diretórios conforme abaixo em todas as máquinas clientes:

  root@clienthost:~# mkdir -p /backup/log
  root@clienthost:~# chown -R backscp /backup

Abaixo o shell script sugerido para fazer as cópias de segurança nos servidores clientes:

  #!/bin/sh
  # Script para realização de backup's completos
  # Por Aldemari Borges(aldemari@gmail.com»
  
  export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
  
  # Definicao de data e horario
  DATA=`date +%a%d%m%y`
  HORA=`date +%Hh%Mm%Ss`
  
  # Máscara para o arquivo a ser gerado
  NOMESERVIDOR=portal
  
  # Diretório ou arquivo para ser 'backapeado'
  BACKORIGEM=/home/backscp/examples.desktop
  
  # Local remoto aonde os arquivos serão enviados(Lembre-se de criar o diretório de destino)
  BACKDESTINO=/home/backscp/$NOMESERVIDOR
  
  # Criação do pacote
  tar -zcf $NOMESERVIDOR.tar.gz $BACKORIGEM
  date » /home/backscp/log/$NOMESERVIDOR\-$DATA\-$HORA.log
  
  # Esta linha abaixo evita erros de manipulacao de horario no momento do backup
  mv $NOMESERVIDOR.tar.gz $NOMESERVIDOR\-$DATA\-$HORA.tar.gz
  
  # Copiando para o repositorio remoto
  scp $NOMESERVIDOR\-$DATA\-$HORA.tar.gz backscp@10.90.1.33:$BACKDESTINO
  
  # Remover arquivo local
  rm $NOMESERVIDOR\-$DATA\-$HORA.tar.gz

4. Visualizando os arquivos pela WEB

Para tanto, sugerimos a utilização do QuiXplorer:

4.1. Procedimentos:

  backscp@repositoriohost:~# apt-get install apache2-php5
  backscp@repositoriohost:~# cd /var/www
  
  backscp@repositoriohost:~# wget http://ufpr.dl.sourceforge.net/sourceforge/quixplorer/quixplorer_2_3_1.tar.bz2
  backscp@repositoriohost:~# tar -zxvf  tar -jxvf quixplorer_2_3_1.tar.bz2
  backscp@repositoriohost:~# mv quixplorer_2_3_1 phpexplorer

4.2. Configuração do quiXplorer

Vamos criar um virtual host no apache para facilitar sua visualização:

  backscp@repositoriohost:~# cd /etc/apache2/sites-available

Edite um arquivo e salve com o nome de phpexplorer, com o conteúdo abaixo(e suas respectivas alterações):

  <VirtualHost *:80>
      ServerAdmin sysadm@seudomain.com.br
      DocumentRoot /var/www/phpexplorer
      ServerName phpexplorer.seudomain.com.br
      ServerAlias phpexplorer.seudomain.com.br
      ErrorLog /var/log/apache2/phpexplorer-error_log
      CustomLog /var/log/apache2/phpexplorer-access_log combined
  </VirtualHost>

Após isto, vamos inserir o novo subdomínio em nosso sistema, como abaixo:

  backscp@repositoriohost:~# a2ensite phpexplorer
  backscp@repositoriohost:~# /etc/init.d/apache2 reload

OBS: Não equecer de fazer as modificações necessárias no servidor dns interno da sua rede.



 

 

Veja a relação completa dos artigos de Aldemari Borges

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script