← Cybersécurité

Sauvegardes avec UrBackup

Sommaire

Mise en œuvre concrète du PRA : sauvegarder un serveur web et un serveur de base de données, puis vérifier la restauration après un incident simulé.

1. Architecture

Un serveur UrBackup dédié, avec son propre volume de stockage, et un agent client installé sur chaque machine à sauvegarder. Le serveur de sauvegarde ne doit pas être joignable depuis les machines de production autrement que par le protocole de l'agent : s'il est administrable depuis un serveur compromis, il tombe avec lui.

2. Configurer le serveur

Interface web sur le port 55414.

  1. Paramètres > Général : définir le répertoire de stockage, par exemple /media/BACKUP/urbackup.
  2. Créer un utilisateur admin avec un mot de passe fort (l'interface est ouverte par défaut).
  3. Activer le chiffrement des sauvegardes.
  4. Définir les fenêtres de sauvegarde et les politiques de rétention (incrémentales fréquentes, complètes hebdomadaires).

3. Installer les clients

TF=$(mktemp) && wget "https://hndl.urbackup.org/Client/2.5.25/UrBackup%20Client%20Linux%202.5.25.sh" -O $TF && sudo sh $TF

Saisir l'adresse IP du serveur UrBackup pendant l'installation, puis déclarer les chemins à sauvegarder :

MachineCheminsPourquoi
Serveur web/var/www/html, /etc/apache2, /etc/sslContenu du site, configuration du service, certificats
Serveur BDD/var/lib/mysql ou un dump SQLDonnées applicatives

Sauvegarder /var/lib/mysql à chaud, sur une base en cours d'écriture, produit souvent une copie incohérente. On préfère un dump réalisé avant la sauvegarde de fichiers.

4. Script pré-sauvegarde

Créer /etc/urbackup/prefilebackup :

#!/bin/bash
# Exécuté avant chaque sauvegarde de fichiers par UrBackup
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"

mysqldump -u backup_user -p'MotDePasseBackup' --all-databases \
    --single-transaction --routines --triggers \
    | gzip > "$BACKUP_DIR/dump_${DATE}.sql.gz"

# Ne garder que les 7 derniers dumps
find "$BACKUP_DIR" -name "dump_*.sql.gz" -mtime +7 -delete
exit 0
sudo chmod +x /etc/urbackup/prefilebackup

5. Compte MySQL dédié

CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'MotDePasseBackup';
GRANT SELECT, LOCK TABLES, SHOW VIEW ON *.* TO 'backup_user'@'localhost';
FLUSH PRIVILEGES;
PrivilègeUtilité pour la sauvegarde
SELECTLire les données des tables
LOCK TABLESFiger les tables le temps d'obtenir un état cohérent
SHOW VIEWExporter la définition des vues

Pourquoi ne pas utiliser root ? Parce qu'un identifiant de sauvegarde se retrouve nécessairement dans un script, sur disque. S'il fuite, un compte limité au SELECT permet au mieux de lire ; root permettrait de modifier, supprimer, créer des comptes. C'est l'application directe du moindre privilège.

6. Tester le PRA

Après avoir vérifié qu'une sauvegarde valide existe, simuler l'incident sur la VM web :

sudo rm -rf /var/www/html/*

Puis restaurer depuis l'interface UrBackup et chronométrer la durée totale, de la détection à la remise en service.