Μετάβαση στο περιεχόμενο

Ρυθμίσεις cookies

Επιλέξτε ανά κατηγορία ποια cookies επιτρέπετε. Μπορείτε να αλλάξετε την επιλογή σας οποιαδήποτε στιγμή μέσω των Ρυθμίσεων cookies στο κάτω μέρος κάθε σελίδας. Δήλωση απορρήτου

Απαραίτητα

Πάντα ενεργά

Χρειάζονται για τη σύνδεση, για να διατηρείται το καλάθι σας και για να θυμόμαστε τις επιλογές σας. Είναι πάντα ενεργά.

Ποια cookies;
  • weboke_sessie, weboke_klant, weboke_remember: η συνεδρία σας και η παραμονή σε σύνδεση
  • weboke_basket: το καλάθι σας
  • wkBtwIncl: εμφάνιση τιμών με ή χωρίς ΦΠΑ
  • wok_cookies: η επιλογή σας για τα cookies, 12 μήνες

Μετρούν ποια διαφήμιση οδηγεί σε επίσκεψη ή παραγγελία, ώστε να μην πληρώνουμε για διαφημίσεις που δεν αποδίδουν.

Ποια cookies;
  • Google Ads μέσω Google Tag Manager (_gcl_au, _gcl_aw), έως 90 ημέρες
  • OpenAI Ads, διαφημίσεις στο ChatGPT
  • wok_aff: μέσω ποιου συνεργάτη ήρθατε σε εμάς (πρόγραμμα συνεργατών), 60 ημέρες

4,6

Χώρα και γλώσσα

Κάθε χώρα έχει τη δική της ιστοσελίδα, με τιμές και ΦΠΑ της χώρας αυτής.

Προβολή

Αντίγραφα ασφαλείας με το restic

Ενότητα 8: Αντίγραφα ασφαλείας και παρακολούθηση · Χρόνος ανάγνωσης: 12 λεπτά

Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να δημιουργείτε με το restic κρυπτογραφημένα αντίγραφα ασφαλείας σε αποθηκευτικό χώρο εκτός του server σας, να καθαρίζετε παλιές εκδόσεις σύμφωνα με ένα σχήμα διατήρησης, να ελέγχετε το αντίγραφο ασφαλείας και να επαναφέρετε αρχεία, καθώς και να ρυθμίζετε όλη τη διαδικασία ώστε να εκτελείται αυτόματα.

Βασικές έννοιες: restic, repository, init, κωδικός πρόσβασης (αρχείο κωδικού πρόσβασης), backend (sftp, S3, rest-server), backup, snapshots, forget, --keep-daily/--keep-weekly/--keep-monthly, prune, check, restore, mount, deduplication (αφαίρεση διπλοτύπων), append-only, systemd timer

Γιατί το restic;

Υπάρχουν πολλά προγράμματα αντιγράφων ασφαλείας. Το restic είναι καλή επιλογή για έναν δικό σας server, επειδή:

  • κρυπτογραφεί τα πάντα πριν φύγουν από τον server· ο αποθηκευτικός χώρος βλέπει μόνο μη αναγνώσιμα μπλοκ·
  • κάνει deduplication: ένα αρχείο που δεν έχει αλλάξει δεν αποθηκεύεται ξανά, οπότε τα ημερήσια αντίγραφα ασφαλείας καταλαμβάνουν λίγο χώρο·
  • υποστηρίζει πολλά είδη αποθηκευτικού χώρου: έναν φάκελο, έναν άλλο server μέσω SFTP, αποθηκευτικό χώρο συμβατό με S3, έναν δικό σας rest-server·
  • είναι ένα μόνο πρόγραμμα, διαθέσιμο στο αποθετήριο πακέτων του Debian και του Ubuntu (apt install restic).

Μια εναλλακτική με παρόμοια χαρακτηριστικά είναι το BorgBackup. Οι αρχές αυτού του μαθήματος ισχύουν και εκεί.

Οι έννοιες

  • Repository: το σημείο όπου το restic αποθηκεύει τα αντίγραφα ασφαλείας. Πάντα εκτός του server του οποίου κρατάτε αντίγραφο.
  • Snapshot: ένα αντίγραφο ασφαλείας σε μία συγκεκριμένη στιγμή. (Προσοχή: αυτό είναι κάτι διαφορετικό από το snapshot του παρόχου σας από το μάθημα 8.1.)
  • Κωδικός πρόσβασης: κάθε repository έχει έναν κωδικό πρόσβασης με τον οποίο κρυπτογραφούνται τα πάντα. Η τεκμηρίωση του restic είναι σαφής σε αυτό: όποιος χάσει τον κωδικό πρόσβασης, χάνει τα δεδομένα οριστικά.

Δημιουργία repository

