Ir diretamente para o conteúdo

Definições de cookies

Escolha que tipos de cookies permite. Pode alterar a sua escolha a qualquer momento em Definições de cookies, no fundo de cada página. Política de privacidade

Necessários

Sempre ativos

Necessários para iniciar sessão, manter o seu carrinho e memorizar as suas escolhas. Estão sempre ativos.

Que cookies?
  • weboke_sessie, weboke_klant, weboke_remember: a sua sessão e manter a sessão iniciada
  • weboke_basket: o seu carrinho
  • wkBtwIncl: mostrar preços com ou sem IVA
  • wok_cookies: a sua escolha de cookies, 12 meses

Mede que anúncio leva a uma visita ou encomenda, para não pagarmos por anúncios que não dão resultado.

Que cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), até 90 dias
  • OpenAI Ads, anúncios no ChatGPT
  • wok_aff: através de que parceiro chegou até nós (programa de afiliados), 60 dias

4,6

País e idioma

Cada país tem o seu próprio site, com os preços e o IVA desse país.

Ver

Cópias de segurança com restic

Módulo 8: Cópias de segurança e monitorização · Tempo de leitura: 12 minutos

Objetivo de aprendizagem: No final desta lição, será capaz de criar com o restic cópias de segurança cifradas para um armazenamento fora do seu servidor, limpar versões antigas segundo um esquema de retenção, verificar a cópia de segurança e repor ficheiros, e pôr tudo isto a funcionar automaticamente.

Conceitos-chave: restic, repositório, init, palavra-passe (ficheiro), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, desduplicação, append-only, temporizador systemd

Porquê o restic?

Existem muitos programas de cópias de segurança. O restic é uma boa escolha para um servidor próprio, porque:

  • cifra tudo antes de sair do servidor; o armazenamento só vê blocos ilegíveis;
  • desduplica: um ficheiro que não foi alterado não é guardado novamente, pelo que as cópias de segurança diárias ocupam pouco espaço;
  • suporta muitos tipos de armazenamento: uma pasta, outro servidor via SFTP, armazenamento compatível com S3, um rest-server próprio;
  • é um único programa, disponível nos repositórios de pacotes do Debian e do Ubuntu (apt install restic).

Uma alternativa com características semelhantes é o BorgBackup. Os princípios desta lição aplicam-se também a ele.

Os conceitos

  • Repositório: o local onde o restic guarda as cópias de segurança. Fica sempre fora do servidor de que está a fazer a cópia de segurança.
  • Snapshot: uma cópia de segurança num determinado momento. (Atenção: não é o mesmo que o snapshot do seu fornecedor referido na lição 8.1.)
  • Palavra-passe: cada repositório tem uma palavra-passe com a qual tudo é cifrado. A documentação do restic é clara sobre isto: quem perder a palavra-passe perde os dados de forma irrecuperável.

Criar um repositório

Suponha que tem um servidor de armazenamento backup.example.net ao qual acede via SFTP com uma chave, como utilizador web1. Crie primeiro um ficheiro de palavra-passe no servidor (e guarde a mesma palavra-passe no seu gestor de palavras-passe, lição 8.1):

root@web1:~# install -m 600 /dev/null /root/.restic-wachtwoord
root@web1:~# openssl rand -base64 32 > /root/.restic-wachtwoord
root@web1:~# export RESTIC_REPOSITORY=sftp:web1@backup.example.net:/srv/restic/web1
root@web1:~# export RESTIC_PASSWORD_FILE=/root/.restic-wachtwoord
root@web1:~# restic init
created restic repository 5f1a9c2e3b at sftp:web1@backup.example.net:/srv/restic/web1

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Com as variáveis de ambiente RESTIC_REPOSITORY e RESTIC_PASSWORD_FILE, não precisa de escrever as opções -r e --password-file de cada vez.

Criar uma cópia de segurança

Primeiro o dump da base de dados (lição 8.1), depois a cópia de segurança:

