Un coin perdu... : Articles - Sauvegarder...Ou répliquer avec Rsync
Votre connection

Browser : Autre

IP : 38.107.179.228
OS : Système d'exploitation inconnu

Flux

 
Rss Sauvegarder...Ou répliquer avec Rsync
Voici un petit quelque chose qui permet de sauvegarder des répertoires, des fichiers et peut-être même des trucs !

L'idée n'est pas de faire un article super précis mais, plutôt un "aide-mémoire".

Partons du fait que nous sommes évidemment dans un environnement Linux, Ubuntu 7.04 plus précisément, que nous aimons tous tripoter un peu le clavier de temps a autres, et que nous disposons d'une deuxième machine sous le coude....qui parfois fait office de petit serveur Web avec une Ubuntu 6.06 serveur montée dessus.

Le principe est le suivant, je suis sur le PC1 et je souhaite une copie du répertoire WWW (et de son super contenue, mon index.html ! )de mon serveur Web afin de pouvoir faire des choses dessus en local ou dehors...ou sinon pour avoir une sauvegarde régulièrement mise à jours.

Donc je suis sur ma Ubuntu 7.04 (PC1) et je la veux cette sauvegarde et, comme je suis un soupçon courageux, ça serait bien que l'affaire passe par le réseau, ça m'éviterai de bouger !

L'objectif serait donc : je m'assois, je regarde et, c'est fait ! Bon, dans la réalité, j'ai dû fouinasser un peu pour trouver ce que je recherchai, quels outils utiliser, car il y en a pas mal...et c'est finalement Bart qui m'aura donné le déclic, j'aurai pu prendre backup-manager mais, non ça sera Rsync.


Rsync c'est quoi ? et bien il y a une chouette définition ici, en gros, ce qui est bien, c'est que je vais pouvoir sauvegarder mes données de façon incrémentiel.
Biensur, ce n'est pas la seule fonctionnalité de rsync....cette sauvegarde sera synchronisée et sera comme....un mirroir !

Commençons, Rsync est une applications type client/serveur et ca tombe bien puisque nous sommes censés disposé de deux machines !

Plaçons nous sur le serveur et allons y :
Code BASH :
serveur@serveur-web:-$sudo apt-get install rsync


Nickel, ya plus rien a faire !! Bon, je crois que ca serait pas rigolo si ça s'arrêtait la !

Il n'y a rien de plus difficile que de configurer rsync, peut-être aurez vous remarqué qu'il n'y a pas de fichier de configuration dans /etc et c'est normale puisqu'il faut le créer !

C'est dans ce fichier que tous se passe,on y définit des modules, ces modules sont en fait des partages rsync, des répertoires partagés tout simplement, sur lesquels on peut définir des droits etc....


Code BASH :
 serveur@serveur-web:-$sudo vi /etc/rsyncd.conf




Et nous voilà avec un beau fichier tout neuf et tout blanc, nous allons créer un module pour mon répertoire WWW et c'est là que vas intervenir une question de droit, et oui, parce qu'il faut que mon client rsync puisse venir se synchroniser sur le répertoire et son arborescence, heureusement rsync ne nécessite pas de privilèges super-utilisateur si j'ai bien compris la doc et de plus, on vas définir les règles du partage, parce que c'est pas la fête non plus !



Code BASH :
 #Ceci est le fichier de configuration de Rsync
 ##definition de l'utilisateur rsync 
   uid = serveur-web
   gid = serveur-web
   log file = /var/log/rsyncd.log
 
 ##Définition du module WWW (mais qui pourrait être autre chose...)
 #Chemin vers le partage, son nom de partage entre crochets puis le chemin (path)
   [ www ]
   path = /var/www
 
 #Un pti commentaire pour faire plaisir
   comment = mon beau répertoire a pomper
 
 #L'option parle toute seule
   list = true
 
 ##On fixe des règles simple
   read only = true





Bon bah voila pour le fichier de configuration, autant de difficultés c'est assez moche, maintenant, pour le fun et parce que c'est bien, si on donné des claques a notre deamon rsync quand le système se réveil, histoire qu'il sorte du lit en même temps !


Code BASH :
serveur@serveur-web:-$sudo vi /etc/default/rsync


Il faut trouver la ligne ou il y a :


RSYNC_ENABLE =

on y inscrit "true" et on sauvegarde.biensur on lance rsync :
Code BASH :
serveur@serveur-web$sudo /etc/init.d/rsync start



Voila, ça s'était pour la partie serveur, passons au client maintenant, on passe la phase d'installation....et on vas imaginer que cette sauvegarde sera sur un disque monté sur /mnt/sauv.
Sur le client, l'opération est encore plus enfantine, il suffit de se connecter au deamon, si il est réveillé, il répondra en renvoyant la liste des partages.la syntaxe est la suivante:
rsync nom-du-serveur@son-ip::

donc en l'occurrence :
Code BASH :
client@PC1:-$rsync serveur-web@192.168.20.25::


ce qui retourne :

