Modul 8 · 8.2
Biztonsági mentések a restic segítségével
Modul 8: Biztonsági mentések és felügyelet · Olvasási idő: 12 perc
Tanulási cél: A lecke végére Ön képes lesz a restic segítségével titkosított biztonsági mentéseket készíteni a szerverén kívüli tárhelyre, a régi verziókat egy megőrzési séma szerint eltávolítani, a mentést ellenőrizni és fájlokat visszaállítani, valamint az egészet automatikusan futtatni.
Kulcsfogalmak: restic, repository, init, jelszó(fájl), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplikáció, append-only, systemd-időzítő
Miért a restic?
Számos biztonsági mentő program létezik. A restic jó választás egy saját szerverhez, mert:
- mindent titkosít, mielőtt az adatok elhagynák a szervert; a tárhely csak olvashatatlan blokkokat lát;
- deduplikál: a meg nem változott fájlokat nem tárolja újra, így a napi mentések kevés helyet foglalnak;
- sokféle tárhelyet ismer: egy mappát, egy másik szervert SFTP-n keresztül, S3-kompatibilis tárhelyet, saját rest-servert;
- egyetlen program, amely megtalálható a Debian és az Ubuntu csomagforrásában (
apt install restic).
Hasonló tulajdonságokkal rendelkező alternatíva a BorgBackup. Az ebben a leckében bemutatott elvek ott is érvényesek.
A fogalmak
- Repository: az a hely, ahol a restic a mentéseket tárolja. Mindig a mentett szerveren kívül legyen.
- Snapshot: egyetlen mentés egy adott időpontban. (Figyelem: ez nem azonos a szolgáltatója által készített snapshottal, amelyről a 8.1. leckében volt szó.)
- Jelszó: minden repositoryhoz tartozik egy jelszó, amellyel minden titkosítva van. A restic dokumentációja ezt egyértelműen kimondja: aki elveszíti a jelszót, az visszavonhatatlanul elveszíti az adatokat.
Repository létrehozása
Tegyük fel, hogy van egy backup.example.net tárolószervere, amelyhez SFTP-n keresztül, kulccsal fér hozzá web1 felhasználóként. Először hozzon létre egy jelszófájlt a szerveren (és ugyanezt a jelszót tárolja el a jelszókezelőjében is, lásd a 8.1. leckét):
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.A RESTIC_REPOSITORY és RESTIC_PASSWORD_FILE környezeti változók használatával nem kell minden alkalommal begépelnie a -r és --password-file opciókat.
Biztonsági mentés készítése
Először az adatbázis-dump (8.1. lecke), utána a mentés:
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 savedMásnap már sokkal gyorsabb: csak az kerül bele, ami megváltozott.
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 snapshotsTakarítás: forget és prune
Ha minden nap egy újabb snapshot keletkezik, egy év múlva 365 snapshot lesz. A forget paranccsal egy megőrzési séma alapján határozza meg, melyeket tartja meg:
root@web1:~# restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --pruneA séma így működik:
--keep-daily 7: az utolsó hét olyan napot veszi figyelembe, amelyen van snapshot, és naponként a legújabbat tartja meg;--keep-weekly 4: ugyanez az utolsó négy hétre (hétfőtől vasárnapig);--keep-monthly 6: ugyanez az utolsó hat hónapra.
Egy snapshot akkor marad meg, ha a szabályok közül legalább egynek megfelel. Ami egyetlen szabálynak sem felel meg, azt a restic elfelejti. Egy új sémát először a --dry-run opcióval próbáljon ki: így látja, mi kerülne törlésre, anélkül hogy bármi megváltozna.
Fontos különbség: a forget csak a snapshotra mutató hivatkozást távolítja el. Az adatok a repositoryban maradnak, amíg a prune el nem takarítja azokat a blokkokat, amelyeket már egyetlen snapshot sem használ. A forget parancs --prune opciója ezt egy lépésben elvégzi. A prune időigényes és zárolja a repositoryt, ezért ne ütemezze a mentéssel egy időre.
Ellenőrzés: check
Egy csendben megsérült mentést csak a visszaállításkor vesz észre az ember. Ezért a restic rendszeresen ellenőrizze a repositoryt:
root@web1:~# restic check
...
no errors were found
root@web1:~# restic check --read-data-subset=5%Az egyszerű check a szerkezetet ellenőrzi. A --read-data-subset opcióval ténylegesen vissza is olvassa az adatok egy részét, és ellenőrzi a tartalmat. Végezze ezt például hetente, néhány százalékkal; így egy idő után minden adat egyszer beolvasásra kerül.
Visszaállítás: restore és mount
Mindig egy külön mappába állítson vissza, soha ne közvetlenül az eredeti fölé:
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
gelijkA latest a legújabb snapshotot jelenti; azonosítót is használhat (restic restore 3c7e91d4 ...). A restic mount /mnt/restic paranccsal (FUSE szükséges) az összes snapshot mappaként jelenik meg, így körülnézhet és egyes fájlokat kimásolhat. Kilépés: Ctrl+C.
Egy adatbázist úgy állít vissza, hogy visszahozza a dumpot és importálja, például: gunzip < alles.sql.gz | mariadb.
Automatikusan, minden éjjel
Készítsen egy szkriptet és egy systemd-időzítőt (6.3. lecke). A szkript:
#!/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 --pruneEhhez egy .service kell Type=oneshot és ExecStart=/usr/local/sbin/backup.sh beállítással, valamint egy .timer OnCalendar=*-*-* 03:10:00 és Persistent=true beállítással. A set -eu gondoskodik arról, hogy a szkript az első hibánál leálljon, így a systemd sikertelennek látja a futást. Kapcsoljon hozzá értesítést (8.3. lecke), különben nem veszi észre a sikertelen mentést.
Zsarolóvírusok ellen: append-only
A fenti szkriptben a szerver maga is törölheti a mentést (forget és prune). Ha egy támadó átveszi a szervert, akkor ő is megteheti ezt. Kétféleképpen előzheti meg:
- rest-server append-only módban: a tárolószerveren a restic saját rest-serverét futtatja a
--append-onlyopcióval. A webszerver ekkor hozzá tud adni mentéseket, de törölni semmit sem tud. A takarítást (forget --prune) egy másik, jól védett, teljes jogosultsággal rendelkező gépről végzi. - Verziókezeléssel vagy objektumzárolással ellátott tárhely egy S3-szolgáltatónál, így a törölt objektumok még egy ideig visszaállíthatók.
Figyeljen egy alattomos csapdára is, amelyet maga a restic dokumentációja említ: egy támadó, aki hamis snapshotokat ad hozzá, egy --keep-weekly típusú sémát rávehet arra, hogy valódi snapshotokat felejtsen el. A --keep-within opcióval (például --keep-within 30d) az adott időszakból minden megmarad, akár hamis, akár valódi.
Összefoglalás
- A restic titkosít, deduplikál, és sokféle, a szerveren kívüli tárhelyre tud menteni; a jelszó elvesztése mindennek az elvesztését jelenti.
- A
initlétrehozza a repositoryt, abackupsnapshotot készít, asnapshotsmegjeleníti őket. - A
forgeta--keep-*opciókkal meghatározza, mit őriz meg; az adatokat csak aprune(vagy a--prune) takarítja el ténylegesen. Próbálja ki a--dry-runopcióval. - A
check(a--read-data-subsetopcióval) ellenőriz, arestore --targetegy külön mappába állít vissza, amountsegítségével körülnézhet. - Automatizáljon időzítővel és értesítéssel, és legalább egy repositoryt tartson a szerver hatókörén kívül (append-only).
Kvíz
Feladat
Feladat Z8.2: Mi marad meg a forget után? A restic-snapshots.txt mintafájlban egy snapshotlista és egy megőrzési séma található. Határozza meg, mely snapshotok maradnak meg a restic forget futtatása után ezzel a sémával. A program a rögzített megoldókulccsal veti össze a válaszát.
Feladat O8.2: Visszaállítási teszt. Hozzon létre a saját szerverén egy restic-repositoryt a szerveren kívül, készítsen mentést a /etc könyvtárról és az adatairól, majd állítson vissza egy mappát a /tmp/terug helyre. Hasonlítsa össze a diff paranccsal, jegyezze fel, mennyi ideig tartott, és válaszolja meg, hol tárolja a jelszavát és a tárhely hozzáférési adatait a szerveren kívül.
O8.2. feladat: Visszaállítási teszt
Ezt a feladatot saját maga végzi el, senki nem ellenőrzi. Pipálja ki, amit elvégzett, és jelölje meg a feladatot elvégzettként.
A repository a szervertől eltérő szolgáltatónál van. A diff nem mutat eltérést, vagy csak a biztonsági mentés után módosult fájlokat. A jelszó a jelszókezelőben és papíron; egy append-only másolat véd a behatoló általi törlés ellen.
A pipái és jegyzetei csak ebben a böngészőben maradnak meg, sehova nem küldjük el őket. Ha bejelentkezett, a Fiókomban csak azt tároljuk, hogy elvégezte a feladatot.
További olvasnivaló
- Biztonsági mentési stratégia: a 3-2-1 szabály a saját vállalkozás számára
- restic-dokumentáció, Preparing a new repository: https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html
- restic-dokumentáció, Removing backup snapshots (forget és prune): https://restic.readthedocs.io/en/stable/060_forget.html
- restic-dokumentáció, Restoring from backup: https://restic.readthedocs.io/en/stable/050_restore.html
- rest-server (append-only): https://github.com/restic/rest-server