root@web1:~# restic backup /etc /var/www /opt /var/backups/db \
    --exclude /var/www/*/cache --tag dagelijks
repository 5f1a9c2e opened (version 2, compression level auto)
...
Files:        8421 new,     0 changed,     0 unmodified
Dirs:         1203 new,     0 changed,     0 unmodified
Added to the repository: 612.338 MiB (402.117 MiB stored)

processed 8421 files, 1.204 GiB in 0:41
snapshot 3c7e91d4 saved

No dia seguinte é muito mais rápido: só é incluído o que mudou.

root@web1:~# restic snapshots
ID        Time                 Host  Tags       Paths
-----------------------------------------------------------------------
3c7e91d4  2026-11-08 03:10:02  web1  dagelijks  /etc /opt /var/backups/db /var/www
a18f0b77  2026-11-09 03:10:05  web1  dagelijks  /etc /opt /var/backups/db /var/www
-----------------------------------------------------------------------
2 snapshots

Limpar: forget e prune

Um snapshot novo por dia significa 365 snapshots ao fim de um ano. Com forget define quais guarda, através de um esquema de retenção:

root@web1:~# restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

O esquema funciona assim:

  • --keep-daily 7: considera os últimos sete dias em que existe um snapshot e mantém, por dia, o mais recente;
  • --keep-weekly 4: o mesmo para as últimas quatro semanas (de segunda-feira a domingo);
  • --keep-monthly 6: o mesmo para os últimos seis meses.

Um snapshot é mantido se cumprir pelo menos uma das regras. Tudo o que não cumpre nenhuma regra é esquecido. Experimente um esquema novo primeiro com --dry-run: assim vê o que seria removido sem que nada seja alterado.

Diferença importante: o forget remove apenas a referência a um snapshot. Os dados permanecem no repositório até que o prune limpe os blocos que já não são usados por nenhum snapshot. A opção --prune no forget faz isso de uma só vez. O prune demora e bloqueia o repositório; por isso, não o agende ao mesmo tempo que a sua cópia de segurança.

Verificar: check

Uma cópia de segurança que se danifica silenciosamente só é detetada no momento da reposição. Peça ao restic que verifique o repositório regularmente:

root@web1:~# restic check
...
no errors were found
root@web1:~# restic check --read-data-subset=5%

O check simples verifica a estrutura. Com --read-data-subset, lê efetivamente uma parte dos dados e verifica o conteúdo. Faça isto, por exemplo, semanalmente com uma pequena percentagem; assim, ao fim de algum tempo, tudo terá sido lido pelo menos uma vez.

Repor: restore e mount

Reponha sempre para uma pasta separada, nunca diretamente por cima do original:

root@web1:~# restic restore latest --target /tmp/terug --include /etc/nginx
restoring snapshot a18f0b77 of [/etc /opt /var/backups/db /var/www] at 2026-11-09 03:10:05 ...
Summary: Restored 41 files/dirs (88.104 KiB) in 0:00
root@web1:~# diff -r /tmp/terug/etc/nginx /etc/nginx && echo gelijk
gelijk

latest é o snapshot mais recente; também pode usar um ID (restic restore 3c7e91d4 ...). Com restic mount /mnt/restic (requer FUSE), vê todos os snapshots como pastas e pode explorá-los e copiar ficheiros individuais. Para parar, prima Ctrl+C.

Uma base de dados repõe-se recuperando o dump e importando-o, por exemplo gunzip < alles.sql.gz | mariadb.

Automaticamente, todas as noites

Crie um script e um temporizador systemd (lição 6.3). O script:

#!/bin/sh
# /usr/local/sbin/backup.sh
set -eu
export RESTIC_REPOSITORY=sftp:web1@backup.example.net:/srv/restic/web1
export RESTIC_PASSWORD_FILE=/root/.restic-wachtwoord
mariadb-dump --single-transaction --all-databases | gzip > /var/backups/db/alles.sql.gz
restic backup /etc /var/www /opt /var/backups/db --tag dagelijks
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Um .service com Type=oneshot e ExecStart=/usr/local/sbin/backup.sh, e um .timer com OnCalendar=*-*-* 03:10:00 e Persistent=true. set -eu faz com que o script pare no primeiro erro, para que o systemd considere a execução como falhada. Associe-lhe uma notificação (lição 8.3); caso contrário, não dará por uma cópia de segurança falhada.

Contra ransomware: append-only

No script acima, o próprio servidor também pode apagar a cópia de segurança (forget e prune). Se um atacante tomar conta do servidor, também o pode fazer. Há duas formas de o evitar:

  • rest-server em modo append-only: no servidor de armazenamento, executa o rest-server do próprio restic com a opção --append-only. O servidor web pode então acrescentar cópias de segurança, mas não pode apagar nada. A limpeza (forget --prune) é feita a partir de outra máquina, bem protegida e com permissões completas.
  • Armazenamento com controlo de versões ou bloqueio de objetos num fornecedor S3, para que os objetos eliminados ainda possam ser recuperados durante algum tempo.

Atenção a uma armadilha subtil que a própria documentação do restic menciona: um atacante que acrescente snapshots falsos pode levar um esquema como --keep-weekly a esquecer snapshots verdadeiros. Com --keep-within (por exemplo --keep-within 30d), tudo o que pertence a esse período é mantido, falso ou verdadeiro.

Resumo

  • O restic cifra, desduplica e consegue guardar em muitos tipos de armazenamento fora do seu servidor; perder a palavra-passe é perder tudo.
  • init cria o repositório, backup cria um snapshot, snapshots mostra-os.
  • forget com --keep-* define o que guarda; só prune (ou --prune) limpa realmente os dados. Experimente com --dry-run.
  • check (com --read-data-subset) verifica, restore --target repõe para uma pasta separada, mount permite explorar.
  • Automatize com um temporizador e uma notificação, e mantenha pelo menos um repositório fora do alcance do servidor (append-only).

Questionário

1. O que acontece se executar restic forget --keep-daily 7 sem --prune?



2. Tem a palavra-passe do seu repositório restic apenas em /root/.restic-wachtwoord no servidor. O servidor perdeu-se. E agora?



3. Porque é que repõe uma cópia de segurança para /tmp/terug e não diretamente para o local original?



4. O que acrescenta restic check --read-data-subset=5% a um restic check simples?



5. Um atacante que tome conta do seu servidor web pode, através do script de cópias de segurança, executar também restic forget --prune. O que protege contra isso?



Exercício

Exercício Z8.2: O que resta depois do forget? No ficheiro de exemplo restic-snapshots.txt encontra uma lista de snapshots e um esquema de retenção. Determine que snapshots restam depois de restic forget com esse esquema. O programa compara com a chave fixa.

Exercício Z8.2: O que resta depois do forget?

Ficheiro deste exercício: restic-snapshots.txt





O que preenche e o que encontramos não ficam guardados. O seu navegador memoriza as suas respostas e se concluiu o exercício com sucesso. Se tiver sessão iniciada, guardamos apenas que concluiu o exercício (quase) com sucesso em Os meus cursos; aí também o pode eliminar.

Exercício O8.2: Um teste de reposição. No seu próprio servidor, crie um repositório restic fora do servidor, faça uma cópia de segurança de /etc e dos seus dados, e reponha uma pasta para /tmp/terug. Compare com diff, anote quanto tempo demorou e indique onde estão guardados, fora do servidor, a sua palavra-passe e os dados de acesso ao armazenamento.

Exercício O8.2: Um teste de reposição

Este exercício faz você mesmo; ninguém o verifica. Assinale o que já fez e marque o exercício como concluído.




As suas marcações e notas ficam apenas neste navegador; não as enviamos para lado nenhum. Se tiver sessão iniciada, guardamos em Os meus cursos apenas que concluiu o exercício.

Para saber mais

Um momento…

Configurar os seus domínios

Para cada domínio, defina os servidores de nomes, a ligação ao seu alojamento e quem fica como titular.

A carregar os seus domínios…