Modul 8 · 8.2
Sigurnosne kopije s alatom restic
Modul 8: Sigurnosne kopije i nadzor · Vrijeme čitanja: 12 minuta
Cilj učenja: Nakon ove lekcije moći ćete s alatom restic izrađivati šifrirane sigurnosne kopije na pohranu izvan Vašeg poslužitelja, čistiti stare verzije prema rasporedu čuvanja, provjeravati sigurnosnu kopiju i vraćati datoteke te sve to pokretati automatski.
Ključni pojmovi: restic, repozitorij, init, lozinka (datoteka s lozinkom), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplikacija, append-only, systemd timer
Zašto restic?
Postoji mnogo programa za sigurnosno kopiranje. restic je dobar izbor za vlastiti poslužitelj jer:
- sve šifrira prije nego što podaci napuste poslužitelj; pohrana vidi samo nečitljive blokove;
- deduplicira: datoteka koja se nije promijenila ne sprema se ponovno, pa dnevne sigurnosne kopije zauzimaju malo prostora;
- podržava mnoge vrste pohrane: mapu, drugi poslužitelj putem SFTP-a, pohranu kompatibilnu sa S3, vlastiti rest-server;
- je jedan program koji se nalazi u repozitoriju paketa za Debian i Ubuntu (
apt install restic).
Alternativa sa sličnim svojstvima je BorgBackup. Načela iz ove lekcije vrijede i za njega.
Pojmovi
- Repozitorij: mjesto na kojem restic sprema sigurnosne kopije. Uvijek izvan poslužitelja koji kopirate.
- Snapshot: jedna sigurnosna kopija u jednom trenutku. (Pazite: to nije isto što i snapshot Vašeg pružatelja usluge iz lekcije 8.1.)
- Lozinka: svaki repozitorij ima lozinku kojom se sve šifrira. Dokumentacija alata restic tu je jasna: tko izgubi lozinku, nepovratno je izgubio podatke.
Izrada repozitorija
Recimo da imate poslužitelj za pohranu backup.example.net kojem možete pristupiti putem SFTP-a pomoću ključa, kao korisnik web1. Najprije na poslužitelju izradite datoteku s lozinkom (i istu lozinku spremite u svoj upravitelj lozinki, lekcija 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.Uz varijable okruženja RESTIC_REPOSITORY i RESTIC_PASSWORD_FILE ne morate svaki put upisivati opcije -r i --password-file.
Izrada sigurnosne kopije
Najprije izvoz baze podataka (dump, lekcija 8.1), zatim sigurnosna kopija:
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 savedSljedeći dan kopiranje je mnogo brže: sprema se samo ono što se promijenilo.
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Čišćenje: forget i prune
Jedan novi snapshot svaki dan znači 365 snapshota nakon godinu dana. Naredbom forget određujete koje ćete zadržati, pomoću rasporeda čuvanja:
root@web1:~# restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --pruneRaspored funkcionira ovako:
--keep-daily 7: pogledaj posljednjih sedam dana u kojima postoji snapshot i za svaki dan zadrži najnoviji;--keep-weekly 4: isto za posljednja četiri tjedna (od ponedjeljka do nedjelje);--keep-monthly 6: isto za posljednjih šest mjeseci.
Snapshot ostaje ako zadovoljava barem jedno od pravila. Sve što ne zadovoljava nijedno pravilo bit će zaboravljeno. Novi raspored najprije isprobajte s --dry-run: tada vidite što bi bilo uklonjeno, a da se ništa ne promijeni.
Važna razlika: forget uklanja samo referencu na snapshot. Podaci ostaju u repozitoriju dok prune ne očisti blokove koje više ne koristi nijedan snapshot. Opcija --prune uz forget radi to u jednom koraku. Prune traje neko vrijeme i zaključava repozitorij; zato ga ne planirajte u isto vrijeme kad i sigurnosnu kopiju.
Provjera: check
Sigurnosnu kopiju koja se neprimjetno ošteti otkrit ćete tek pri vraćanju. Neka restic redovito provjerava repozitorij:
root@web1:~# restic check
...
no errors were found
root@web1:~# restic check --read-data-subset=5%Obična naredba check provjerava strukturu. S --read-data-subset stvarno čita dio podataka i provjerava sadržaj. To radite primjerice jednom tjedno za nekoliko posto podataka; tako se nakon nekog vremena sve barem jednom pročita.
Vraćanje: restore i mount
Vraćajte u zasebnu mapu, nikada odmah preko originala:
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
gelijklatest je najnoviji snapshot; možete koristiti i ID (restic restore 3c7e91d4 ...). S restic mount /mnt/restic (zahtijeva FUSE) sve snapshote vidite kao mape te možete razgledavati i kopirati pojedinačne datoteke. Zaustavljate s Ctrl+C.
Bazu podataka vraćate tako da vratite dump i uvezete ga, primjerice gunzip < alles.sql.gz | mariadb.
Automatski, svake noći
Izradite skriptu i systemd timer (lekcija 6.3). Skripta:
#!/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 --pruneJedan .service s Type=oneshot i ExecStart=/usr/local/sbin/backup.sh te jedan .timer s OnCalendar=*-*-* 03:10:00 i Persistent=true. set -eu osigurava da se skripta zaustavi kod prve pogreške, tako da systemd pokretanje vidi kao neuspjelo. Povežite s tim obavijest (lekcija 8.3), inače nećete primijetiti neuspjelu sigurnosnu kopiju.
Protiv ransomwarea: append-only
U gornjoj skripti poslužitelj može i sam izbrisati sigurnosnu kopiju (forget i prune). Ako napadač preuzme poslužitelj, onda to može i on. Dva su načina da to spriječite:
- rest-server u načinu append-only: na poslužitelju za pohranu pokrećete restic-ov vlastiti rest-server s opcijom
--append-only. Web-poslužitelj tada može dodavati sigurnosne kopije, ali ne može ništa brisati. Čišćenje (forget --prune) obavljate s drugog, dobro zaštićenog računala s punim ovlastima. - Pohrana s upravljanjem verzijama ili zaključavanjem objekata kod pružatelja S3 pohrane, tako da se izbrisani objekti još neko vrijeme mogu vratiti.
Pazite na suptilnu zamku koju navodi i sama dokumentacija alata restic: napadač koji doda lažne snapshote može navesti raspored poput --keep-weekly da zaboravi prave snapshote. S --keep-within (primjerice --keep-within 30d) ostaje sve iz tog razdoblja, bilo lažno ili pravo.
Sažetak
- restic šifrira, deduplicira i može spremati na mnoge vrste pohrane izvan Vašeg poslužitelja; izgubljena lozinka znači da je sve izgubljeno.
initizrađuje repozitorij,backupsnapshot,snapshotsih prikazuje.forgets--keep-*određuje što čuvate; tekprune(ili--prune) stvarno čisti podatke. Isprobajte s--dry-run.check(s--read-data-subset) provjerava,restore --targetvraća u zasebnu mapu,mountVam omogućuje razgledavanje.- Automatizirajte s timerom i obavijesti te barem jedan repozitorij držite izvan dosega poslužitelja (append-only).
Kviz
Zadatak
Zadatak Z8.2: Što ostaje nakon naredbe forget? U primjernoj datoteci restic-snapshots.txt nalazi se popis snapshota i raspored čuvanja. Odredite koji snapshoti ostaju nakon restic forget s tim rasporedom. Program uspoređuje s fiksnim ključem.
Zadatak O8.2: Test vraćanja. Na svom poslužitelju izradite restic repozitorij izvan poslužitelja, izradite sigurnosnu kopiju od /etc i svojih podataka te vratite jednu mapu u /tmp/terug. Usporedite s diff, zabilježite koliko je trajalo i odgovorite gdje su Vaša lozinka i podaci za pristup pohrani spremljeni izvan poslužitelja.
Zadatak O8.2: Test vraćanja
Ovaj zadatak rješavate sami; nitko ga ne provjerava. Označite što ste napravili i označite zadatak kao završen.
Repozitorij se nalazi kod drugog pružatelja, a ne kod onoga gdje je poslužitelj. diff ne prikazuje razlike ili samo datoteke koje su se promijenile nakon sigurnosne kopije. Lozinka u upravitelju lozinki i na papiru; append-only kopija štiti od brisanja od strane uljeza.
Vaše kvačice i bilješke ostaju samo u ovom pregledniku; ne šaljemo ih nikamo. Ako ste prijavljeni, u Moji tečajevi čuvamo samo podatak da ste zadatak završili.
Dodatno štivo
- Strategija izrade sigurnosnih kopija: pravilo 3-2-1 za Vaše vlastito poduzeće
- Dokumentacija alata restic, Preparing a new repository: https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html
- Dokumentacija alata restic, Removing backup snapshots (forget i prune): https://restic.readthedocs.io/en/stable/060_forget.html
- Dokumentacija alata restic, Restoring from backup: https://restic.readthedocs.io/en/stable/050_restore.html
- rest-server (append-only): https://github.com/restic/rest-server
