Duplicity – Criando Backups Incrementais Criptografados no Linux

A experiência mostra que você nunca pode ser muito paranoico sobre backups do sistema. Quando se trata de proteger e preservar dados preciosos, é melhor ir além e garantir que você possa depender de seus backups se a necessidade surgir.

Mesmo hoje, quando alguns provedores de nuvem e hospedagem oferecem backups automatizados para VPS a um custo relativamente baixo, é bom criar sua própria estratégia de backup usando suas próprias ferramentas para economizar dinheiro e talvez usá-lo para comprar armazenamento extra ou obter um VPS maior.

Parece interessante? Neste artigo, vamos mostrar como usar uma ferramenta chamada Duplicity para fazer backup e criptografar arquivos e diretórios. Além disso, o uso de backups incrementais para essa tarefa nos ajudará a economizar espaço.

Dito isso, vamos começar.

Instalando a Ferramenta de Backup Duplicity no Linux

Para instalar o duplicity em distribuições baseadas em RHEL, você terá que habilitar o repositório EPEL primeiro (você pode omitir esta etapa se estiver usando o Fedora em si).No RHEL 9:

No RHEL 9:

subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

No CentOS 9, AlmaLinux 9, Rocky Linux 9:

dnf config-manager --set-enabled crb
dnf install epel-release

No RHEL 8:

subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

No CentOS 9, AlmaLinux 9, Rocky Linux 9:

dnf config-manager --set-enabled powertools
dnf install epel-release

Então execute,

dnf install duplicity

Para distribuições baseadas em Debian como Ubuntu e Linux Mint.

sudo apt update 
sudo apt install duplicity

Em teoria, muitos métodos para se conectar a um servidor de arquivos são suportados, embora apenas ssh/scp/sftp, acesso a arquivos locais, rsync, ftp, HSI, WebDAV e Amazon S3 tenham sido testados na prática até agora.

Uma vez concluída a instalação, usaremos exclusivamente sftp em vários cenários, tanto para fazer backup quanto para restaurar os dados.

Nosso ambiente de teste consiste em uma caixa RHEL 8 (a ser feito backup) e uma máquina Debian 11 (servidor de backup).

Criando Chaves SSH para Login Sem Senha no Servidor Remoto

Vamos começar criando as chaves SSH em nosso RHEL e transferindo-as para o servidor de backup Debian.

Se você estiver executando o SSH em uma porta diferente, então o comando abaixo assume que o daemon sshd está ouvindo na porta XXXXX no servidor Debian. Substitua AAA.BBB.CCC.DDD pelo IP real do servidor remoto.

ssh-keygen -t rsa
ssh-copy-id [email protected]
ssh-copy-id -p XXXXX [email protected]  

Então, você deve garantir que pode se conectar ao servidor de backup sem usar uma senha:

ssh [email protected]
SSH Passwordless Remote Login

Agora precisamos criar as chaves GPG que serão usadas para a criptografia e descriptografia de nossos dados:

gpg2 --full-gen-key

Você será solicitado a inserir:

  • Tipo de chave
  • Tamanho da chave
  • Por quanto tempo a chave deve ser válida
  • A passphrase
Create GPG RSA Key in Linux

Para criar a entropia necessária para a criação das chaves, você pode fazer login no servidor através de outra janela de terminal e executar algumas tarefas ou executar alguns comandos para gerar entropia (caso contrário, você terá que esperar muito tempo para esta parte do processo terminar).

Depois que as chaves forem geradas, você pode listá-las da seguinte forma:

gpg --list-keys
List GPG Keys

A string destacada em amarelo acima é conhecida como ID de chave pública e é um argumento solicitado para criptografar seus arquivos.

Criando um Backup do Linux com Duplicity

Para começar de forma simples, vamos fazer o backup apenas do diretório /var/log, com exceção de /var/log/anaconda e /var/log/sa.

Como este é o nosso primeiro backup, será um backup completo. Execuções subsequentes criarão backups incrementais (a menos que adicionemos a opção completa sem traços imediatamente ao lado de duplicidade no comando abaixo):

