Sauvegarde et restauration

Enjeux

Les sauvegardes permettent, en cas de problème, de restaurer des données et des systèmes qui pourraient être corrompus ou perdus.

Exemples de problèmes pouvant entraîner l’indisponibilité des données d’un serveur :

  • panne du serveur ;

  • vol du serveur ;

  • panne du disque dur ;

  • incendie dans le local technique où se trouve le serveur ;

  • chiffrement des données du serveur par un rançongiciel à la suite d’un piratage.

Il est indispensable de s’assurer que les sauvegardes de votre serveur sont stockées dans un lieu physiquement et géographiquement distinct. Si le fournisseur est chargé de stocker les sauvegardes, cette obligation doit être inscrite dans le contrat.

Souvenez-vous des différentes affaires opposant OVH à certains de ses clients à la suite de l’incendie de son datacenter de Strasbourg, en mars 2021 : un recours collectif de 140 entreprises privées et de quelques organismes publics, ainsi que des recours individuels ; entre 12 000 et 16 000 clients auraient été affectés. Les sauvegardes étaient malheureusement stockées dans le même lieu que les serveurs, ce qui a entraîné une perte totale des données pour certains clients, alors que le fournisseur mentionnait dans ses contrats que les sauvegardes étaient physiquement isolées....

Quand sauvegarder ?

La fréquence des sauvegardes dépend de celle des modifications susceptibles d’être apportées à votre serveur. Des sauvegardes quotidiennes peuvent constituer un bon compromis, mais cette fréquence peut aussi être excessive. Dans ce chapitre, nous allons mettre en place sur notre serveur un service de sauvegarde automatique qui ne crée une sauvegarde que lorsqu’une modification est détectée via une vérification quotidienne.

En complément de ces sauvegardes automatiques, il est primordial d’en effectuer également une manuellement avant chaque mise à jour majeure, qu’il s’agisse du système, d’un site web, etc.

Que sauvegarder ?

Tout dépend de vos besoins. Il est possible de tout sauvegarder, mais chaque sauvegarde doit répondre à un besoin précis.

Nous distinguons :

  • les sauvegardes du système d’exploitation ;

  • les sauvegardes de données, qui concernent principalement les données des utilisateurs du système, mais aussi d’autres éléments. Dans le cas d’un serveur web, il peut notamment s’agir :

  • du code source des sites hébergés ;

  • des bases de données ;

  • des fichiers de configuration des sites pour le service web, notamment les hôtes virtuels ;

  • des fichiers de configuration des différents logiciels, par exemple :

  • fail2ban ;

  • ufw ;

  • des fichiers ipset contenant les adresses IP bannies ;

  • les sauvegardes des journaux.

Dans ce chapitre, nous nous intéressons principalement à la sauvegarde des données. Il peut toutefois être tout à fait pertinent de sauvegarder également les journaux.

Où sauvegarder ?

Il faut distinguer l’emplacement où la sauvegarde est effectuée de celui où elle est stockée.

Il est possible d’effectuer les sauvegardes sur le serveur et de les y stocker. Cependant, notamment lorsqu’il s’agit de données, il est préférable de les conserver hors du serveur et dans un autre lieu, pour les raisons abordées au début du chapitre.

Pour les données, un compromis pourrait consister à conserver les sauvegardes directement sur le serveur, puis à en transférer périodiquement une copie afin de la stocker en toute sécurité dans un autre emplacement, par exemple chez vous et, en complément, dans un espace cloud.

Un stockage sécurisé suppose de s’assurer :

  • que les sauvegardes sont transférées de manière sécurisée, afin d’en préserver la confidentialité et l’intégrité ;

  • qu’elles sont stockées de manière sécurisée, afin d’en préserver la confidentialité, l’intégrité et la disponibilité. Si vous ne pouvez pas garantir que l’emplacement de stockage respecte la confidentialité des données, vous pouvez envisager de les chiffrer avant leur transfert, par exemple avec OpenSSL ou un logiciel tel que VeraCrypt.

Si vous êtes...

Comment sauvegarder ?

1. Snapshots

Les snapshots (instantanés) sont des sauvegardes de l’état d’un système à un instant précis. Ils enregistrent ainsi l’ensemble du contenu de la machine au moment de leur création.

Ils sont particulièrement utiles avant une mise à jour majeure. En cas de problème consécutif à cette mise à jour, il suffit de restaurer l’instantané.