Code BASH :
 
 client@PC1:-$rsync serveur-web@192.168.20.25::
 www              mon beau répertoire a pomper




Et bien c'est deja magnifique, le courant passe ! Donc je peut lancer une synchro alors ! voici la syntaxe :
rsync -option nom-du-serveur::source cible

Ce qui nous donne :
Code BASH :
 client@PC1:-$rsync -azv serveur-web@192.168.20.25::www /mnt/sauf



Explications des options :

* -a : cette option en regroupe plein d'autres, elle permet de conserver les liens comme des liens, de garder les permissions originales et j'en passe.
* -z : permet de compresser les données durant le transfert sur le reseau, les avantages de cette options sont énormes !
* -v : celle-ci rends tous simplement rsync plus bavard.

une fois la synchro finit, voila a peut prés ce qu'il doit y avoir a l'écran :


Code BASH :
 sent 146067 bytes  received 158141 bytes  55310.55 bytes/sec
 total size is 81159522  speedup is 266.79
 client@PC1:-$
 


On est presque au bout, on sait synchroniser nos répertoire via le reseau, pour le voir, je liste le contenue du mon /mnt/sauv :

Code BASH :
  client@PC1:-$ls /mnt/sauv
  index.html
 


Maintenant ce qui serait encore mieux, c'est de sécuriser ces transferts, ces connections entre mon serveur et mon poste de travail qui se font au grés du vent ! mais comment ça ! le mieux est de faire passer tous ca par du ssh !

A noter qu'il est aussi possible d'utiliser le module "''secret''" de rsync pour une authentification en plus......

C'est très simple a réaliser comme opération, il faut au préalable connaître les bases de ssh et pouvoir se connecter au serveur sans mot de passe, pour cela, il y a un petit tuto sur le blog de B@rtounet qui explique la manip a suivre....

Une fois cette condition remplie, voici la marche a suivre, a savoir que l'on peut dédier l'utilisation de rsync a un utilisateur particulier, je dis cela juste au cas ou certains utilise la méthode ssh sans mot de passe régulièrement car nous allons réserver cet accès libre a une et une seule commande et pour un utilisateur particulier et ce, pour des raisons évidente de sécurité.

Nous sommes toujours avec nos utilisateurs client@PC1 et serveur@serveur-web et nous allons nous placer en premier sur la machine cliente => PC1.Disons que client ne vas se servir de cet accès ssh que pour rsync, il faut donc générer une clé publique dédiée :


Code BASH :
 client@PC1:-$sudo ssh-keygen -t rsa -b 1024
 Generating public/private rsa key pair.
 Enter file in which to save the key (/client/.ssh/id_rsa): /home/client/.ssh/id_rsa
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:
 Your identification has been saved in /client/.ssh/id_rsa.
 Your public key has been saved in /client/.ssh/id_rsa.pub.
 The key fingerprint is:61:90:16:97:ea:e2:59:10:94:f0:fd:a2:d4:53:9e:97 clientPC1


Limitons les accès a cette clé :


Code BASH :
 client@PC1:-$sudo chmod 400 .ssh/id_rsa


Maintenant, définissons les règles d'utilisation de cette clé, pour ce faire il faut éditer (ou le créer) le fichier ''config'' qui se trouve dans .ssh/config :


Code BASH :
 client@PC1:-$sudo vi .ssh/config



voici ce que l'on doit placer dans celui ci :

Code BASH :
 
 Host 192.168.20.25
 User serveur
 Compression yes
 Protocol 2
 RSAAuthentication yes
 StrictHostKeyChecking no
 ForwardAgent yes
 ForwardX11 yes
 IdentityFile /client/.ssh/id_rsa




Bien sur l'adresse ip est propre a chacun tous comme le user, cela vas de soit !
Copions cette clé sur le serveur afin qu'il nous connaisse un peu mieux et puisque nous avons ssh, scp s'impose !

Code BASH :
 
 client@PC1:-$sudo scp .ssh/id_rsa.pub serveur@192.168.20.25:/home/serveur/.ssh/id_rsa.pub



Une fois fait, allons du coté du serveur, il faut copier la clé que l'on vient d'envoyer dans la liste des utilisateurs autorisés :


Code BASH :
 serveur@serveur-web:-$sudo cat .ssh/id_rsa.pub >> .ssh/authorized_keys



A partir de la on peut se logger en ssh depuis client@PC1 vers serveur@serveur-web en ssh sans mot de passe.C'est maintenant que nous allons réserver l'accès a rsync en le précisant en premier lieu dans la clé :

