ReadyNAS Duo

Mon choix s’est porté sur le ReadyNAS Duo, un NAS grand public commercialisé par Netgear (précédemment Infrant). Il dispose de deux disques SATA extractibles à chaud (hot-plug) qui peuvent fonctionner en RAID-0 ou en RAID-1. Mon objectif principal étant la sécurité des données, je les ai configurés en RAID-1 (mirroring). Le NAS est installé derrière une ligne ADSL Freebox, branché sur un switch Gigabit. L’ensemble est secouru électriquement par un onduleur MGE Ellipse 600, qui offre 30 minutes d’autonomie à l’ensemble Freebox-switch-NAS.

L’avantage d’un NAS par rapport à un PC recyclé utilisé en serveur est sa consommation électrique bien moindre : les composants électroniques du NAS assurent les fonctionnalités minimales et l’ensemble ne consomme que 25 W à pleine puissance. En plus, l’extinction / démarrage du ReadyNAS Duo est programmable de manière assez fine, si vous souhaitez optimiser encore plus votre empreinte écologique.

Comme quasiment tous les NAS, il permet de créer des volumes réseaux accessibles en CIFS/NFS pour vos PC Windows/Linux/Mac. Il possède aussi quelques fonctionnalités intéressantes qui le distinguent du commun des NAS (client BitTorrent intégré, serveur SqueezeCenter, serveur iTunes, etc…) et il permet de programmer des sauvegardes.

Le choix proposé via l’interface web du ReadyNAS peut paraitre pléthorique (nfs, cifs, ftp, rsync,…) mais en fait il manque deux fonctionnalités essentielles à mes yeux :

  • pouvoir faire des sauvegardes distantes en utilisant ssh (rsync sur ssh)
  • pouvoir faire des sauvegardes incrémentales (en utilisant rsnapshot)

Heureusement, via quelques add-ons très simples à installer, il est possible d’accéder en SSH au système Debian qui est au cœur du ReadyNAS Duo. A la différence de certains autres NAS, les add-ons sont officiellement fournis par Netgear, ce qui est appréciable. Pour autant, la modification du système est à vos risques et périls. En cas de fausse manipulation, vous pourriez toujours réinstaller un système d’origine, mais en perdant toutes vos données. Vous êtes prévenu !

Sauvegarde incrémentale

Le principe d’une sauvegarde incrémentale est assez simple : on stocke une sauvegarde initiale complète, puis on ne stocke que les différences (fichiers ajoutés et effacés). Cela permet d’avoir une vue du système sauvegardé à différents moments dans le temps (un jour, une semaine, un mois par exemple).

A quoi cela sert ? Voilà un exemple qui est arrivé à un ami il y a quelques années : un script cron faisait chaque jour une sauvegarde complète de /var/www serveur en utilisant rsync. Pour faire simple, rsync permet de synchroniser deux systèmes de fichier : il réalise une copie parfaite. Dans ce cas de figure, si un hacker malintentionné s’introduit sur votre machine et fait un ‘defacing’ (il efface le contenu de /var/www et le remplace par sa page Web) et si vous ne vous en apercevez pas assez vite, la prochaine sauvegarde va récupérer les données du hacker et écraser votre ancienne sauvegarde. Dommage.

Cet exemple n’est certainement pas unique et c’est d’ailleurs ce qui est arrivé à Nathan Rosenquist (l’auteur de rsnapshot) et qui l’a poussé à écrire ce programme. rsnapshot est écrit en Perl et il utilise rsync et les hard-links (la commande cp utilisé avec l’option –l) pour réaliser une sauvegarde incrémentale de manière très simple. Je vous laisse consulter www.rsnapshot.org pour comprendre exactement comment cela fonctionne. C’est épatant de simplicité et cela fonctionne.

Côté serveur

Nous allons d’abord créer un utilisateur de sauvegarde, qui devra avoir accès en lecture à l’ensemble des fichiers à sauvegarder. Dans mon cas, je souhaite sauvegarder /etc, /home, /var/www, ce qui m’oblige à donner l’uid 0 (root) à l’utilisateur de sauvegarde. Par mesure de précaution, le shell de cet utilisateur sera rssh, un shell limité qui n’autorise qu’un certains nombres de commandes (en particulier rsync dont nous avons besoin).

