Présentation

Rsnapshot est un script écrit en perl.

Il utilise rsync et ssh pour effectuer des sauvegardes à intervalle régulier, soit localement, soit via le réseau, de manière sécurisée.

Il est capable de réaliser des sauvegardes d'un systèmes de fichier ou bien de bases de données par l'intermèdiaires de scripts.

De plus, il utilise les hard link unix pour :

  • Éviter de dupliquer inutilement les fichiers.
  • Faciliter la restauration.

Ainsi, rsnapshot crée l'illusion de plusieurs sauvegardes complètes, alors qu'il n'y a sur le système de fichier que la première et les différences éventuelles apparues entre cette dernière et les suivantes.

Installation

Tout d'abord, par acquis de conscience, et pour être certain d'avoir la version la plus récente du logiciel, Il faut utiliser portsnap ou bien utiliser cvsup pour mettre à jour les ports.

Si vous préférez comme moi la méthode old school et si votre /etc/make.conf est correctement configuré, vous pouvez utiliser la méthode suivante :

$ cd /usr/ports && make update

Dans le cas contraire, cette commande fera le même travail, à la condition que votre fichier de configuration pour cvsup soit dans /etc/cvsupfile :

$ cvsup -L2 -g /etc/cvsupfile

Une fois la mise à jour des ports effectué, il faut installer rsnapshot, de la manière la plus traditionnelle qui soit :

$ cd /usr/ports/sysutils/rsnapshot && make install clean

La solution de sauvegarde est maintenant prête à être configurée.

Configuration du serveur de sauvegarde

Commençons par créer un répertoire dans /root pour stocker les différents éléments nécéssaires au fonctionnement de rsnapshot :

$ sudo mkdir -p /root/rsnapshot/scripts

Une fois ce répertoire créé, il faut générer la paire de clefs ssh nécéssaire à la sécurisation de la connexion entre le serveur et les machines à sauvegarder :

$ ssh-keygen -t dsa -b 2048 -f /root/rsnapshot/ssh-key

Il faut ensuite copier dans le répertoire /root/rsnapshot/scripts les deux fichiers joints avec ce billet et les rendre éxécutables :

  1. L'un, mysql.rsnapshot.sh, permet de faire la sauvegarde de bases de données mysql.
  2. L'autre, rsnapreport.php, permet de générer un rapport au format texte à l'issue de la sauvegarde.

Il reste ensuite à éditer /usr/local/etc/rsnapshot.conf pour définir différents paramètres, tel que le répertoire ou seront stockées les sauvegardes et les chemins à suivre pour les effectuer :

ssh_args	-o BatchMode=yes -i /root/rsnapshot/ssh-key
backup rsnapshot@machine-a-sauvegarder:/usr/local/www/ machine-a-sauvegarder/usr/local/www/
backup_script /root/rsnapshot/scripts/mysql.rsnapshot.sh machine-a-sauvegarder machine-a-sauvegarder/mysql/

Une fois les modifications nécéssaires effectuées, une vérification s'impose :

$ rsnapshot configtest

Une fois cela effectué, il reste à réaliser la configuration des clients.

Configuration des machines à sauvegarder

Il faut commener par se connecter sur l'un de clients.

Une fois cela fait, il faut ajouter un utilisateur rsnapshot ayant /home/rsnapshot comme répertoire d'accueil et pas de mot de passe :

$ sudo adduser -s /bin/sh -w no -d /home/rsnapshot

Une fois cela effectué, il faut créer le répertoire /home/rsnapshot/.ssh :

$ mkdir /home/rsnapshot/.ssh && chmod 700 /home/rsnapshot/.ssh

Il est alors temps de copier à l'aide de scp la clef publique générée au départ de ce tutorial (et surtout pas la clef privée) :

cd /home/rsnapshot/.ssh && scp mon-serveur-de-backup:/root/rsnapshot/ssh-key.pub ./authorized_keys && chown rsnapshot:rsnapshot ./authorized_keys && chmod 600 ./authorized_keys

Il faut ensuite créer le répertoire scripts dans /home/rsnapshot et y mettre le script rsnapshot-manager.sh ci-joint et le rendre éxécutable par l'utilisateur rsnapshot.

Il reste ensuite à ajouter au début du fichier /home/rsnapshot/authorized_keys le texte suivant, sans oublier l'espace final :

command="/home/rsnapshot/scripts/rsnapshot-manager.sh" 

Si ce n'est pas déjà fait, installer sudo :

cd /usr/ports && make update && cd /usr/ports/security/sudo && make install clean

Dans le fichier /usr/local/etc/sudoers, ajouter la ligne suivante à l'aide de l'utilitaire visudo :

rsnapshot ALL=NOPASSWD: /usr/local/bin/rsync

Finalisation

Il faut maintenant se connecter à l'aide de ssh à partir du serveur de sauvegarde sur la machine à sauvegarder pour vérifier que l'authentification fonctionne et l'ajouter aux hôtes reconnus par ssh :

ssh rsnapshot@machine-a-sauvegarder -i /root/rsnapshot/ssh-key

Si tout est correct, ssh va vous poser une question à laquelle il faudra répondre par l'affirmative, et vous verrez ensuite s'afficher un magnifique Rejected, parfaitement normal puisque l'utilisateur rsnapshot sur la machine distante ne peut qu'éxécuter rsync, mysqldump et mysql.

Il ne reste plus qu'à lancer rsnapshot pour vérifier que l'ensemble de la solution est opérationnelle :

$ rsnapshot hourly

Si vous souhaitez avoir un rapport par courrier électronique, il faut ajouter la ligne suivante dans /etc/crontab :

0 */4 * * * root /usr/local/bin/rsnapshot hourly 2>&1 | /root/rsnapshot/scripts/rsnapreport.php | mail
-s"[Rsnapshot report]" monadresse@mondomaine.tld

Il faut également ajouter l'argument --stats à l'option rsync_long_args du fichier de configuration de Rsnapshot.