// travaux pratiques · Hygiène numérique
TP06 - Automatiser les sauvegardes avec systemd
- TP 6 / 8
- 7 étapes
- ≈ 60 min
- Accès libre
Objectif : automatiser chaque nuit la sauvegarde des fichiers et de la base de données de srv01 avec un service et un timer systemd, appliquer la rétention et exploiter les journaux pour détecter un échec.
Prérequis :
- TP04 et TP05 terminés (dépôt SFTP opérationnel, MariaDB installé).
- Session root sur
srv01.
Actions à réaliser :
Centraliser la configuration dans un fichier d’environnement.
cat > /etc/restic/sftp.env <<'EOF' RESTIC_REPOSITORY=sftp:restic@192.168.56.20:/srv/restic/srv01 RESTIC_PASSWORD_FILE=/etc/restic/sftp.pass EOF chmod 600 /etc/restic/sftp.envÉcrire le script de sauvegarde.
cat > /usr/local/sbin/restic-backup.sh <<'EOF' #!/bin/bash set -euo pipefail restic backup /etc /srv/data --exclude-file=/etc/restic/excludes.txt --tag fichiers --tag auto restic backup --tag base-de-donnees --tag auto --stdin-filename all-databases.sql \ --stdin-from-command -- mariadb-dump --all-databases --single-transaction restic forget --tag auto --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune EOF chmod 700 /usr/local/sbin/restic-backup.shAvec
set -e, tout code de retour différent de 0 (y compris le code 3, fichiers illisibles) interrompt le script et marque le service en échec.Créer le service.
cat > /etc/systemd/system/restic-backup.service <<'EOF' [Unit] Description=Sauvegarde restic de srv01 Wants=network-online.target After=network-online.target [Service] Type=oneshot EnvironmentFile=/etc/restic/sftp.env ExecStart=/usr/local/sbin/restic-backup.sh Nice=10 IOSchedulingClass=idle EOFCréer le timer.
cat > /etc/systemd/system/restic-backup.timer <<'EOF' [Unit] Description=Sauvegarde restic quotidienne [Timer] OnCalendar=*-*-* 01:00:00 RandomizedDelaySec=15min Persistent=true [Install] WantedBy=timers.target EOF systemctl daemon-reload systemctl enable --now restic-backup.timer systemctl list-timers restic-backup.timerPersistent=truedéclenche la sauvegarde au démarrage si la machine était éteinte à l’heure prévue.Lancer une exécution immédiate et lire le journal.
systemctl start restic-backup.service systemctl status restic-backup.service --no-pager journalctl -u restic-backup.service -n 30 --no-pagerProvoquer un échec et le détecter. Coupez l’accès au serveur de sauvegarde, relancez, puis rétablissez :
iptables -I OUTPUT -d 192.168.56.20 -j REJECT systemctl start restic-backup.service systemctl is-failed restic-backup.service iptables -D OUTPUT -d 192.168.56.20 -j REJECTsystemctl is-failedrépondfailed: c’est l’état que votre supervision doit surveiller.Contrôler la fraîcheur des sauvegardes.
apt -y install jq set -a; . /etc/restic/sftp.env; set +a restic snapshots --tag auto --latest 1 --json | jq -r '.[] | .time + " " + (.paths | join(","))'
Vérification / résultat attendu :
systemctl list-timersaffiche la prochaine exécution vers 1 h du matin.- Après l’exécution manuelle, deux nouveaux instantanés étiquetés
autoexistent (fichiers et base de données). - L’échec simulé est visible dans
journalctlet viasystemctl is-failed.
Pour aller plus loin : ajoutez une directive OnFailure= dans la section [Unit] pour déclencher une unité d’alerte (courriel, webhook vers votre outil de supervision), et planifiez un second timer hebdomadaire qui exécute restic check --read-data-subset=1/5. Pour réduire les privilèges, la documentation de restic décrit l’exécution avec DynamicUser=yes et la seule capacité CAP_DAC_READ_SEARCH.
// formation sur mesure
Former votre équipe sur ce sujet ?
Azur Secure anime des sessions intra-entreprise, à distance ou dans vos locaux sur la Côte d'Azur, adaptées au niveau de vos équipes.
