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 :
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 :
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 :
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 :
Il faut trouver la ligne ou il y a :
RSYNC_ENABLE =
on y inscrit "true" et on sauvegarde.biensur on lance rsync :
Code BASH :
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 :
ce qui retourne :
Code BASH :
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 :
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 :
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 :
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 :
Limitons les accès a cette clé :
Code BASH :
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 :
voici ce que l'on doit placer dans celui ci :
Code BASH :
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 :
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 :
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 :
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 :
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 :
ce qui pour nous est :
Code BASH :
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 :
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]
Ecrit par: le furtif, Le: 12/10/08