Assez discuté, allons-y ! Commençons par installer les paquets nécessaires :

sudo apt-get update
sudo apt-get install rsync rssh

Créons l’utilisateur de sauvegarde (je l’appelle rsnapshot) et attribuons-lui le shell rssh :

sudo adduser --shell /usr/bin/rssh rsnapshot

(Choisissez un mot de passe solide pour votre utilisateur, surtout si vous envisagez comme moi de lui donner les droits root sur vos données).

Donnons à ce nouvel utilisateur l’uid 0 et le gid 0 :

sudo usermod -u 0 -o rsnapshot
sudo usermod -g 0 rsnapshot

Editons /etc/rssh.conf pour autoriser l’utilisateur rsnapshot à utiliser rsync :

logfacility = LOG_USER
allowscp
allowrsync
umask = 022
user=rsnapshot:077:10001

Enfin, comme la sauvegarde devra être automatisée, sans intervention utilisateur pour taper un mot de passe, créons une clef RSA sans mot de passe pour l’utilisateur de sauvegarde :

su rsnapshot
mkdir /home/rsnapshot/.ssh
cd /home/rsnapshot/.ssh
ssh-keygen -t rsa -f /home/rsnapshot/.ssh/id_rsa_rsnapshot

(laissez vide la demande de mot de passe)

Mettez la clef publique dans le fichier des clefs autorisées :

cat id_rsa_rsnapshot.pub >> authorized_keys

Laissez pour l’instant la clef privée (id_rsa_rsnapshot) où elle est. Vous aurez besoin de la récupérer sur le NAS plus tard.

Côté ReadyNAS

Tout d’abord, il vous faut obtenir l’accès root sur votre NAS. Téléchargez les modules EnableRootSSH et ToggleSSH depuis le site www.readynas.com. Puis allez sur l’interface web de votre ReadyNAS et installer les modules.

Vous pouvez maintenant vous connecter en root sur votre ReadyNAS, en utilisant le même mot de passe que celui de l’interface web (l’interface web utilise le login admin, mais là il s’agit bien de se connecter avec le login root).

C’est bon ? Vous êtes connecté ? Parfait ! Il manque des modules à l’installation perl par défaut de votre ReadyNAS. Rajoutons-les :

apt-get update
apt-get install --reinstall perl-modules

Puis installons rsnapshot:

apt-get install rsnapshot.

Les seules dépendances de rsnapshot sont perl et rsync, donc cela devrait se passer sans problème. Faites un test pour voir que rsnapshot fonctionne :

rsnapshot configtest

Il devrait vous répondre en disant que son fichier de configuration est ok.

Maintenant, récupérons la clef privée depuis votre serveur (en tapant votre mot de passe quand ssh vous le réclame):

scp rsnaphot@[ip-votre-serveur]:/home/rsnapshot/.ssh/id_rsa_rsnapshot /root/.ssh/id_rsa_rsnapshot

Testez si la connexion ssh fonctionne en utilisant la clef privée :

ssh rsnapshot@[ip-votre-serveur] -i /root/.ssh/id_rsa_rsnapshot

Normalement, vous ne devriez pas avoir à taper votre mot de passe pour l’utilisateur rsnapshot. Si c’est le cas, il y a un problème. Pour en savoir plus sur les connections ssh sans mot de passe, tapez « passwordless ssh » dans Google, il y a des centaines de tutoriaux. Ensuite, pensez à effacer la clef privée (id_rsa_rsnapshot) de votre serveur.

Vous pouvez maintenant configurer le fichier /etc/rsnapshot.conf pour personnaliser les sauvegardes, puis modifier /etc/cron.d/rsnapshot pour automatiser les sauvegardes. Je ne vais pas rentrer dans le détail dans la configuration de rsnapshot. Pensez en tout cas à positionner le paramètre ssh_args pour utiliser votre clef privée :

ssh_args	-i /root/.ssh/id_rsa_rsnapshot

Pour le reste, je vous laisse consulter le How-To de rsnapshot.

Lorsque votre configuration est terminée, testez à nouveau votre configuration :

rsnapshot configtest

Puis lancez une première sauvegarde :

rsnapshot daily

C’est terminé. Bonnes sauvegardes, en espérant que vous n’ayez jamais à vous en servir ;-)