Rsync
Rsync est un outil de synchronisation de fichiers unidirectionnel (à l'inverse de Unison) ainsi qu'un protocole à part entière (non chiffré) écoutant sur le port 873/TCP. Il comporte un grand nombre d'options et peut être tunnélisé dans SSH afin de chiffrer son flux.
INFORMATION
On entend par unidirectionnel le fait que le delta entre deux fichiers soit toujours comparé de la source à la destination et non l'inverse (ce sera toujours la destination qui se ferra écraser - pas de notion de date).Installation
Rsync est un outil développé en Python disponible dans la plupart des distributions Linux. Sous Debian, on peut l'obtenir via Apt.
apt install rsync
Syntaxe
Il est possible d'ajouter un ensemble de paramètres à l'outil afin de répondre à des besoins spécifiques. La commande suit les principes standard de syntaxe pour une commande UNIX, soit :
rsync [PARAMÈTRES] SOURCE DESTINATION
Lorsque une des opérandes source et/ou destination est distante, il faudra utiliser pour celle-ci une syntaxe de type [<UTILISATEUR>@]<IP><mode><module>
où chaque éléments correspondent à :
- UTILISATEUR : nom de l'utilisateur disant (facultatif, l'utilisateur courant sera alors utilisé)
- IP : adresse de la machine distante
- mode : détermine l'usage du protocole de transfert avec les valeurs
::
et:
correspondants respectivement à rsync et ssh - module : correspond au partage rsync dans le cas d'un mode
::
ou au chemin distant dans le cas de:
ATTENTION
Comme de nombreux outils de transferts, les répertoires ne sont pas géré de la même façon si un/
a été précisé ou non. Par exemple, un transfert via Rsync du répertoire DOSSIER-SOURCE
vers DOSSIER-DESTINIATION
créera ce dernier avec le contenu du premier alors qu'un DOSSIER-SOURCE/
copiera son contenu dans la destination (ce sera l'équivalent d'un cp DOSSIER-SOURCE/* DOSSIER-DESTINATION
en somme).Utilisation
Paramètres
Maintient des permissions sources
rsync -a SOURCE DESTINATION
Maintient des permissions de destination
rsync -a -A --no-perms --no-owner --no-group SOURCE DESTINATION
Transfert via SSH
rsync -a SOURCE utilisateur@IP:DESTINATION
Sécurisation côté destination
Sur l'hôte de destination, il est possible de configurer la cible pour cet utilisateur. Nous utilisons la commande rrsync
(pour restricted rsync) afin de spécifier celui-ci dans le fichier ~/.ssh/authorized_keys
.
command="rrsync /toto/tata/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-ed25519 clé_publique
Ici, cette utilisateur aura seulement le droit d’exécuter un rsync
pour synchroniser le dossier /toto/tata/
.
Sur l'hôte source, le chemin précisé devient alors la nouvelle racine de l'échange. Dans l'exemple si dessous, le client utilisera le chemin de destination de la commande suivante.
rsync [OPTIONS]
<UTILISATEUR>@<ADRESSE>:/
===Transfert via relay SSH===
L'usage d'un [[Openssh#Relai_SSH|relay SSH]] est utile si la machine est inaccessible directement (''NAT'', pare-feux, clé ''SSH''...).
rsync -a -e "ssh -J utilisateur@IPRELAI:PORT" SOURCE utilisateur@IP/:DESTINATION
===Compression===
rsync -z SOURCE DESTINATION
===Verbosité===
rsync -v --progress SOURCE DESTINATION
===Statistiques===
rsync --stats SOURCE DESTINATION
==Usage fréquent==
Voici la commande que j'utilise souvent pour transférer des fichiers dans mon réseau local via ''rsync/ssh''.
rsync -av --progress SOURCE utilisateur@IP/:DESTINATION
=Rsyncd=
En dehors de son usage courant via ''SSH'', ''Rsync'' peut être utilisé avec le protocole éponyme en mode serveur et client. Ceci est utilisé notamment lors de la synchronisation d'un dépôt ''Debian'' via [[ftpsync]]. Du fait de la transmission de donnée en clair, il n'est pas recommandé de l'utiliser pour autre chose que des données publiques qui verront, en amont, leur intégrité vérifié par un outil comme ''GPG''.
==Partie serveur==
===Mise en œuvre===
Activer le démon ''Rsync''
sed -i 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync
Configurer le démon. Dans l'exemple, j'attribue l'utilisateur ''ftpsync'' ainsi que des partages adaptés pour coller à la documentation idoine. Modifiez selon vos besoins.
vim /etc/rsyncd.conf
<source lang="bash">
uid = ftpsync
gid = ftpsync
use chroot = yes
syslog facility = local5
[debian]
path = /var/www/dépôts/debian
comment = Dépôt debian
read only = true
[debian-security]
path = /var/www/dépôts/debian-security
comment = Dépôt debian-security
read only = true
Note : les modules du mode rsync sont définis entre crochet et correspondent aux partages accessibles par les clients.
Démarrer le service
systemctl start rsync.service
Restriction d'accès
Il est possible de limiter l'accès par un couple identifiant/mot de passe. Gardez toutefois à l'esprit que les informations circules en clair (bien que le mot de passe soit haché). Réservez ces méthodes dans un réseau de confiance ou au travers d'un VPN (comme IPSec ou Wireguard).
vim /etc/rsyncd.secrets
toto:quenelleépaulée
titi:123456789
tata:c'estlabase
Le fichier de configuration devra alors se voir agrémenté de quelques paramètres supplémentaires. Dans la section globale, la directive strict modes = false
permet de pouvoir lire le fichier de mots passe (sinon une sécurité à la con est bogué l'empêche...) ; les paramètres auth users
et secrets file
des modules permettent respectivement d'indiquer les utilisateurs authorisés à se connecter au module ainsi que l'emplacement du fichier des utilisateurs.
Voici le résultat :
uid = ftpsync
gid = ftpsync
use chroot = yes
syslog facility = local5
strict modes = false
[debian]
path = /var/www/dépôts/debian
comment = Synchro du répertoire share
read only = true
auth users = toto,titi,tata
secrets file = /etc/rsyncd.secrets
[debian-security]
path = /var/www/dépôts/debian-security
comment = Synchro du répertoire share
read only = true
auth users = toto,titi,tata
secrets file = /etc/rsyncd.secrets
Redémarrer le service
systemctl restart rsync.service
Partie cliente
Le client peut récupérer les fichiers du partage via la commande suivante (les paramètres sont bien sûr facultatifs) :
rsync -av --progress IP:/debian-security /tmp/
Si vous avez définit une identification, vous pouvez utiliser la syntaxe suivante :
rsync -av --progress titi@<IP>::debian-security /tmp/
Le mot de passe vous sera demandé via un prompt dédié. Une variable d'environnement est également définiçable afin de le renseigner automatiquement sans aucune forme d'intéraction (pratique pour effectuer des transferts automatisés via Cron) :
RSYNC_PASSWORD=123456789 rsync -av --progress titi@<IP>::debian-security /tmp/
Sources de la section
- https://www.man7.org/linux/man-pages/man1/rsync.1.html
- https://doc.ubuntu-fr.org/tutoriel/serveur_de_synchronisation_avec_rsync
- https://www1.zonewebmaster.eu/serveur-debian-securite/installer-rsync-serveur-synchronisation