rsync : Synchronisation distante de fichiers

Présentation

rsync (remote synchronization) est un logiciel libre de synchronisation de fichiers, distribué sous GNU GPL. Notez que l'on peut aussi s'en servir localement entre 2 systemes de fichiers.

Dans chacun des exemples ici on peut voir l'option --delete. Celle ci permet d'effacer sur la machine de destination tout fichier absent du répertoire source. Cette option est totalement à proscrire si l'utilisation du rsync est faite pour créer un jeu de sauvegarde incrémentielle.

Notations:

Dans cet article, nous appellerons :

  • Machine source : Celle qui contient les fichiers source à copier.
  • Machine de destination : Celle sur laquelle les fichiers doivent être copiés.

Appel depuis la machine destinataire des fichiers

rsync -auvve ssh --delete root@machine_source:/chemin/racine/des/fichiers/a/copier/ /chemin/de/destination --stats > /tmp/rsync.log 2>&1
  • -a: Mode archive. Ce qui implique les options suivantes:
    • -r: Récussive.
    • -l: Copie tels quels les liens symboliques.
    • -p: Préserve les permissions.
    • -t: Préserve les dates.
    • -g: Préserve les groupes.
    • -o: Préserve le propriétaire(root)
    • -D: Préserve les périphériques.
  • -u: Update. Ne transfert que les fichiers plus récents, ou si la taille a changé.
  • --delete: Efface sur la cible les fichiers qui ne sont plus présents dans la source.
  • -e [shell]: Ici, on choisit SSH.

Ce cas possède une limitation si on a sécurisé le service ssh pour empêcher les connexions directes avec le super-utilisateur root.

Ou encore, un manque de chance, le propriétaire des fichiers à synchroniser n'a pas de mot de pase associé, le compte a été créé automatiquement à l'installation de l'application.

- s'il n'est pas en nologin, il est possible d'utiliser le procédé ci-dessus en ajoutant une négociation à l'aide de clé SSH.

- Implémenter le service rsyncd sur la machine source comme ci dessous permet de s'afranchir de ceci.

 

Jolies options smiley

  • --stats
  • --progress

 

Methode avec un serveur rsync

Nous allons implémenter sur la machine source un serveur rsync.

Le travail est déjà un peu maché. Ce service est géré par le daemon xinetd. Le fichier de configuration pour rsync existe normalement déjà.

Activation de rsyncd par xinetd

fichier : /etc/xinetd.d/rsync

Passer l'option disable à "no", ou commenter la ligne.

# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable = no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

Prise en compte de la nouvelle configuration:

pkill -HUP xinetd
Fichier de configuration du service

Editer ou créer le fichier : /etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no

read only = yes
log file = /var/log/rsyncd.log

[toto]
        uid = mailsrv
        gid = mail
        path = /chemin/racine/des/fichiers/a/copier/
        hosts allow = machine_destination.domaine

Dans cet exemple, il n'y a qu'une section "toto" mais il est possible bien sur d'en créer plusieures pour des emplacements de fichiers et des droits différents.

Lancement à partir de la machine de destination.
 rsync -avH --delete rsync://machine_source/toto/ /emplacement/de/destination 2>&1|tee /var/log/rsync1.log