Code BASH :
 
 serveur@serveur-web:-$sudo vi .ssh/id_rsa.pub
 
 from="@192.168.10.10",command="/home/clien/rsync_command"ssh-rsa-AAAAB3NzaC1yc2EAAAABIwAAAQEAteWJNd1BieO78d3GG82G1uG55H4c75DwJznmRPi0pJ922Zx000QXJwZ7fCSVXcRXKJ7CJj9e4xi3DDmC7cboE9v07pOGH4otd6A5vP
 uYNMiYKoDEurrvi8Q5hXmzc2gdZesrNIS5tMcD1FuYkoqk7lV59dvwK0oQT9t/bhMLHaduKFG21LGc1q/mnnJT6Si4XoAaC4sQ58C3/Y76T7EA94HFg35IgfW9ELqvmwjPlLyU3YzfNgz/Q
 dD3ZmZyYfxq26FVkeGFhfAsbXwFN8qtojuPtmLXW9vbOHwRiW8zU9KcIcs7AdXnrp/AYpJHX9sPFNDHLiG7LXTn+0NtVIi2R3/yBouWMbZqH+FfgV6dpdquKwCD+T+ijtOKVvvEIUlaAy
 QbaAoDxx1pZgnlcqi4Y/VU4bseHY55EPFpyLO4S40yB5TvsYuZEYXHjuw+e1+vG26yriFCLlWBQhA6+3QacfttJxErGNeB0bl1XLQgrblJ3jcnJBRyze9s8iRrzCgAAAEBANnApVKbjJ2GC9
 5F9qoy1VHBHXl04bfvdHIDWBYeytPKzYipt8ux/+s5B076w1wufTMlcdnFtccB7ysfZZQWZz+FsHiYC4UKHAI06xH0SLtvd7OSLItj3Jad/XsmhMkLKZPR8fR4qsZ6hC0QLyx57ZG5z0ugiJ
 ZBcwhPqFI8ouf0J4ZPvJdymZjmm76bjhC0WeKRZejIpMOx1b1B1dTjIYGAZGsZfZt18Gtc8UBkA4Iq9Ut0pi0iUWyE2gBpLowLkRB10HTpvmRP+tqgOHEB865aJvMcxm0IzWRDCPZXD
 hO2PIY20hcWAO8cv5+1WDag2t0QyrYePmXkC/o9gsgharY=client@PC1


A partir d'ici on peut essayer de se connecter, ca ne doit pas passer (pensez a redémarrer les deamons avant...) car nous venons de spécifier l'usage de cette clé, et cet usage est réservé pour la commande rsync ! D'ailleurs le fichier rsync_command et déjà dans le /home de client, voici ce qu'on y trouve :


Code BASH :
  case "$SSH_ORIGINAL_COMMAND" in
          *\&*)
                  echo "Rejected"
                  ;;
          *\;*)
                  echo "Rejected"
                  ;;
          rsync\ --server*)
                  $SSH_ORIGINAL_COMMAND
                  ;;
          *)
                  echo "Rejected"
                  ;;
  esac
 



Et voila, désormais on dispose d'un accès limiter a un seul utilisateur et a une seul machine, le tout en profitant d'une connexion chiffrée ssh qui de plus utilise un échange de clé pour l'authentification, on commence a être un peu mieux niveau sécurité qu'au départ je pense.

pour le tester, voici la syntaxe a utiliser :


Code BASH :
 user@host:-$ rsync -options -e ssh nom-du-serveur@son-ip::source cible


ce qui pour nous est :


Code BASH :
 client@PC1:-$rsync -azv -e ssh serveur-web@192.168.20.25::web /mnt/sauv
 /var/www/index.html
 sent 146067 bytes  received 158141 bytes  40561.07 bytes/sec
 total size is 81159480  speedup is 266.79
 client@PC1:-$



Et voila, mon répertoire www est sauvegarder sur ma machine, cette sauvegarde transit par le réseau de manière chiffrée et si je l'automatise avec cron, elle sera a jours aussi régulièrement que je le souhaite ! c'est génial, Maintenant, si on peaufiné un peu la manière dont on vas le sauvegarder ce répertoire Web ? si en plus de ça on pouvait essayer de pousser plus loin avec rsync et pourquoi pas, répliquer un site dynamique ! ça pourrait être fun !

Bon, j'ai encore quelques test a faire avant publier les manips dans ce billet !

Voici les sources qui m'ont permit de rédiger cette article :

  • [url=http://www.info16.fr|http://www.info16.fr/blog/dotclear/index.php?2007/08/08/17-se-connecter-en-ssh-sans-mot-de-passe]Le blog de B@rtounet pour le ssh sans mot de passe [/url]


  • [url=http://www.lalitte.com/rsync.html|http://www.lalitte.com/rsync.html]Le site de Lafitte pour un exemple de marche a suivre[/url]


  • [url=http://rsync.samba.org|http://rsync.samba.org/ftp/rsync/rsyncd.conf.html]Et bien évidement le man rsyncd.conf [/url]


  • [url=http://www.journaldunet.com|http://www.journaldunet.com/developpeur/tutoriel/out/060104-rsync-sauvegarde-configuration.shtml]Et puis ce petit article sur JDN aussi[/url]
 
 
Note: Aucune note
(0 note)
Ecrit par: le furtif, Le: 12/10/08


Boosté par PHPBoost 3.0 | Thème Transpablue par Kits Graphiques