Ας υποθέσουμε ότι έχετε έναν server αποθήκευσης backup.example.net, στον οποίο έχετε πρόσβαση μέσω SFTP με κλειδί, ως χρήστης web1. Δημιουργήστε πρώτα ένα αρχείο κωδικού πρόσβασης στον server (και αποθηκεύστε τον ίδιο κωδικό πρόσβασης στον διαχειριστή κωδικών πρόσβασης σας, μάθημα 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.

Με τις μεταβλητές περιβάλλοντος RESTIC_REPOSITORY και RESTIC_PASSWORD_FILE δεν χρειάζεται να πληκτρολογείτε κάθε φορά τις επιλογές -r και --password-file.

Δημιουργία αντιγράφου ασφαλείας

Πρώτα το dump της βάσης δεδομένων (μάθημα 8.1), έπειτα το αντίγραφο ασφαλείας:

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

Την επόμενη μέρα η διαδικασία είναι πολύ πιο γρήγορη: αποθηκεύεται μόνο ό,τι άλλαξε.

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

Καθαρισμός: forget και prune

Ένα νέο snapshot κάθε μέρα σημαίνει 365 snapshots μετά από έναν χρόνο. Με το forget καθορίζετε ποια θα διατηρήσετε, με ένα σχήμα διατήρησης:

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

Το σχήμα λειτουργεί ως εξής:

  • --keep-daily 7: εξετάζει τις τελευταίες επτά ημέρες για τις οποίες υπάρχει snapshot και κρατά το νεότερο κάθε ημέρας·
  • --keep-weekly 4: το ίδιο για τις τελευταίες τέσσερις εβδομάδες (Δευτέρα έως και Κυριακή)·
  • --keep-monthly 6: το ίδιο για τους τελευταίους έξι μήνες.

Ένα snapshot διατηρείται αν ικανοποιεί τουλάχιστον έναν από τους κανόνες. Ό,τι δεν ικανοποιεί κανέναν κανόνα, ξεχνιέται. Δοκιμάστε ένα νέο σχήμα πρώτα με --dry-run: έτσι βλέπετε τι θα διαγραφόταν χωρίς να αλλάξει τίποτα.

Σημαντική διαφορά: το forget αφαιρεί μόνο την αναφορά σε ένα snapshot. Τα δεδομένα παραμένουν στο repository μέχρι το prune να καθαρίσει τα μπλοκ που δεν χρησιμοποιούνται πλέον από κανένα snapshot. Η επιλογή --prune στο forget τα κάνει αυτά με μία κίνηση. Το prune χρειάζεται χρόνο και κλειδώνει το repository· γι' αυτό μην το προγραμματίζετε ταυτόχρονα με το αντίγραφο ασφαλείας σας.

Έλεγχος: check

Ένα αντίγραφο ασφαλείας που καταστρέφεται αθόρυβα, το καταλαβαίνετε μόνο κατά την επαναφορά. Αφήστε το restic να ελέγχει τακτικά το repository:

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

Το απλό check ελέγχει τη δομή. Με --read-data-subset διαβάζει επίσης πραγματικά ένα μέρος των δεδομένων και ελέγχει το περιεχόμενο. Κάντε το για παράδειγμα κάθε εβδομάδα με ένα μικρό ποσοστό· έτσι, μετά από κάποιο διάστημα, όλα θα έχουν διαβαστεί τουλάχιστον μία φορά.

Επαναφορά: restore και mount

Επαναφέρετε σε έναν ξεχωριστό φάκελο, ποτέ απευθείας πάνω από το πρωτότυπο:

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 είναι το νεότερο snapshot· μπορείτε επίσης να χρησιμοποιήσετε ένα ID (restic restore 3c7e91d4 ...). Με restic mount /mnt/restic (απαιτεί FUSE) βλέπετε όλα τα snapshots ως φακέλους και μπορείτε να περιηγηθείτε και να αντιγράψετε μεμονωμένα αρχεία. Τερματίζετε με Ctrl+C.

Μια βάση δεδομένων την επαναφέρετε ανακτώντας το dump και εισάγοντάς το, για παράδειγμα gunzip < alles.sql.gz | mariadb.

Αυτόματα, κάθε νύχτα

Δημιουργήστε ένα script και ένα systemd timer (μάθημα 6.3). Το 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

Ένα .service με Type=oneshot και ExecStart=/usr/local/sbin/backup.sh, και ένα .timer με OnCalendar=*-*-* 03:10:00 και Persistent=true. Το set -eu φροντίζει ώστε το script να σταματά στο πρώτο σφάλμα, ώστε το systemd να θεωρεί την εκτέλεση αποτυχημένη. Συνδέστε μια ειδοποίηση (μάθημα 8.3), αλλιώς δεν θα αντιληφθείτε ένα αποτυχημένο αντίγραφο ασφαλείας.

Κατά του ransomware: append-only

Στο παραπάνω script ο ίδιος ο server μπορεί επίσης να διαγράψει το αντίγραφο ασφαλείας (forget και prune). Αν ένας εισβολέας αποκτήσει τον έλεγχο του server, μπορεί λοιπόν να το κάνει κι αυτός. Δύο τρόποι για να το αποτρέψετε:

  • rest-server σε λειτουργία append-only: στον server αποθήκευσης εκτελείτε τον δικό rest-server του restic με την επιλογή --append-only. Ο web server μπορεί τότε να προσθέτει αντίγραφα ασφαλείας, αλλά να μη διαγράφει τίποτα. Τον καθαρισμό (forget --prune) τον κάνετε από ένα άλλο, καλά προστατευμένο μηχάνημα με πλήρη δικαιώματα.
  • Αποθηκευτικός χώρος με διαχείριση εκδόσεων ή κλείδωμα αντικειμένων σε έναν πάροχο S3, ώστε τα διαγραμμένα αντικείμενα να μπορούν να ανακτηθούν για κάποιο διάστημα.

Προσέξτε μια λεπτή παγίδα που αναφέρει η ίδια η τεκμηρίωση του restic: ένας εισβολέας που προσθέτει ψεύτικα snapshots μπορεί να παρασύρει ένα σχήμα όπως το --keep-weekly να ξεχάσει πραγματικά snapshots. Με --keep-within (για παράδειγμα --keep-within 30d) διατηρούνται όλα όσα ανήκουν σε εκείνη την περίοδο, ψεύτικα ή πραγματικά.

Σύνοψη

  • Το restic κρυπτογραφεί, κάνει deduplication και μπορεί να αποθηκεύει σε πολλά είδη αποθηκευτικού χώρου εκτός του server σας· αν χάσετε τον κωδικό πρόσβασης, τα χάνετε όλα.
  • Το init δημιουργεί το repository, το backup ένα snapshot, το snapshots τα εμφανίζει.
  • Το forget με --keep-* καθορίζει τι διατηρείτε· μόνο το prune (ή το --prune) καθαρίζει πραγματικά τα δεδομένα. Δοκιμάστε με --dry-run.
  • Το check (με --read-data-subset) ελέγχει, το restore --target επαναφέρει σε ξεχωριστό φάκελο, το mount σας επιτρέπει να περιηγηθείτε.
  • Αυτοματοποιήστε με ένα timer και μια ειδοποίηση, και κρατήστε τουλάχιστον ένα repository εκτός εμβέλειας του server (append-only).

Κουίζ

1. Τι συμβαίνει αν εκτελέσετε restic forget --keep-daily 7 χωρίς --prune;



2. Έχετε τον κωδικό πρόσβασης του restic repository σας μόνο στο /root/.restic-wachtwoord στον server. Ο server χάθηκε. Τι γίνεται τώρα;



3. Γιατί επαναφέρετε ένα αντίγραφο ασφαλείας στο /tmp/terug και όχι απευθείας στην αρχική θέση;



4. Τι προσθέτει το restic check --read-data-subset=5% σε ένα απλό restic check;



5. Ένας εισβολέας που αποκτά τον έλεγχο του web server σας μπορεί μέσω του script αντιγράφων ασφαλείας να εκτελέσει και restic forget --prune. Τι προστατεύει από αυτό;



Άσκηση

Άσκηση Z8.2: Τι απομένει μετά το forget; Στο αρχείο παραδείγματος restic-snapshots.txt υπάρχει μια λίστα με snapshots και ένα σχήμα διατήρησης. Προσδιορίστε ποια snapshots απομένουν μετά το restic forget με αυτό το σχήμα. Το πρόγραμμα συγκρίνει με το καθορισμένο κλειδί απαντήσεων.

Άσκηση Z8.2: Τι απομένει μετά το forget;

Αρχείο για αυτή την άσκηση: restic-snapshots.txt





Ό,τι συμπληρώνετε και ό,τι βρίσκουμε δεν το αποθηκεύουμε. Το πρόγραμμα περιήγησής σας θυμάται τις απαντήσεις σας και αν περάσατε την άσκηση. Αν έχετε εγγραφεί, αποθηκεύουμε μόνο ότι η άσκηση ήταν (σχεδόν) σωστή στο Τα μαθήματά μου· εκεί μπορείτε και να το διαγράψετε.

Άσκηση O8.2: Μια δοκιμή επαναφοράς. Δημιουργήστε στον δικό σας server ένα restic repository εκτός του server, πάρτε αντίγραφο ασφαλείας του /etc και των δεδομένων σας, και επαναφέρετε έναν φάκελο στο /tmp/terug. Συγκρίνετε με diff, σημειώστε πόσο διήρκεσε και απαντήστε πού φυλάσσονται εκτός του server ο κωδικός πρόσβασης και τα στοιχεία του αποθηκευτικού χώρου σας.

Άσκηση O8.2: Μια δοκιμή επαναφοράς

Αυτή την άσκηση την κάνετε μόνοι σας: κανείς δεν την ελέγχει. Σημειώστε τι έχετε κάνει και επισημάνετε την άσκηση ως ολοκληρωμένη.




Τα τικ και οι σημειώσεις σας παραμένουν μόνο σε αυτό το πρόγραμμα περιήγησης· δεν τα στέλνουμε πουθενά. Αν έχετε εγγραφεί, αποθηκεύουμε στο Τα μαθήματά μου μόνο ότι έχετε ολοκληρώσει την άσκηση.

Για περαιτέρω μελέτη

Μια στιγμή…

Ρυθμίστε τα domains σας

Ρυθμίστε για κάθε domain τους nameservers, τη σύνδεση με το hosting σας και ποιος θα είναι ο κάτοχος.

Φόρτωση των domains σας…