« Rsync » : différence entre les versions
(Page créée avec « Category:linux ») |
|||
(4 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:linux]] | [[Category:synchronisation]] | ||
''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. | |||
{{info|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 [[:Category:distributions Linux|distributions Linux]]. Sous ''Debian'', on peut l'obtenir via [[:Category:Apt|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 <source lang="bash" inline>[<UTILISATEUR>@]<IP><mode><module></source> 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 <source lang="bash" inline>::</source> et <source lang="bash" inline>:</source> correspondants respectivement à ''rsync'' et ''ssh'' | |||
* '''module''' : correspond au partage ''rsync'' dans le cas d'un mode <source lang="bash" inline>::</source> ou au chemin distant dans le cas de <source lang="bash" inline>:</source> | |||
{{attention|Comme de nombreux outils de transferts, les répertoires ne sont pas géré de la même façon si un <source lang="bash" inline>/</source> a été précisé ou non. Par exemple, un transfert via Rsync du répertoire <source lang="bash" inline>DOSSIER-SOURCE</source> vers <source lang="bash" inline>DOSSIER-DESTINIATION</source> créera ce dernier avec le contenu du premier alors qu'un <source lang="bash" inline>DOSSIER-SOURCE/</source> copiera son contenu dans la destination (ce sera l'équivalent d'un <source lang="bash" inline>cp DOSSIER-SOURCE/* DOSSIER-DESTINATION</source> 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 <syntaxhighlight lang="bash" inline>rrsync</syntaxhighlight> (pour ''restricted rsync'') afin de spécifier celui-ci dans le fichier <syntaxhighlight lang="bash" inline>~/.ssh/authorized_keys</syntaxhighlight>. | |||
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 <syntaxhighlight lang="bash" inline>rsync</syntaxhighlight> pour synchroniser le dossier <syntaxhighlight lang="bash" inline>/toto/tata/</syntaxhighlight>. | |||
'''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. | |||
<syntaxhighlight lang="bash"> | |||
rsync [OPTIONS] <SOURCE> <UTILISATEUR>@<ADRESSE>:/ | |||
</syntaxhighlight> | |||
===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 | |||
</source> | |||
''Note : les [[#Syntaxe|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 [[Strongswan|IPSec]] ou [[Wireguard]]). | |||
vim /etc/rsyncd.secrets | |||
<source lang="bash"> | |||
toto:quenelleépaulée | |||
titi:123456789 | |||
tata:c'estlabase | |||
</source> | |||
Le fichier de configuration devra alors se voir agrémenté de quelques paramètres supplémentaires. Dans la section globale, la directive <source lang="bash" inline>strict modes = false</source> permet de pouvoir lire le fichier de mots passe (sinon une [https://stackoverflow.com/questions/26007928/rsyncd-secrets-file-linux-permission-should-not-be-read-by-group-and-others sécurité] à la con est bogué l'empêche...) ; les paramètres <source lang="bash" inline>auth users</source> et <source lang="bash" inline>secrets file</source> 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 : | |||
<source lang="bash"> | |||
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 | |||
</source> | |||
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 [https://unix.stackexchange.com/questions/111526/how-can-i-rsync-without-prompt-for-password-without-using-public-key-authentica 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 | |||
=Source= | |||
* https://linux.die.net/man/1/rsync |
Dernière version du 27 février 2022 à 23:30
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] <SOURCE> <UTILISATEUR>@<ADRESSE>:/
Transfert via relay SSH
L'usage d'un 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
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