Gå til innholdet

Cookie-innstillinger

Velg hvilke typer cookies du tillater. Du kan når som helst endre valget via Cookie-innstillinger nederst på hver side. Personvernerklæring

Nødvendige

Alltid på

Trengs for å logge inn, beholde handlekurven og huske valgene dine. Disse er alltid på.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: økten din og at du forblir innlogget
  • weboke_basket: handlekurven din
  • wkBtwIncl: visning av priser med eller uten mva.
  • wok_cookies: cookievalget ditt, 12 måneder

Måler hvilken annonse som fører til et besøk eller en bestilling, slik at vi ikke betaler for annonser som ikke gir noe.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), opptil 90 dager
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: hvilken partner som henviste deg til oss (partnerprogram), 60 dager

4,6

Land og språk

Hvert land har sin egen nettside, med priser og mva. for det landet.

Vis

Sikkerhetskopier med restic

Modul 8: Sikkerhetskopier og overvåking · Lesetid: 12 minutter

Læringsmål: Etter denne leksjonen kan du bruke restic til å lage krypterte sikkerhetskopier til lagring utenfor serveren din, rydde bort gamle versjoner etter en oppbevaringsplan, kontrollere sikkerhetskopien og gjenopprette filer, og la det hele kjøre automatisk.

Nøkkelbegreper: restic, repository, init, passord(fil), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplisering, append-only, systemd-timer

Hvorfor restic?

Det finnes mange programmer for sikkerhetskopiering. restic er et godt valg for en egen server, fordi det:

  • krypterer alt før det forlater serveren; lagringen ser bare uleselige blokker;
  • dedupliserer: en fil som ikke er endret, lagres ikke på nytt, så daglige sikkerhetskopier tar lite plass;
  • støtter mange typer lagring: en mappe, en annen server via SFTP, S3-kompatibel lagring, en egen rest-server;
  • er ett program, i pakkekilden til Debian og Ubuntu (apt install restic).

Et alternativ med lignende egenskaper er BorgBackup. Prinsippene fra denne leksjonen gjelder der også.

Begrepene

  • Repository: stedet der restic lagrer sikkerhetskopiene. Alltid utenfor serveren du tar sikkerhetskopi av.
  • Snapshot: én sikkerhetskopi på ett tidspunkt. (Merk: dette er noe annet enn snapshoten hos leverandøren din fra leksjon 8.1.)
  • Passord: hvert repository har et passord som alt krypteres med. Dokumentasjonen til restic er tydelig på dette: mister du passordet, har du mistet dataene for godt.

Lag et repository

