Lorsque l’on veut faire une sauvegarde d’une machine distante avec rSnapshot, on a plusieurs choix :

  • Monter un partage Samba
  • Monter un partage NFS
  • Passer à travers SSH


La dernière solution à bien sûr ma préférence :

  • sécurisé
  • j’ai déja openssh-server d’installé sur les machines à sauvegarder, je n’ai donc rien d’autre à installer.



Au niveau utilisateur j’ai créé  :

  • un utilisateur sur le serveur de sauvegarde (sweetBox) qui lancera rSnapshot : on l’appelera user_rsnapshot
  • un utilisateur sur la/les machines à sauvegarder (swettHome) : on l’appelera user_distant


L’utilisateur user_rsnapshot a un repertoire dont il est propriétaire sous /var/log à des fin de log.


Remarque : cet article appliqué a sudo marche tout aussi bien si vous l’appliquez à rsync directement.



Connexion SSH sans mot de passe


On se basera sur l’article Simplifier les connexions SSH dont je rappelle ici les grandes lignes

  • connexion avec user_rsnapshot
  • génération d’une paire de clé
  • copie de la clé publique généré dans le authorized_key de user_distant
  • connexion à l’ordinateur distant avec user_distant afin d’ajouter l’empreinte de l’ordinateur distant à sauvegarder dans la liste des ordinateurs connus



Configuration de rSnapshot


Création d’un fichier de configuration rsnapshot dans le home de user_rsnapshot, voir pour cela voir Sauvegarde avec rSnapshot.


Dans la section sauvegarde de ce fichier, mettre une ligne de la forme (avec des tabulations) :

backup       user_distant@machine_a_sauvegarder:/repertoire_a_sauvegarder       destination


La syntaxe de la source est la même syntaxe que lors de la copie de fichier via scp, enfin la destination est optionnelle (penser tout de même à mettre la tabulation)



Test


Faire un test en modifiant par exemple votre fichier de configuration pour ne sauvegarder qu’un petit répertoire (le Bureau par exemple), ainsi le test sera plus rapide que si lancez directement la sauvegarde de tous votre home de x Go.


Lancer rSnapshot :

rsnapshot -v -c fichier.conf daily


Normalement tout devrait bien se passer (pas de message d’erreur) et la connexion SSH devrait se faire demander de mot de passe.



Restriction SSH et sauvegarde avec sudo


On va désormais paramétrer la machine à sauvegarder pour n’autoriser la connexion SSH que lors de la sauvegarde et faire en sorte que rsync côté client (c’est à dire la machine sauvegardé) tourne en sudo permettant ainsi la sauvegarde de tous les répertoires voulus sur la machine clientes y compris ceux pour lesquelles l’utilisateur user_distant n’a pas de droits.


Se connecter (physiquement ou en SSH) sur la machine à sauvegarder avec l’utilisateur user_distant.



Script de validation de la commande SSH


Créer un script où vous le souhaitez que l’on nommera (au choix) validate-rsync, y copier ceci :



#!/bin/sh
 
case "$SSH_ORIGINAL_COMMAND" in
 *\&*)
 echo "Rejected"
 ;;
 *\(*)
 echo "Rejected"
 ;;
 *\{*)
 echo "Rejected"
 ;;
 *\;*)
 echo "Rejected"
 ;;
 *\<*)
 echo "Rejected"
 ;;
 *\`*)
 echo "Rejected"
 ;;
 *\|*)
 echo "Rejected"
 ;;
 rsync\ --server*)
 sudo $SSH_ORIGINAL_COMMAND
 ;;
 *)
 echo "Rejected"
 ;;
 esac



Ce script test la variable d’environnement $SSH_ORIGINAL_COMMAND (créée lors de la connexion SSH) et rejette toutes les connexions SSH dont la commande est différente de rsync –server.

La connexion SSH est donc impossible pour les usage autre que la sauvegarde.



Appel du script de validation


Il faut maintenant indiquer a SSH d’appeller ce script lors de la connexion, cela se fait dans authorized_keys.

Nous avons vus dans Simplifier les connexions SSH que nous pouvions grâce à authorized_keys limiter les connexions SSH à certaine adresse IP, nous allons ici rediriger notre connexion SSH vers notre script de validation :

Éditer votre fichier authorized_keys :

vim ~/.ssh/authorized_keys


Et ajouter au début le mot-clé command suivi du chemin vers votre script de validation :


from="192.168.1.222",command="/home/user_distant/bin/validate-rsync" ssh-rsa AAAAB3NzaC1yc2EAAA  ... VJpj9cjzjPTyYcXgGiQ== user_distant@machine_a_sauvegarder 



Exécution en tant que sudo


Pour que votre sauvegarde puisse accéder à tous les répertoire de votre filesystem, il faut que rsync soit lancé en sudo.

Dans le script validate-rsync ci-dessous vous pourrer remarque que lorsque que la commande SSH est accepter, on ne se contente pas de l’exécuter, mais on a précédé la variable d’environnement $SSH_ORIGINAL_COMMAND de sudo


rsync\ --server*)
 sudo $SSH_ORIGINAL_COMMAND
 ;;


Il faut ensuite paramétrer le fichier sudoer pour autoriser votre utilisateur à lancer rsync via sudo sans demander de mot de passe.


Si votre utilisateur user_distant n’est pas déjà autorisé dans sudo (ce qui est certainement le cas si vous venez juste de le créer pour la sauvegarde), il vous faudra vous connecter avec votre utilisateur principal (ou faire un su).

On entre ensuite dans le fichier sudoer via visudo :


sudo visudo



Et ajoutera une ligne du genre :

svc ALL = NOPASSWD: /usr/bin/rsync


Indiquant que l’utilisateur user_distant à le droit d’utiliser sudo sans mot de passe (NOPASSWD) pour la commande rsync et ce quel que soit la machine sur laquelle il est (ALL)


Test


Sur le serveur de sauvegarde , re-lancer rSnapshot comme lors du test précédent :

rsnapshot -v -c fichier.conf daily


Il ne devrait pas y avoir de changement par rapport au test précédent si ce n’est que vous pouvez désormais suavegarde le home ou le bureau d’un uatilisateur autre que l’utisateur user_distant.


On va en plus faire un test pour valider le bridage SSH en saisissant la commande :


ssh user_distant@machine_distante ls


Au lieu de nous donner le contenu d’un répertoire (normalement le home de user_distant), on a :


 Rejected


Nous indiquant que la connexion SSH est interdite pour autre chose de la sauvegarde avec rsync.




Sources :

Le site de référence : http://troy.jdmz.net/rsnapshot/

Modification du précédent pour appliquer le sudo : http://www.pervasive-network.org/SPIP/Backup-incremental-avec-rsnapshot

http://www.ruzee.com/blog/2008/11/using-rsnapshot-for-file-and-database-backups

http://blog.innerewut.de/2005/6/3/follow-up-on-remote-filesystem-snapshots-with-rsnapshot

http://www.maxsworld.org/index.php/how-tos/rsnapshot-backups

http://blog.mageekbox.net/?post/2008/11/07/Mise-en-place-de-sauvegardes-%C3%A0-l-aide-de-rsnapshot

http://blog.innerewut.de/2005/5/25/remote-filesystem-snapshots-with-rsnapshot

http://geekfault.org/2009/05/16/rsnapshot/



Les commentaires sont fermés.