PASSPHRASE="tecmint" duplicity --encrypt-key 115B4BB13BC768B8B2704E5663C429C3DB8BAD3B --exclude /var/log/anaconda --exclude /var/log/sa /var/log scp://[email protected]//backups/rhel8
OR
PASSPHRASE="YourPassphraseHere" duplicity --encrypt-key YourPublicKeyIdHere --exclude /var/log/anaconda --exclude /var/log/sa /var/log scp://root@RemoteServer:XXXXX//backups/rhel8

Certifique-se de não perder as duas barras no comando acima! Elas são usadas para indicar um caminho absoluto para um diretório chamado /backups/rhel8 no servidor de backup, que é onde os arquivos de backup serão armazenados.

Substitua SuaFraseDeSenhaAqui, SeuIdDeChavePúblicaAqui e ServidorRemoto pela frase de senha que você digitou anteriormente, pelo ID de chave pública GPG e pelo IP ou nome do host do servidor de backup, respectivamente.

Seu resultado deve ser semelhante à imagem a seguir:

Create a Backup using Duplicity

A imagem acima indica que um total de 86,3 MB foi armazenado em um 3,22 MB no destino. Vamos mudar para o servidor de backup para verificar nosso backup recém-criado:

Confirm Linux Backup Files

A second run of the same command yields a much smaller backup size and time:

Compress Backup

Restaurando Backups do Linux usando Duplicity

Para restaurar com sucesso um arquivo, um diretório com seus conteúdos ou todo o backup, o destino não deve existir (a duplicidade não sobrescreverá um arquivo ou diretório existente). Para esclarecer, vamos excluir o log cron na caixa CentOS:

rm -f /var/log/cron

A sintaxe para restaurar um único arquivo do servidor remoto é:

PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore filename sftp://root@RemoteHost//backups/rhel8 /where/to/restore/filename

onde,

  • nome_do_arquivo é o arquivo a ser extraído, com um caminho relativo ao diretório que foi feito backup
  • /onde/restaurar é o diretório no sistema local onde queremos restaurar o arquivo.

No nosso caso, para restaurar o log principal do cron do backup remoto, precisamos executar:

PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore cron sftp://[email protected]:XXXXX//backups/rhel8 /var/log/cron

O log do cron deve ser restaurado para o destino desejado.

Da mesma forma, sinta-se à vontade para excluir um diretório de /var/log e restaurá-lo usando o backup:

rm -rf /var/log/mail
PASSPHRASE="YourPassphraseHere" duplicity --file-to-restore mail sftp://[email protected]:XXXXX//backups/rhel8 /var/log/mail

Neste exemplo, o diretório mail deve ser restaurado para sua localização original com todo o seu conteúdo.

Uso do Comando Duplicity

A qualquer momento, você pode exibir a lista de arquivos arquivados com o seguinte comando:

duplicity list-current-files sftp://[email protected]:XXXXX//backups/rhel8

Excluir backups mais antigos que 6 meses:

duplicity remove-older-than 6M sftp://[email protected]:XXXXX//backups/rhel8

Restaurar meuarquivo dentro do diretório gacanepa como estava há 2 dias e 12 horas atrás:

duplicity -t 2D12h --file-to-restore gacanepa/myfile sftp://[email protected]:XXXXX//remotedir/backups /home/gacanepa/myfile

No último comando, podemos ver um exemplo do uso do intervalo de tempo (conforme especificado por -t): uma série de pares onde cada um consiste em um número seguido por um dos caracteres s, m, h, D, W, M, ou A (indicando segundos, minutos, horas, dias, semanas, meses ou anos, respectivamente).

Resumo

Neste artigo, explicamos como usar o Duplicity, um utilitário de backup que oferece criptografia para arquivos e diretórios prontamente. Eu altamente recomendo que você dê uma olhada no site do projeto Duplicity para mais documentação e exemplos.

Nós fornecemos uma página de manual do Duplicity em formato PDF para sua conveniência de leitura, também é um guia de referência completo.

Sinta-se à vontade para nos informar se tiver alguma dúvida ou comentário.

Source:
https://www.tecmint.com/duplicity-create-encrypted-incremental-linux-backup/