Lsyncd est un outil simple et léger qui vous permet de mettre en miroir votre répertoire local vers un autre répertoire sur le serveur distant. Il fonctionne en surveillant en permanence le répertoire spécifié pour les modifications toutes les quelques secondes et si des modifications sont apportées, elles sont synchronisées avec le serveur distant. Cet outil est très utile pour synchroniser les données d'une zone sécurisée vers une zone non sécurisée.
Dans ce tutoriel, nous allons vous montrer comment installer et utiliser Lsyncd pour synchroniser les répertoires locaux et les répertoires distants.
Prérequis
- Un serveur exécutant Ubuntu 20.04.
- Un mot de passe root est configuré sur votre serveur.
Mise en route
Avant de commencer, c'est une bonne idée de mettre à jour le package de votre système vers la dernière version. Vous pouvez les mettre à jour à l'aide de la commande suivante :
apt-get update -y
apt-get upgrade -y
Une fois tous les packages mis à jour, redémarrez votre système pour appliquer les modifications.
Installer Lsyncd
Par défaut, le package Lsyncd est disponible dans la plupart des systèmes d'exploitation Linux. Vous pouvez l'installer en exécutant simplement la commande suivante :
apt-get install lsyncd -y
Une fois Lsyncd installé, vous pouvez vérifier la version installée de Lsyncd avec la commande suivante :
lsyncd --version
Vous devriez obtenir le résultat suivant :
Version: 2.2.3
Configurer Lsyncd pour synchroniser les répertoires locaux
Dans cette section, nous allons configurer Lsyncd pour synchroniser le répertoire /etc/ avec le répertoire /mnt/ sur le système local.
Commencez par créer un répertoire pour Lsyncd avec la commande suivante :
mkdir /etc/lsyncd
Ensuite, créez un nouveau fichier de configuration Lsyncd et définissez les répertoires source et destination que vous souhaitez synchroniser.
nano /etc/lsyncd/lsyncd.conf.lua
Ajoutez les lignes suivantes :
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 20, nodaemon = false } sync { default.rsync, source = "/etc/", target = "/mnt" }
Enregistrez et fermez le fichier lorsque vous avez terminé.
systemctl start lsyncd
systemctl enable lsyncd
Vous pouvez également vérifier l'état du service Lsyncd avec la commande suivante :
systemctl status lsyncd
Vous devriez voir le résultat suivant :
? lsyncd.service - LSB: lsyncd daemon init script Loaded: loaded (/etc/init.d/lsyncd; generated) Active: active (running) since Fri 2020-05-01 03:31:20 UTC; 9s ago Docs: man:systemd-sysv-generator(8) Process: 36946 ExecStart=/etc/init.d/lsyncd start (code=exited, status=0/SUCCESS) Tasks: 2 (limit: 4620) Memory: 12.5M CGroup: /system.slice/lsyncd.service ??36921 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua ??36952 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua May 01 03:31:20 ubuntu20 systemd[1]: lsyncd.service: Succeeded. May 01 03:31:20 ubuntu20 systemd[1]: Stopped LSB: lsyncd daemon init script. May 01 03:31:20 ubuntu20 systemd[1]: Starting LSB: lsyncd daemon init script... May 01 03:31:20 ubuntu20 lsyncd[36946]: * Starting synchronization daemon lsyncd May 01 03:31:20 ubuntu20 lsyncd[36951]: 03:31:20 Normal: --- Startup, daemonizing --- May 01 03:31:20 ubuntu20 lsyncd[36946]: ...done. May 01 03:31:20 ubuntu20 systemd[1]: Started LSB: lsyncd daemon init script.
Vous pouvez consulter le fichier journal Lsyncd pour plus de détails, comme indiqué ci-dessous :
tail -f /var/log/lsyncd/lsyncd.log
Vous devriez voir le résultat suivant :
/lsyncd/lsyncd.conf.lua Fri May 1 03:30:57 2020 Normal: Finished a list after exitcode: 0 Fri May 1 03:31:20 2020 Normal: --- Startup, daemonizing --- Fri May 1 03:31:20 2020 Normal: recursive startup rsync: /etc/ -> /mnt/ Fri May 1 03:31:20 2020 Normal: Startup of /etc/ -> /mnt/ finished.
Vous pouvez également vérifier l'état de la synchronisation avec la commande suivante :
tail -f /var/log/lsyncd/lsyncd.status
Vous devriez pouvoir voir les changements dans le répertoire /mnt avec la commande suivante :
ls /mnt/
Vous devriez voir que tous les fichiers et répertoires du répertoire /etc sont ajoutés au répertoire /mnt :
acpi dconf hosts logrotate.conf newt rc2.d subuid- adduser.conf debconf.conf hosts.allow logrotate.d nginx rc3.d sudoers alternatives debian_version hosts.deny lsb-release nsswitch.conf rc4.d sudoers.d apache2 default init lsyncd ntp.conf rc5.d sysctl.conf apparmor deluser.conf init.d ltrace.conf openal rc6.d sysctl.d apparmor.d depmod.d initramfs-tools lvm opt rcS.d systemd apport dhcp inputrc machine-id os-release resolv.conf terminfo apt dnsmasq.d insserv.conf.d magic overlayroot.conf rmt timezone at.deny docker iproute2 magic.mime PackageKit rpc tmpfiles.d bash.bashrc dpkg iscsi mailcap pam.conf rsyslog.conf ubuntu-advantage bash_completion e2scrub.conf issue mailcap.order pam.d rsyslog.d ucf.conf bash_completion.d environment issue.net manpath.config passwd screenrc udev bindresvport.blacklist ethertypes kernel mdadm passwd- securetty ufw binfmt.d fonts kernel-img.conf mime.types perl security update-manager byobu fstab landscape mke2fs.conf php selinux update-motd.d ca-certificates fuse.conf ldap modprobe.d pki sensors3.conf update-notifier ca-certificates.conf fwupd ld.so.cache modules pm sensors.d vdpau_wrapper.cfg calendar gai.conf ld.so.conf modules-load.d polkit-1 services vim console-setup groff ld.so.conf.d mtab pollinate shadow vmware-tools cron.d group legal multipath popularity-contest.conf shadow- vtrgb cron.daily group- letsencrypt multipath.conf profile shells vulkan cron.hourly grub.d libaudit.conf mysql profile.d skel wgetrc cron.monthly gshadow libnl-3 nanorc protocols sos.conf X11 crontab gshadow- locale.alias netplan pulse ssh xattr.conf cron.weekly gss locale.gen network python3 ssl xdg cryptsetup-initramfs hdparm.conf localtime networkd-dispatcher python3.8 subgid zsh_command_not_found crypttab host.conf logcheck NetworkManager rc0.d subgid- dbus-1 hostname login.defs networks rc1.d subuid
Configurer Lsyncd pour synchroniser les répertoires distants
Dans cette section, nous allons configurer Lsyncd pour synchroniser le répertoire /etc/ sur le système local avec le répertoire /opt/ sur le système distant.
Avant de commencer, vous devrez configurer l'authentification basée sur une clé SSH entre le système local et le serveur distant afin que le système local puisse se connecter au serveur distant sans mot de passe.
Sur le système local, exécutez la commande suivante pour générer une clé publique et privée :
ssh-keygen -t rsa
Vous devriez voir le résultat suivant :
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:c7fhjjhAamFjlk6OkKPhsphMnTZQFutWbr5FnQKSJjE [email protected] The key's randomart image is: +---[RSA 3072]----+ | E .. | | ooo | | oo= + | |=.+ % o . . | |[email protected] oSo. o | |ooo=B o .o o o | |=o.... o o | |+. o .. o | | . ... . | +----[SHA256]-----+
La commande ci-dessus générera une clé privée et publique dans le répertoire ~/.ssh.
Ensuite, vous devrez copier la clé publique sur le serveur distant. Vous pouvez le copier avec la commande suivante :
ssh-copy-id [email protected]
Il vous sera demandé de fournir le mot de passe de l'utilisateur root distant comme indiqué ci-dessous :
Mot de passe de[email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added.
Une fois l'utilisateur authentifié, la clé publique sera ajoutée au fichier de clés autorisées de l'utilisateur distant et la connexion sera fermée.
Maintenant, vous devriez pouvoir vous connecter au serveur distant sans entrer de mot de passe.
Pour le tester, essayez simplement de vous connecter à votre serveur distant via SSH :
ssh [email protected]
Si tout s'est bien passé, vous serez immédiatement connecté.
Ensuite, vous devrez éditer le fichier de configuration Lsyncd et définir les variables d'hôte rsyncssh et cible :
nano /etc/lsyncd/lsyncd.conf.lua
Modifiez le fichier comme indiqué ci-dessous :
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 20, nodaemon = false } sync { default.rsyncssh, source = "/etc/", host = "remote-server-ip", targetdir = "/opt" }
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le service Lsyncd pour lancer la synchronisation.
systemctl restart lsyncd
Vous pouvez vérifier l'état de la synchronisation avec la commande suivante :
tail -f /var/log/lsyncd/lsyncd.log
Vous devriez voir le résultat suivant :
Fri May 1 04:32:05 2020 Normal: --- Startup, daemonizing --- Fri May 1 04:32:05 2020 Normal: recursive startup rsync: /etc/ -> 45.58.38.21:/opt/ Fri May 1 04:32:06 2020 Normal: Startup of "/etc/" finished: 0
Vous devriez pouvoir voir les changements dans le répertoire /opt sur le serveur distant avec la commande suivante :
ls /opt
Vous devriez voir que tous les fichiers et répertoires du répertoire /etc sont ajoutés au répertoire /opt du serveur distant :
acpi dconf hosts logrotate.conf newt rc2.d subuid- adduser.conf debconf.conf hosts.allow logrotate.d nginx rc3.d sudoers alternatives debian_version hosts.deny lsb-release nsswitch.conf rc4.d sudoers.d apache2 default init lsyncd ntp.conf rc5.d sysctl.conf apparmor deluser.conf init.d ltrace.conf openal rc6.d sysctl.d apparmor.d depmod.d initramfs-tools lvm opt rcS.d systemd apport dhcp inputrc machine-id os-release resolv.conf terminfo apt dnsmasq.d insserv.conf.d magic overlayroot.conf rmt timezone at.deny docker iproute2 magic.mime PackageKit rpc tmpfiles.d bash.bashrc dpkg iscsi mailcap pam.conf rsyslog.conf ubuntu-advantage bash_completion e2scrub.conf issue mailcap.order pam.d rsyslog.d ucf.conf bash_completion.d environment issue.net manpath.config passwd screenrc udev bindresvport.blacklist ethertypes kernel mdadm passwd- securetty ufw binfmt.d fonts kernel-img.conf mime.types perl security update-manager byobu fstab landscape mke2fs.conf php selinux update-motd.d ca-certificates fuse.conf ldap modprobe.d pki sensors3.conf update-notifier ca-certificates.conf fwupd ld.so.cache modules pm sensors.d vdpau_wrapper.cfg calendar gai.conf ld.so.conf modules-load.d polkit-1 services vim console-setup groff ld.so.conf.d mtab pollinate shadow vmware-tools cron.d group legal multipath popularity-contest.conf shadow- vtrgb cron.daily group- letsencrypt multipath.conf profile shells vulkan cron.hourly grub.d libaudit.conf mysql profile.d skel wgetrc cron.monthly gshadow libnl-3 nanorc protocols sos.conf X11 crontab gshadow- locale.alias netplan pulse ssh xattr.conf cron.weekly gss locale.gen network python3 ssl xdg cryptsetup-initramfs hdparm.conf localtime networkd-dispatcher python3.8 subgid zsh_command_not_found crypttab host.conf logcheck NetworkManager rc0.d subgid- dbus-1 hostname login.defs networks rc1.d subuid
Conclusion
Dans le guide ci-dessus, nous avons appris comment installer et configurer Lsyncd pour la synchronisation locale et la synchronisation à distance. Vous pouvez désormais utiliser Lsyncd dans l'environnement de production à des fins de sauvegarde. N'hésitez pas à me demander si vous avez des questions.