Duplicity – Crie backups incrementais criptografados no Linux

A experiência mostra que nunca se pode ser excessivamente paranóico com 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 VPSs a um custo relativamente baixo, você fará bem em criar sua própria estratégia de backup usando suas próprias ferramentas para economizar algum dinheiro e talvez usá-lo para comprar armazenamento extra ou obter uma VPS maior.

Parece interessante? Neste artigo, mostraremos como usar uma ferramenta chamada Duplicity para fazer backup e criptografar arquivos e diretórios. Além disso, usar backups incrementais para esta 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.

Depois que a instalação for concluída, 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 em Servidor Remoto

Vamos começar criando as chaves SSH em nosso servidor 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 pressupõe 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]  

Em seguida, certifique-se de 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 via outra janela de terminal e realizar algumas tarefas ou executar alguns comandos para gerar entropia (caso contrário, você terá que esperar muito tempo para essa parte do processo ser concluída).

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

gpg --list-keys
List GPG Keys

O texto destacado acima é conhecido como ID de chave pública e é um argumento solicitado para criptografar seus arquivos.

Criando um Backup no Linux com o Duplicity

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

Como este é nosso primeiro backup, será um backup completo. As execuções subsequentes criarão backups incrementais (a menos que adicionemos a opção full sem traços imediatamente ao lado de duplicity 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, onde os arquivos de backup serão armazenados.

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

A saída deve ser semelhante à seguinte imagem:

Create a Backup using Duplicity

A imagem acima indica que um total de 86,3 MB foi copiado para 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 no 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 (duplicity não sobrescreverá um arquivo ou diretório existente). Para esclarecer, vamos excluir o log cron na máquina 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 copiado
  • /onde/restaurar é o diretório no sistema local onde queremos restaurar o arquivo.

No nosso caso, para restaurar o registro 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 registro 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 com mais de 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:

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 de 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, uma utilidade de backup que oferece criptografia para arquivos e diretórios pronto para usar. Eu recomendo fortemente que você dê uma olhada no site do projeto Duplicity para mais documentação e exemplos.

Disponibilizamos uma página de manual do Duplicity em formato PDF para sua conveniência de leitura, sendo 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/