====== Activité : synchronisation distante de fichiers ====== ===== Présentation ===== Les solutions de mise en oeuvre de **redondance de services** nécessitent la **duplication de données** sur des serveurs distincts éventuellement éloignés sur des sites distants. Certaines solutions de sauvegarde en réseau utilisent par ailleurs des outils de duplication de données pour réaliser des **sauvegardes incrémentales** d'informations ou pour diffuser sur plusieurs machines le contenu d’un répertoire de référence. Vous allez mettre en oeuvre le logiciel de synchronisation de fichiers en ligne de commande **Rsync**. Celui-ci : * fonctionne de manière **unidirectionnelle** c'est à dire qu'il copie les fichiers d’un dossier vers un autre, * **synchronise** le répertoire de destination en fonction du dossier source en faisant une comparaison simple des fichiers entre source et destination, * ne prend en compte que les **modifications** de la source de données. Rsync permet alors : * de réaliser des **sauvegardes incrémentale**s de données, * ou pour **diffuser** sur plusieurs machines le contenu d’un répertoire de référence. Vous allez mettre en place une **synchronisation de données** : * entre deux **deux dossiers** situés sur **deux serveurs** Linux Debian différents, * entre un **dossier** situé sur un **serveur Linux** et un **dossier** situé sur **serveur Windows**. Pour des raisons de **sécurité**, l'accès à distance en SSH avec le compte **root** est **interdit**. Pour le permettre, le fichier **/etc/ssh/sshd_config** doit être modifié : Sous la ligne suivante : # PermitRootLogin prohibit-password Ajoutez la ligne par (sans le #): PermitRootLogin yes Puis redémarrez le service SSH : # service ssh restart ===== Première maquette à réaliser ===== * utiliser **deux serveurs** Linux Debian. * **synchroniser** de manière **unidirectionnelle**, dans le sens Serveur1 vers Serveur2, d'un dossier situé dans le dossier du compte root de chaque serveur, * créer un script permettant de faire cette synchronisation toutes les 5 minutes et utilisant une **authentification par clé SSH**. ==== Installer Rsync ==== # apt update # apt install rsync ==== Découvrir Rsync ==== **Syntaxe de base** : rsync [option] /chemin/vers/source /chemin/vers/destination **Copie distante en utilisant SSH** : rsync [option] -rsh=ssh /chemin/vers/source [user]@[host]:/chemin/vers/destination Pour transférer des données vers un serveur distant, le serveur **OpenSSH** doit être **installé** : # apt install openssh-server ==== Tableau des options ==== ^OPTIONS^ACTION^ |-r |visite récursive des répertoires| |-l |copie les liens symboliques comme liens symboliques| |-p |préserve les permissions| |-t |préserve les dates| |-g |préserve le groupe| |-o |tous les fichiers des *-from/filtres sont séparés par 0| |-D |préserve les périphériques (root uniquement)| |-a |mode archivage; identique à -rlptgoD (pas -H)| |-v |De nombreuses informations sont affichées lors du transfert.| |-z |Compresse le fichier pour un meilleur transfert par le reseau.| |–delete |ATTENTION ! Si le fichier (ou son contenu) n'existe plus dans “source”, il sera supprimé dans “destination”.| ==== Exemples ==== * Copier intégralement le fichier ou le répertoire source et son contenu vers destination avec compression des données rsync -avz /root/dossier /root/sauvdossier * Copier intégralement le fichier ou le répertoire source et son contenu vers destination sur un serveur distant avec compression des données rsync -avz -rsh=ssh /root/dossier [root]@[@ip]:/root/sauvdossier Il sera nécessaire d'indiquer le mot de passe du compte Par défaut le compte root ne peut se connecter à distance au szerveur en SSH. POur changer cela, il faut modifier le fichier /etc/sshd/sshd_config ==== Authentification par clé SSH ==== Afin de ne pas avoir à fournir le** mot de passe** à chaque **exécution** de rsync, le serveur source va s'authentifier sur le serveur destination avec une clé SSH. Il faut définir le serveur **source** comme un **client SSH de confiance**. Pour cela : * créer un couple de clefs publique et privée sans mot de passe, * ajouter cette toute récente clef publique sur le serveur de destination. # ssh-keygen -t rsa # ssh-copy-id -i /root/.ssh/id_rsa.pub btssio@AdresseIPserveurDestination Vérifiez qu vous pouvez vous connecter sans mot de passe : #ssh btssio@AdresseIPserveurDestination Tutoriel : [[si7:a10ssh|Configurer une authentification avec un couple de clés privée/publique SSH]] ==== Script de sauvegarde ==== Pour automatiser la sauvegarde, vous allez créer un script de sauvegarde simple **/root/script/rsync.sh** contenant : rsync -avz -rsh=ssh /root/dossier [btssio]@[@ip]:/home/btssio/sauvdossier ==== Sauvegardes automatisées depuis le cron du serveur ==== Il est **conseillé** d'effectuer les sauvegardes à des moments de la journée où les serveurs sont **peu sollicités**. Pour cela, il faut inscrire des appels à la commande de sauvegarde dans le **cron** de l'utilisateur **root** du serveur. # crontab -e 15 * * * * /root/scripts/rsync.sh ===== Deuxième maquette à réaliser ===== * utiliser **un de vos serveurs Linux Debian** et le serveur **DC1-0870019Y**. * **synchroniser** de manière **unidirectionnelle**, dans le sens Serveur Debian vers le serveur DC1-0870019Y, d'un dossier situé dans le dossier du compte root du serveur Debian dans votre dossier personnel du serveur Windows, * créer un script permettant de faire cette synchronisation toutes les 5 minutes et utilisant une **authentification par clé SSH**. ==== Configuration du serveur Linux ==== Les serveurs Microsoft Windows utilisent le **protocole SMB (Server Message Block)** pour **partager** des fichiers et des imprimantes. Ce protocole a été créé à l'origine par IBM, puis repris par Microsoft. Ce protocole a ensuite été renommé en **protocole CIFS (Common Internet FileSystem)**. Lors de la sortie de Windows Vista, Microsoft a repris la dénomination SMB pour sa nouvelle version SMB 2. **SMB et CIFS** désignent donc, pour l'essentiel, le même protocole. Pour accéder à ces serveurs Windows, il faut utiliser un **client SMB**. Le projet Samba consiste à fournir les paquets logiciels pour les distributions Linux afin de : * pouvoir créer un **serveur SMB/CIFS**, * disposer d'un **client SMB/CIFS**. === Installation d'un client SMB/CIFS === # apt install smbclient === lister les partages d'un serveur Windows === # smbclient -L nomserveur -U login_Windows Il vous demandera de taper le **mot de passe** pour le domaine Windows === Accéder à un partage et aux fichiers === Exemple pour télécharger un fichier situé dans le dossier de la classe : * serveur : DC1-serveur * partage : B2classe # smbclient //DC1-serveur/B2classe -U login_Windows smb: \> ls smb: \> cd répertoire_distant smb: \> get fichier.txt smb: \> quit Le fichier téléchargé est ensuite **disponible** dans le dossier root.\\ La commande **put** permet de déposer un fichier **présent** dans le dossier root sur le **serveur**; === Monter un partage ponctuel sur le client Debian === Il est possible de monter sur un client Linux Debian, un partage situé sur un serveur Windows en installant le paquet smbfs : # apt install cifs-utils * **Création** du point de montage du dossier **B2classe** dans l'arborescence du client Debian en **modification** : # mkdir /mnt/B2classe * montage du dossier partagé B2classe en mise à jour # mount -t cifs -o user=login_Windows,password=password,rw //DC1-serveur/B2classe /mnt/B2classe Vous pouvez alors, depuis votre client Debian, parcourir le partage situé sur le serveur Windows, en lecture et en écriture. Pour démonter le montage : # umount /mnt/B2classe === Monter un partage permanent sur le client Debian === Pour rendre ce montage permanent; il faut mettre à jour le fichier **/etc/fstab** de montage des partitions. **Attention** : la modification incorrecte du fichier **/etc/fstab** rendra vos partitions inutilisables ! * copie de sauvegarde du fichier **/etc/fstab** # sudo cp /etc/fstab /etc/fstab_sauvegarde * ajout en fin de fichier d'une ligne de ce type //DC1-serveur/B2classe /mnt/B2classe/ cifs username=login_Windows,password=password,uid=root,gid=root,fmask=777,dmask=777 0 0 Explications : * %%//DC1-serveur/B2classe%% : nom du dossier partagé auquel vous voulez accéder. * %%/mnt/B2classe/%% : point de montage sur le client Debian (Le dossier doit exister). * username : identifiant utilisateur Windows. * password : mot de passe de l'identifiant utilisateur Windows. * uid et gid : nom d’utilisateur Linux et nom du groupe Linux. * droits fmask (fichiers) et dmask (dossiers) à 777 pour permettre d’accéder à tous les fichiers du disque réseau. * Redémarrez votre client Debian pour vérifier que le montage est bien automatiquement créé. **A faire** : modifiez votre script pour avoir une sauvegarde de votre dossier Situé sur le client Debian, sur le serveur Windows. ===== Ressources ===== * http://debian-facile.org/doc:reseau:rsync * https://wiki.debian.org/fr/RsyncSnapshots * http://www.mathrice.org/rencontres/mars.2007/presentations/rsync-unison.pdf