Si at du har en lagringsserver backup.example.net som du når via SFTP med en nøkkel, som brukeren web1. Lag først en passordfil på serveren (og ta vare på det samme passordet i passordbehandleren din, leksjon 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.

Med miljøvariablene RESTIC_REPOSITORY og RESTIC_PASSWORD_FILE slipper du å skrive opsjonene -r og --password-file hver gang.

Ta en sikkerhetskopi

Først databasedumpen (leksjon 8.1), så sikkerhetskopien:

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

Neste dag går det mye raskere: bare det som er endret, blir med.

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

Rydd opp: forget og prune

Én ny snapshot hver dag betyr 365 snapshots etter et år. Med forget bestemmer du hvilke du beholder, med en oppbevaringsplan:

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

Slik virker planen:

  • --keep-daily 7: se på de siste sju dagene som har en snapshot, og behold den nyeste per dag;
  • --keep-weekly 4: det samme for de siste fire ukene (mandag til og med søndag);
  • --keep-monthly 6: det samme for de siste seks månedene.

En snapshot blir stående hvis den oppfyller minst én av reglene. Alt som ikke oppfyller noen regel, blir glemt. Prøv en ny plan først med --dry-run: da ser du hva som ville blitt fjernet, uten at noe endres.

Viktig forskjell: forget fjerner bare henvisningen til en snapshot. Dataene blir liggende i repositoryet til prune rydder bort blokkene som ingen snapshot lenger bruker. Opsjonen --prune til forget gjør det i én operasjon. Prune tar tid og låser repositoryet; planlegg det derfor ikke samtidig med sikkerhetskopien.

Kontroller: check

En sikkerhetskopi som blir skadet i det stille, merker du først når du skal gjenopprette. La restic kontrollere repositoryet jevnlig:

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

Vanlig check kontrollerer strukturen. Med --read-data-subset leser den også faktisk tilbake en del av dataene og kontrollerer innholdet. Gjør det for eksempel ukentlig med noen få prosent; da er alt lest én gang etter en stund.

Gjenopprett: restore og mount

Gjenopprett til en egen mappe, aldri rett over originalen:

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 er den nyeste snapshoten; du kan også bruke en ID (restic restore 3c7e91d4 ...). Med restic mount /mnt/restic (krever FUSE) ser du alle snapshots som mapper og kan se deg rundt og kopiere enkeltfiler. Avslutt med Ctrl+C.

En database gjenoppretter du ved å hente tilbake dumpen og importere den, for eksempel gunzip < alles.sql.gz | mariadb.

Automatisk, hver natt

Lag et skript og en systemd-timer (leksjon 6.3). Skriptet:

#!/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

En .service med Type=oneshot og ExecStart=/usr/local/sbin/backup.sh, og en .timer med OnCalendar=*-*-* 03:10:00 og Persistent=true. set -eu sørger for at skriptet stopper ved første feil, slik at systemd ser kjøringen som mislykket. Koble et varsel til (leksjon 8.3), ellers merker du ikke at en sikkerhetskopi har feilet.

Mot løsepengevirus: append-only

I skriptet over kan serveren selv også slette sikkerhetskopien (forget og prune). Tar en angriper over serveren, kan han altså gjøre det samme. To måter å hindre det på:

  • rest-server i append-only-modus: på lagringsserveren kjører du restics egen rest-server med opsjonen --append-only. Webserveren kan da legge til sikkerhetskopier, men ikke slette noe. Opprydding (forget --prune) gjør du fra en annen, godt sikret maskin med fulle rettigheter.
  • Lagring med versjonering eller objektlåsing hos en S3-leverandør, slik at slettede objekter kan hentes tilbake en stund etterpå.

Pass på en lumsk felle som restic-dokumentasjonen selv nevner: en angriper som legger til falske snapshots, kan få en plan som --keep-weekly til å glemme ekte snapshots. Med --keep-within (for eksempel --keep-within 30d) blir alt fra den perioden stående, falskt eller ekte.

Oppsummering

  • restic krypterer, dedupliserer og kan lagre til mange typer lagring utenfor serveren din; mister du passordet, mister du alt.
  • init lager repositoryet, backup en snapshot, snapshots viser dem.
  • forget med --keep-* bestemmer hva du beholder; først prune (eller --prune) rydder faktisk bort dataene. Prøv med --dry-run.
  • check (med --read-data-subset) kontrollerer, restore --target gjenoppretter til en egen mappe, mount lar deg se deg rundt.
  • Automatiser med en timer og et varsel, og hold minst ett repository utenfor serverens rekkevidde (append-only).

Quiz

1. Hva skjer hvis du kjører restic forget --keep-daily 7 uten --prune?



2. Du har passordet til restic-repositoryet ditt bare i /root/.restic-wachtwoord på serveren. Serveren er tapt. Hva nå?



3. Hvorfor gjenoppretter du en sikkerhetskopi til /tmp/terug og ikke rett til det opprinnelige stedet?



4. Hva tilfører restic check --read-data-subset=5% sammenlignet med en vanlig restic check?



5. En angriper som tar over webserveren din, kan via sikkerhetskopiskriptet også kjøre restic forget --prune. Hva beskytter mot det?



Oppgave

Oppgave Z8.2: Hva blir igjen etter forget? I eksempelfilen restic-snapshots.txt står en liste over snapshots og en oppbevaringsplan. Finn ut hvilke snapshots som blir igjen etter restic forget med den planen. Programmet sammenligner med den faste fasiten.

Oppgave Z8.2: Hva blir igjen etter forget?

Fil til denne oppgaven: restic-snapshots.txt





Det du fyller inn, og det vi finner, lagrer vi ikke. Nettleseren din husker svarene dine og om du har bestått oppgaven. Er du logget inn, lagrer vi kun at du har (nesten) bestått oppgaven i Mine kurs; der kan du også slette det.

Oppgave O8.2: En gjenopprettingstest. Lag et restic-repository utenfor din egen server, ta en sikkerhetskopi av /etc og dataene dine, og gjenopprett én mappe til /tmp/terug. Sammenlign med diff, noter hvor lang tid det tok, og svar på hvor passordet ditt og tilgangsopplysningene til lagringen er oppbevart utenfor serveren.

Oppgave O8.2: En gjenopprettingstest

Denne oppgaven gjør du selv; ingen kontrollerer den. Kryss av det du har gjort, og merk oppgaven som fullført.




Avkrysningene og notatene dine blir kun i denne nettleseren; vi sender dem ikke noe sted. Er du logget inn, lagrer vi kun i Mine kurs at du har gjort oppgaven.

Les mer

Et øyeblikk …

Sett opp domenene dine

Ordne for hvert domene navnetjenerne, koblingen til hostingen din og hvem som blir innehaver.

Laster inn domenene dine…