Tag

rsync

Browsing

Nous avons vu il y a quelques jours comment répliquer nos bases de données à la volée d’un serveur à l’autre. Voyons aujourd’hui comment répliquer les fichiers en temps réel avec lsyncd.

Créer un serveur High Availability : la réplication des fichiers photo

Pour les besoins de ce tutoriel, vous avez besoin:

Mon serveur principal s’appelle MASTER. Le serveur de sauvegarde s’appelle BACKUP.

Copier tous les fichiers d’un serveur à l’autre avec rsync

rsync est le moyen le plus simple de copier tous les fichiers d’un répertoire sur votre serveur de sauvegarde.

Nous copions donc tous les fichiers qui se trouvent dans /var/www/html de notre serveur MASTER vers BACKUP :

rsync --progress -av --delete --stats --checksum --human-readable /var/www/html/* root@10.134.4.220:/var/www/html/

Cela permet d’avoir deux copies identiques très rapidement, surtout si vos deux VPS sont dans le même datacenter : vous pouvez alors utiliser l’IP interne du serveur – vitesse décuplée assurée (et cela ne compte pas dans la bande passante allouée).

La réplication des fichiers du site avec lsyncd

Je choisis d’utiliser lsyncd pour assurer la réplication des fichiers du site. C’est un petit service qui surveille le contenu d’un répertoire et qui fait un rsync toutes les 20 secondes vers votre autre VPS.

1. Sur le serveur MASTER, on installe lsyncd:

apt-get install lsyncd

2. Et on crée ses répertoires et son fichier de configuration :

mkdir /etc/lsyncd
mkdir /var/log/lsyncd
nano /etc/lsyncd/lsyncd.conf.lua

Sommaire de la série Créer un serveur High Availability (HA)

  1. Créer un serveur High Availability : la réplication des bases de données
  2. Créer un serveur High Availability : la réplication des fichiers
  3. Serveur High Availability : créer un load balancer avec une IP flottante

Dans ce tutoriel, nous allons voir comment configurer rsync pour planifier des sauvegardes d’un serveur distant et permettre l’accès SSH vers votre NAS Synology en local.

Armez-vous de votre terminal préféré et lancez une session SSH, c’est parti !

Utiliser Rsync pour sauvegarder un serveur Debian/Ubuntu vers un NAS Synology photo

Étape 1 : créer un nouvel utilisateur Synology

Afin de bien séparer les processus et privilèges, il vaut mieux créer un nouvel utilisateur Synology : cela permet de contrôler exactement ce à quoi il a accès.

Dans ce tutoriel, notre utilisateur s’appellera saveme.

Étape 2 : activer l’accès SFTP

Activez l’accès SFTP dans Diskstation > Control Panel > FTP > SFTP > Enable SFTP service. Vérifiez aussi que le port 22 (SSH) est bien ouvert dans votre routeur et firewall; et bien redirigé vers votre NAS.

Ensuite, ouvrez une session SSH sur votre NAS :

ssh admin@IP_NAS

Entrez votre mot de passe, vous devriez être loggué. Si ce n’est pas le cas, vérifiez la configuration routeur/firewall du port 22.

Étape 3 : éditer le fichier passwd

Une fois que vous êtes identifié en SSH sur votre NAS, il vous faut éditer le fichier passwd:

nano /etc/passwd

Allez à la dernière ligne, qui gère le nouvel utilisateur créé à l’étape 1. A la fin de cette ligne, remplacez :

/sbin/nologin

par

/bin/sh

Sauvegardez le fichier.

Maintenant, on assigne un dossier de travail avec tous les droits nécessaires à notre utilisateur (qui s’appelle saveme). Au lieu de le mettre dans /homes, on va plutôt le mettre à la racine, bien au chaud, sous /volume1/backup.

On donne accès au dossier :

chown saveme:users /volume1/backup 

Étape 4 : identification avec notre nouvel utilisateur

On s’identifie avec notre utilisateur saveme :

su - saveme

Si vous obtenez des messages d’erreur comme :

su: can't chdir to home directory '/volume1/backup'
su: can't run /sbin/sh: No such file or directory

La première erreur est due à une erreur de permissions. Vérifiez que vous avez bien chowné le bon dossier. La seconde montre que vous avez oublié d’ajouter

/bin/sh

à votre utilisateur dans l’étape 3.

Étape 5 : ajouter la clé SSH du NAS sur le serveur distant

On crée la clé en utilisant le chemin par défaut et on appuie juste sur “entrée” lorsqu’on nous demande un mot de passe de clé :

ssh-keygen -t rsa

On copie la clé sur le serveur distant:

cat ~/.ssh/id_rsa.pub | ssh user@IP_SERVER "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

Essayez maintenant d’ouvrir une session SSH sur votre serveur distant depuis la session SSH du NAS : la session devrait s’ouvrir sans que vous n’ayez à entrer le mot de passe du compte.

Si vous obtenez une erreur de permission, voici les bonnes permissions à appliquer :

  • le répertoire .ssh doit avoir un chmod 700,
  • la clé publique (fichier .pub) doit avoir un chmod 644,
  • la clé privée (id_rsa) doit avoir un chmod 600.

Voici donc les commandes à lancer pour attribuer les bonnes permissions sur le NAS:

chmod /volume1/backup/.ssh 700
chmod /volume1/backup/.ssh/id_rsa.pub 644
chmod /volume1/backup/.ssh/id_rsa 600

Mon NAS Synology est configuré pour se mettre automatiquement à jour, ce qui est plutôt pratique puisque cela permet d’automatiser les mise à jour de sécurité et des paquets essentiels.

Hier, une nouvelle mise à jour du DSM est arrivée : DSM 6. La mise à jour s’est visiblement bien déroulée mais quelques petites choses ont été modifiées au sein du système, dont la perte d’accès root pour rsync, ce qui est problématique pour mes sauvegardes.

NAS Synology : retrouver l'accès SSH et rsync après la mise à jour du DSM photo 2

Le truc qui change, c’est qu’au lieu d’utiliser root comme utilisateur, il va désormais être obligatoire d’utiliser un utilisateur qui appartient au groupe administrators. Chez moi, il y en a plusieurs mais pour des raisons de simplicité, nous utiliserons l’utilisateur admin dans ce tutoriel.

Voyons donc comment donner l’accès à rsync pour l’utilisateur admin, cela ne prend que quelques minutes.

Ajouter des utilisateurs dans le groupe des administrateurs

Nous commençons par vérifier que nous possédons bien au moins un administrateur sur le NAS. Par défaut, il devrait au minimum y avoir le compte admin mais vous pourriez l’avoir désactivé pour des raisons de sécurité (c’était mon cas avant de faire cette mise à jour).

Rendez-vous dans Synology > Control Panel > Group > Administrators > Edit members:

NAS Synology : retrouver l'accès SSH et rsync après la mise à jour du DSM photo

Ici, nous avons bien l’utilisateur admin. N’hésitez pas à y ajouter vos autres utilisateurs qui possèdent les droits d’administration.

Note: profitez-en pour faire un détour par Control Panel > User et changez le mot de passe de l’utilisateur admin pour un mot de passe plus robuste.

Mon NAS Synology vient de mettre à jour son firmware DSM et je constate en lançant ma sauvegarde rsync que la connexion rsync vers le NAS ne se fait plus : après saisie du mot de passe, on obtient une erreur “permission denied”.

NAS Synology : résoudre l'erreur rsync "permission denied" lors de la connexion au NAS photo

Voici comment remédier à ce petit désagrément en deux minutes montre en main.

Problème : connexion SSH refusée

Lors de la connexion initiale, démarrée par :

rsync --ignore-existing --progress -vr --rsh='ssh -p22222' /home/backup/* root@example.com:/volume1/video

on obtient le message d’erreur suivant, après saisie du mot de passe:

Permission denied, please try again.
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]

Après vérification que les identifiants (user/password) sont bien corrects, il s’avère que la solution réside dans l’utilisation de l’argument --rsync-path afin d’expliciter le chemin de l’exécutable rsync présent sur le NAS.

Solution : ajouter le chemin du binaire rsync du NAS

La solution est toute simple, il suffit de renseigner le chemin du binaire rsync qui se trouve sur le NAS Synology comme argument de notre connexion.

Sous DSM5, le chemin de rsync est /usr/syno/bin/rsync.
A partir de DSM6, le chemin de rsync est /usr/bin/rsync, qui est le chemin habituel sous linux.

Nous ajoutons donc l’argument --rsync-path à notre connexion initiale, ce qui nous donne :

rsync --ignore-existing --progress -vr --rsh='ssh -p22222' --rsync-path=/usr/bin/rsync /home/backup/* root@example.com:/volume1/video
Note: n’oubliez pas de changer le chemin suivant que vous utilisez DSM5 ou DSM6.

Et hop, la sauvegarde rsync est de nouveau fonctionnelle.

BashJ’ai récemment mis à jour mon article sur Rsync pour rapatrier quelques fichiers du serveur vers mon NAS Synology et me suis demandé comment je pouvais faire pour ouvrir un terminal, lancer un Rsync qui va sûrement me prendre des heures et fermer le terminal sans que cela interrompe la sauvegarde.

Voici quelques pistes pour lancer une commande en arrière-plan avec BASH.

Créer un sous-shell

On crée un sous-shell (subshell) en lançant la commande avec des parenthèses. Le signe & (ampersand) est nécessaire, tout comme la commande exit qui permet de quitter proprement le terminal sans terminer le processus :

(sleep 100) & exit

On ouvre un autre terminal et on vérifie que notre tâche est toujours en cours :

ps aux | grep sleep

Utiliser disown

Une autre manière de faire est d’utiliser disown :

spleep 60 & disown

Le système attribue un numéro de processus à notre tâche. On peut alors fermer le terminal comme un barbare, la tâche reste en cours :

ps aux | grep sleep

A garder sous le coude.

Je vous ai déjà parlé de rsync pour transférer des fichiers d’un serveur à un autre.

Supposons maintenant que vous vouliez récupérer les fichiers qui sont sur votre serveur chez vous, à la maison.

Cela ne prend que quelques minutes à mettre en place et cela sert très souvent.

Etape 1 : ouvrir le port 22 dans la box ou le routeur

Rendez-vous dans l’interface d’administration de votre box ou routeur :

  1. si ce n’est déjà fait, attribuez une IP fixe à votre PC en identifiant l’adresse MAC de sa carte réseau.
  2. ouvrez le port 22 (SSH) en TCP et redirigez-le vers l’adresse fixe de l’étape précédente.

Voilà, le port est ouvert et redirigé au niveau du routeur.

Etape 2 : ouvrir le port 22 dans le firewall de la machine

Je suis sous Linux (Debian, Ubuntu, Mint…), j’utilise donc iptables en root :

iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

Le port 22 est maintenant ouvert aux connections entrantes et sortantes sur la machine.

Sommaire de la série Monter un serveur dédié de A à Z

  1. Serveur dédié : installation d’Apache, PHP, MySQL et Webmin
  2. Serveur dédié : créer la base de données MySQL et importer WordPress
  3. Serveur dédié : créer et activer un Virtual Host sous Apache
  4. Serveur dédié : changer les DNS du nom de domaine et le faire pointer vers le serveur
  5. Serveur dédié : sécurisation des services avec iptables et fail2ban
  6. Serveur dédié : sécurisation de la couche TCP/IP
  7. Serveur dédié : création d’un serveur mail Postfix (sécurisé avec Saslauthd et certificat SSL) et Courier (accès POP et IMAP) utilisant une base MySQL d’utilisateurs/domaines virtuels
  8. Serveur dédié : sécuriser Apache 2 avec ModSecurity
  9. Serveur dédié : CHMOD récursif sur des fichiers ou répertoires en ligne de commande
  10. Serveur dédié : installer APC comme système de cache et configurer Varnish comme reverse-proxy pour Apache pour améliorer les performances
  11. Serveur dédié : afficher la véritable IP derrière un reverse-proxy comme Varnish
  12. Serveur dédié : intégrer SSH à WordPress pour mettre à jour le core, les plugins et les thèmes
  13. Serveur dédié : installer la dernière version d’APC par SVN
  14. Serveur dédié : analyse des performances du serveur
  15. Serveur dédié : mettre à jour le noyau Debian de la Kimsufi
  16. Serveur dédié : sauvegarde automatique des fichiers avec Backup Manager sur le serveur de sauvegarde OVH
  17. Serveur dédié : configurer la limite mémoire pour PHP et Suhosin
  18. Bash : supprimer tous les fichiers et sous-répertoires d’un répertoire
  19. Serveur dédié : impossible de se connecter à un port distant
  20. Rsync: rapatrier les fichiers du serveur à la maison
  21. Bash : réparer les tables MySQL en cas de crash
  22. Serveur dédié : création d’une seedbox avec Transmission
  23. Serveur dédié : des paquets LAMP à jour sous Debian
  24. Serveur dédié : mise à jour vers Debian 7 Wheezy
  25. Serveur dédié : activer X11 forwarding pour SSH
  26. Serveur dédié : optimiser toutes les images JPG et PNG avec OptiPNG et JpegOptim
  27. Postfix : résoudre l’erreur “fatal: www-data(33): message file too big”
  28. Serveur dédié : mise en place de l’IPv6
  29. WordPress : accorder les bonnes permissions aux fichiers et dossiers avec chown et chmod
  30. WordPress : héberger les images sur un sous-domaine
  31. Serveur dédié : ajouter l’authentification SPF, Sender-ID et DKIM à Postfix et Bind9 avec opendkim
  32. Apache : lorsque le domaine seul (sans WWW) renvoie une erreur 403
  33. Serveur dédié : sécuriser Apache avec HTTPS (HTTP avec la couche TLS/SSL) en Perfect Forward Secrecy
  34. Serveur dédié : passer WordPress en HTTPS (TLS/SSL)
  35. Serveur dédié : configurer Webmin en TLS avec un certificat SSL
  36. Serveur dédié : configurer Transmission pour accéder au WebUI via TLS-SSL
  37. Serveur dédié : installer et configurer Varnish 4
  38. Serveur dédié : passage au mod FastCGI et PHP-FPM avec Apache MPM Worker
  39. Récupérer un serveur Kimsufi après un plantage de kernel avec le mode rescue OVH
  40. Serveur dédié : configurer Postfix et Courier pour utiliser TLS-SSL en Perfect Forward Secrecy
  41. Serveur dédié : retirer Varnish, devenu inutile avec HTTPS
  42. Serveur dédié : installer la dernière version d’OpenSSL sous Debian
  43. Serveur dédié : activer l’IP canonique du serveur sous Apache
  44. Serveur dédié : mise à jour vers PHP 5.6
  45. MySQL : convertir les tables MyISAM au format InnoDB
  46. Serveur dédié : optimiser toutes les images GIF avec GIFsicle
  47. Serveur dédié : migration de MySQL vers MariaDB
  48. BASH : lister, bloquer et débloquer des adresses IP avec iptables
  49. Serveur dédié : produire une meilleure réserve d’entropie avec haveged
  50. Serveur dédié : mettre en place DNSSEC pour sécuriser les DNS du domaine
  51. Serveur dédié : mise en place du protocole DANE
  52. 8 règles d’or pour bien déployer DNSSEC et DANE
  53. Serveur dédié : installer PHP7 FPM avec FastCGI sous Debian
  54. Serveur dédié : réduire les connexions TIME_WAIT des sockets et optimiser TCP
  55. Fail2Ban: protéger Postfix contre les attaques DoS de types AUTH, UNKNOWN et EHLO
  56. Serveur dédié : mettre à jour Apache et configurer le mod_http2 pour HTTP/2
  57. Serveur dédié : ajouter le domaine à la liste HSTS preload
  58. Serveur dédié : ajouter l’authentification DMARC à Postfix et BIND
  59. Serveur dédié : à la recherche de l’inode perdue ou comment résoudre le problème “no space left on device”
  60. Serveur dédié : installer NginX avec support HTTP2 et certificat SSL, PHP, MariaDB sous Debian

Lors de l’utilisation de la commande rsync, il est possible d’obtenir le message d’erreur suivant :

TERM environment variable not set.
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(173) [sender=3.0.7]

Il s’agit la plupart du temps du fichier /~.bashrc qui n’est pas propre puisqu’il renvoie des informations au terminal.

Cela peut être dû à une commande qui donne des informations sur la date ou le système ou toute autre commande qui se lance à la connexion. Rsync ne s’attend pas à cela et bloque.

Il arrive très souvent que l’on ait besoin de transférer des fichiers rapidement, d’un serveur à un autre par exemple.

Transférer des fichiers d'un serveur à un autre avec rsync photo

Bien sûr, on peut utiliser le FTP mais il y a beaucoup plus rapide et efficace : je vous présente rsync.[no_toc]

Synchronisation distante

rsync (remote synchronization ou “synchronisation distante” en français) est un logiciel libre de synchronisation de fichiers (disponible sous toutes les plateformes) : la synchronisation est unidirectionnelle, c’est-à-dire qu’elle copie les fichiers de la source en direction de la destination.

rsync est donc utilisé pour réaliser des sauvegardes incrémentales ou pour diffuser le contenu d’un répertoire de référence.

Je vous donne ici les deux commandes que j’utilise quotidiennement lors de ma gestion des serveurs.

Copier tous les fichiers d’un répertoire du serveur A dans le répertoire équivalent du serveur B

Premièrement, connectez-vous via SSH à votre serveur A. Voici la commande :

/* Copie tous les fichiers de /home/website/ vers serveur B. */
rsync --ignore-existing --progress /home/movies/*.* matt@serveurB.net:/home/movies/

Explications:

  • --ignore-existing signifie que si le fichier existe déjà, on ne le remplace pas.
  • --progress montre la vitesse du transfert et les noms des fichiers transférés.
  • matt@serveurB.net est le nom du login SSH (matt) associé à l’adresse du serveur B (IP ou nom de domaine).
  • /home/website/ : répertoire vers lequel copier les fichiers.

En lançant cette commande, je récupère sur le serveur B tous les fichiers qui se trouvent dans le répertoire /home/movies/ du serveur A. Je ne remplace pas les fichiers existants : étant donné que je ne synchronise qu’avec rsync, ce serait inutile.