Si tout se passe bien, vous pouvez ensuite le supprimer. Cette suppression est recommandée, car un instantané peut occuper un espace de stockage considérable, comme le montre la capture d’écran ci-dessous, qui représente un seul instantané de mysrv :

images/10RI01.png

a. Sur les machines virtuelles

Les hyperviseurs tels que VirtualBox intègrent généralement un outil de création d’instantanés pour les machines virtuelles :

images/10RI02.png

Dans ce cas précis, vous devez supprimer vous-même les instantanés créés à l’aide du bouton Delete.

b. Sur un VPS

Les fournisseurs de VPS proposent généralement un moyen de créer des snapshots :

images/10RI03.png

Dans cet exemple, le fournisseur supprime automatiquement les snapshots au bout de quelques jours.

c. Sur les machines physiques

Sur une machine physique, il existe des logiciels permettant de créer des instantanés, tels que Timeshift. Si vous...

Services de sauvegarde et de récupération automatique de données

1. Sauvegarde des données

a. Présentation du service

Nous allons mettre en place sur le serveur un service associé à un script Bash, qui automatisera quotidiennement la sauvegarde de différentes données jugées importantes et correspondant aux éléments présentés dans la section Que sauvegarder ?, au début du chapitre.

Le script backup.sh, présenté à l’annexe Sauvegarde automatique, utilise le fichier to_save, présenté à l’annexe Éléments à sauvegarder. Ce fichier répertorie les chemins des éléments à sauvegarder ou, pour les bases de données, leur nom. Chaque élément est archivé, puis son empreinte SHA-256 est calculée et comparée à celle de l’archive précédente du même élément, stockée dans le sous-répertoire old/. Ainsi, seules les archives dont l’empreinte diffère de celle de l’archive précédente, c’est-à-dire celles qui contiennent des éléments modifiés depuis la dernière exécution du service, sont effectivement conservées.

Dans notre exemple, le script et le fichier qui répertorie les éléments à sauvegarder sont créés dans le répertoire automatisation, placé dans le répertoire /home de l’utilisateur courant du serveur, soit ici /home/alex/automatisation.

Une fois...

Test et restauration des données archivées

Il peut être nécessaire de restaurer un élément pour plusieurs raisons, par exemple s’il a disparu du serveur, généralement à la suite d’une suppression involontaire, ou s’il ne fonctionne plus correctement après des modifications dont nous ne connaissons plus précisément la nature.

Nous allons présenter les différentes étapes de la restauration.

Dans la pratique, il peut être tentant de privilégier la restauration d’un instantané antérieur, si celui-ci n’est pas trop ancien. Ce choix doit cependant tenir compte de l’ensemble des modifications qui seraient annulées.

1. Étape 1 - Contrôle de l’archive

Nous pouvons afficher le contenu de l’archive avec la commande tar.

Dans cet exemple, nous souhaitons lister le contenu de l’archive du site site1 :

alex@y510p:~$ tar -tvf site1.tgz  

La commande affiche notamment la date de dernière modification de chaque fichier contenu dans l’archive. Nous pouvons également consulter le contenu textuel de fichiers compressés avec les commandes zcat et zless. Cette vérification préalable permet de s’assurer que nous avons sélectionné la bonne archive.

2. Étape 2 - récupérer l’archive à restaurer...

Service de rotation des archives

1. Présentation du service

Nous allons créer ce service personnalisé afin de gérer l’obsolescence des anciennes archives de données stockées sur le serveur. Le service utilise le script archives_rotation.sh, présenté à l’annexe Rotation des archives, ainsi que le fichier to_save, déjà créé. Ces deux fichiers sont placés dans le répertoire automatisation du répertoire personnel de l’utilisateur courant du serveur, soit ici /home/alex/automatisation.

La rotation repose sur le nombre d’archives conservées pour chaque élément sauvegardé, et plus précisément sur le nombre d’anciennes archives. Comme nous l’avons vu, le service de sauvegarde génère, pour chaque élément, une archive contenant les données les plus récentes et déplace l’archive précédente dans le sous-répertoire old/. Dans cet exemple, nous choisissons de conserver trois anciennes archives en plus de l’archive la plus récente.

Nous aurions également pu déterminer l’obsolescence des archives en fonction de leur ancienneté ou combiner les deux critères.

2. Création du service

Créons un service personnalisé :

sudo nano /etc/systemd/system/custom_backup_rotation.service ...