HDD-10mbPourquoi ? Pourquoi avoir recours à une telle gestion des disques sur notre serveur/poste de travail. Tout simplement car un collègue m’a récemment demandé conseil sur l’infrastructure informatique à mettre en place pour la création d’une TPE/petite-PME. Je lui ai donc répondu que les rats quittaient le navire, que de la part de … ça ne m’aurait pas étonné, mais toi, toi ! Disparais céans ou je te flagelle à coup de RJ45, fumier. Il a répliqué qu’il s’agissait d’un ami à lui qui heu, voulait heu, enfin tu vois, se lancer dans une activité heu, dans le tertiaire, voilà c’est ça, le tertiaire. Pleinement soulagé et rassuré quant à la loyauté et la droiture du collègue, je me confondais en excuse et lui promettais de réfléchir rapidement à la question, d’autant que son ami semblait pressé. Le sujet étant vaste et néanmoins bougrement intéressant, je m’arrête dans cet article à la problématique du stockage sur un serveur GNU/Linux, nul besoin d’un Windows pour cela, le but étant ici d’allier fiabilité (RAID1), flexibilité (LVM2) et sécurité (chiffrement LUKS).

Je précise d’emblée aux esprits chagrins que le but ici n’est pas de discourir sur la pertinence d’une solution donnée par rapport à une autre (RAID1 vs RAID5, NAS vs serveur multi-rôles, etc). L’idée est uniquement de détailler la procédure de partitionnement (même si le terme est un poil galvaudé) lors de l’installation de l’OS car contre toute attente, ce fut un peu laborieux. Je me heurtais systématiquement à un message d’erreur indiquant que GRUB ne pouvait s’installer sur /dev/sda (ni même sur /dev/sdb ou encore hd0). Soupçonnant une quelconque erreur dans ma méthode, j’ai testé différentes procédures (RAID1 + LVM, RAID1 + Chiffrement global, LVM + Chiffrement global et même RAID1 + LVM + Chiffrement séparé de chaque volume logique) sans le moindre problème. Ce n’est qu’en recommençant une n-ième fois que je me suis finalement rendu compte que la configuration de la partition /boot disparaissait au cours de la procédure…

Pré-requis :

  • Un serveur GNU/Linux (ici Debian Squeeze 64 bits)
  • 2 disques durs de même capacité (ici 8,6 Gio)

Conventions :

  • prompt : # commande : exécuter la commande sous le compte root ou précédée de la commande « sudo »
  • prompt : $ commande : exécuter la commande sous le compte utilisateur

En avant pour la visité guidée (je n’ai pas lésiné sur les captures d’écran, je vous préviens). Notez que les captures suivantes ont été réalisée sur une machines virtuelle KVM sous Proxmox mais ça ne change rien à l’affaire.

– Choisir le partitionnement manuel et créer au début de chaque disque une partition primaire de 256 Mio qui aura comme point de montage /boot. La partition de démarrage ne pouvant être chiffrée, on la traite à part.

Partitionnement manuelCréer une nouvelle table de partitionCréer partitionPartition de 256 Mio

Partition primaireCréer la partition au début du disque




















– Configurer ces 2 partitions en tant que volumes physiques pour RAID, valider les changements puis configurer le RAID logiciel. Créer un volume multi-disques RAID1 de 2 disques, sans disque de secours, puis sélectionner les 2 partitions des 256 Mio. Faire de même avec les 2 partitions restantes et valider la configuration du RAID1.

Configurer les partitions en tant que volumes physiques pour RAIDConfigurer le RAIDCréer un volume multidisqueRAID1

Utiliser 2 disquesPas de disque de rechangeSélectionner les partitions de 256 Mio

Faire de même avec les 2 autres partitionsValider la configuration RAID1






























– Sélectionner le volume RAID1 de 256 Mio et le formater en Ext3 avec /boot comme point de montage :
Sélectionner la partition RAID1 de 256 Mio Formater en Ext3 et point de montage /boot










– Chiffrer la partition RAID1 de 8,3 Gio, rien de spécial à signaler ici, il suffit de suivre les captures d’écran. Notez qu’il faut bien sûr accepter d’écrire des données aléatoires sur tous les secteurs de la partition mais que cela peut prendre beaucoup de temps, en fonction de la taille de cette partition. On remarquera que sur la première capture d’écran ci-dessous, la partition RAID1 de 256 Mio est bien configurée avec comme point de montage /boot.

Configurer le chiffrementValider les changementsCréer un volume chiffréChoisir le volume RAID1 de 8,3 Gio

Paramètres de chiffrementFinir la procédure de chiffrementEcrire des données aléatoires sur l'ensemble de la partition

Choisir un mot de passe solide





























– Après le chiffrement de la partition de 8,3 Gio, on constate sur la première capture d’écran ci-dessous que la partition RAID1 de 256 Mio n’a plus de point de montage (il faudra donc penser à reconfigurer cette partition avant de poursuivre l’installation de l’OS sous peine de se retrouver avec un chargeur d’amorçage incapable de s’installer correctement). On passe maintenant à la configuration des volumes logiques. Après avoir créé un groupe de volume logique (VG) dans la partition chiffrée, créer les volumes logiques désirés (ici vg-root, vg-swap et vg-home) et terminer la procédure.

Configurer les volumes logiques Confirmer le formatage en Ext3Créer un groupe de volumes logiquesNommer le groupe de volumes logiquesSélectionner le volume chiffréConfirmer le schéma des partitions Créer un volume logiqueSélectionner le groupe de volumes logiques précédemment crééNommer le volume logiqueSaisir la taille du volume logiqueCréer les volumes logiques supplémentairesTerminer la procédure de création des volumes logiques







































– Configurer le formatage et le point de montage de chaque volume logique :

Sélectionner le volume logique "vg-home"Configurer le volume logiqueSélectionner le volume logique "vg-root"Configurer le volume logiqueSélectionner le volume logique "vg-swap"Configurer le volume logique



















– Reconfigurer le point de montage (/boot) de la partition RAID1 de 256 Mio et finir la procédure de configuration des disques :
Reconfigurer la partition de 256 MioTerminer la procédure de partitionnementConfirmer la configuration des partitions et volumes logiques










– Une fois l’installation achevée et le système redémarré, il ne reste plus qu’à installer GRUB2 sur /dev/sdb (il s’installe sur /dev/sda par défaut) afin de pouvoir démarrer sur les 2 disques :

# grub-install "/dev/sdb"

Installer GRUB2 sur /dev/sdb












Vérifier que Grub est bien installé sur les 2 disques en débranchant chaque disque alternativement et en démarrant le système. That’s all folks !

Alors voilà, on est tout content de son serveur auto-hébergé fraîchement installé (si si), on y colle un peu tout et n’importe quoi, on teste des tas de services et là c’est le drame : lors de la sauvegarde d’un fichier de configuration, le système vous gifle sournoisement d’un revers de « no space left on device ». Un petit df -h plus loin le constat est accablant, l’installeur de Debian en qui vous aviez toute confiance, n’a réservé que 300 pauvres méga-octets pour le volume logique root alors que le disque en fait mille fois plus, que de cruauté !

Pas de problème vous dîtes vous alors, redimensionner un volume logique avec LVM, c’est de la rigolade, sauf qu’en bon paranoïaque que vous êtes vous avez chiffré tout ce petit monde à grands coup de LUKS. Bref la tâche semble ardue, les live-CD vont être de sortie suivis fatalement d’une réinstallation en bon et due forme, vous l’avez bien cherché !

Avant de sortir l’artillerie lourde, on se pose 5 minutes, on prend un café et on va jeter un œil sur le web des fois que d’autres inconscients n’auraient pas fait la même erreur. Miracle, ils sont légions (mais eux n’attaquent pas le PSN…) ou presque, l’espoir renaît, tout va bien se passer, méthode Coué, méthode Coué… Pour faire simple, l’idée est de prendre quelques giga-octets sur un autre volume logique (dans mon cas /home) pour les ré-affecter à ce goinfre de root. Deuxième miracle, cette périlleuse opération va se faire en 10 commandes ni plus ni moins.

Pré-requis :

  • GNU/Linux Debian 6 « Squeeze » dont les partitions sont chiffrées avec LUKS

Conventions :

  • prompt : # commande : exécuter la commande sous le compte root ou précédée de la commande « sudo »
  • prompt : $ commande : exécuter la commande sous le compte utilisateur

 

On commence par arrêter tous les services qui accèdent au volume logique sur lequel on va récupérer de l’espace disque (il peut être nécessaire de redémarrer le serveur pour arrêter certains processus récalcitrants) et on démonte le volume :

# umount /home

Il faut ici distinguer le système de fichiers et le volume logique (le premier étant « à l’intérieur » du deuxième). Le système de fichiers doit toujours être réduit à une taille inférieure à celle prévue pour le volume logique (ex : LV : 260 Gio / FS : 259 Gio). On va donc commencer par diminuer la taille du système de fichiers (attention : resize2fs est utilisé pour les systèmes de fichier ext3/ext4 uniquement) :

# resize2fs -p /dev/mapper/debian-home 259G

Le système nous demande alors, avant d’aller plus loin, de lancer la commande « e2fsck -f /dev/mapper/debian-home » afin de vérifier l’intégrité du système de fichier :

# e2fsck -f /dev/mapper/debian-home

Un fois cette commande terminée, on peut seulement alors lancer la commande resize2fs.

Le système de fichier étant redimensionné, on passe maintenant au volume logique que l’on va passer de 280 Gio à 260 Gio :

# lvresize --size=260G /dev/mapper/debian-home

Il ne reste plus qu’à étendre le système de fichiers à l’intégralité du volume logique :

# resize2fs /dev/mapper/debian-home

On remonte le volume logique :

# mount /dev/mapper/debian-home /home

Et on contrôle que la taille du volume est conforme à nos attentes :

# df -h

Jusque là tout va bien, il va maintenant falloir réattribuer l’espace libéré au volume root. On réalise alors qu’on ne peut pas le démonter, malédiction ! Le cercle vicieux live-CD/bidouillage/réinstallation refait surface. Que nenni, j’avais promis 10 commandes, les 3 dernières vont régler le problème avec une facilité déconcertante pour la simple et bonne raison qu’on peut redimensionner le volume root à chaud sans le démonter.

On commence par augmenter la taille du volume root en lui ajoutant 5 Gio (J’ai récupéré 20 Gio sur /home, mais j’en garde sous le coude pour une prochaine fois. A noter qu’il vaudrait mieux laisser de l’espace libre à la création des volumes, lors de  l’installation, afin de palier à ce genre de problème) :

# lvresize --size=+5G /dev/mapper/debian-root

Il ne reste plus qu’à étendre le système de fichiers à tout le volume logique :

# resize2fs /dev/mapper/debian-root

Et pour finir, on vérifie que l’opération s’est bien déroulée :

# df -h

Le serveur est sain et sauf, avec un système de partitions classique, cette opération aurait été bien plus compliquée à mettre en œuvre et surtout plus risquée : la flexibilité et la facilité de LVM en actions !

Sources :

 

… Ou comment sentir poindre sur vous le regard réprobateur de vos amis lors d’une soirée, alors qu’en toute candeur vous abordiez ce fascinant sujet avec un confrère émérite, le « Vos discussions d’admins, ça commence à… » ne tardant jamais à suivre. Le fait est qu’en société, le profane ne goûte guère à vos échanges académiques en la matière. Encore que périodiquement, ils souhaitent connaître votre position sur le « NTLDR is missing, Operating System not found », un sujet qui curieusement semble les intéresser grandement.

Pré-requis :

  • GNU/Linux Debian 6 « Squeeze » dont les partitions sont chiffrées avec LUKS
  • SSH installé

Conventions :

  • prompt : # commande : exécuter la commande sous le compte root ou précédée de la commande « sudo »
  • prompt : $ commande : exécuter la commande sous le compte utilisateur

Cet épineux problème, le montage partition chiffrée pas le NTLDR, survient quand on souhaite chiffrer son serveur GNU/Linux et pouvoir le redémarrer à distance via SSH. En effet, le mot de passe/clé privée est demandé avant le lancement du service SSH, un cas de Jörmungand informatique classique.

Après moultes recherches sur le sujet et divers essais infructueux, je suis tombé sur ce post de l’auteur du tutoriel pour Debian qui indiquait que cette problématique était prise en charge nativement par Debian depuis fin 2008.

On commence par installer Dropbear (un serveur/client SSH) et Busybox (un mini shell avec les commandes basiques). Initrd sera mis à jour lors de l’installation pour inclure ces logiciels.

# apt-get install dropbear busybox

Lors de l’installation de Dropbear, les clés publique /etc/initramfs-tools/root/.ssh/id_rsa.pub et privées /etc/initramfs-tools/root/.ssh/id_rsa sont générées. De plus, la clé publique est automatiquement ajoutée au fichier /etc/initramfs-tools/root/.ssh/authorized_keys.

On va donc récupérer la clé privée sur notre PC local afin l’utiliser pour l’authentification sur le serveur lors du démarrage de ce dernier :

# scp root@myserver:/etc/initramfs-tools/root/.ssh/id_rsa /home/user/

Il ne reste plus qu’à redémarrer le serveur Debian et lancer la commande suivante qui outre l’authentification SSH va déchiffrer le volume LUKS et par la suite monter la partition  :

# ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" -i "/home/user/id_rsa" root@myserver "echo -ne \"myLUKSpassword\" >/lib/cryptsetup/passfifo"

-o « UserKnownHostsFile=~/.ssh/known_hosts.initramfs » : utilise un autre fichier « known_hosts » car la clé publique du serveur SSH « classique » n’est pas identique à celle du serveur Dropbear, sans cette option, le client SSH interpréterait cette nouvelle clé comme une compromission du serveur et refuserait de s’y connecter.

-i « /home/user/id_rsa » : on utilise la clé privée générée lors de l’installation de Dropbear et qu’on a récupérer précédemment.

« echo -ne \ »myLUKSpassword\ » >/lib/cryptsetup/passfifo » : le mot de passe est envoyé dans fichier FIFO /lib/cryptsetup/passfifo ce qui permet le déchiffrage du volume.

Plusieurs remarques pour finir :

  • Si votre mot de passe LUKS contient des caractères exotiques qui peuvent être interprétés par bash pendant l’exécution de la commande SSH, il faut les précéder de \ ou  »  » ou ‘ ‘ afin de les « échapper ».  Le ! par exemple (Se transforme en PID de la commande (asynchrone) exécutée en arrière-plan le plus récemment dixit man bash) nécessite de désactiver l’interprétation de l’historique par la commande set +H avant d’entrer la commande SSH, set -H réactivera l’interprétation de l’historique.
  • Ce tutoriel n’a été validé que sur Debian 6, dans le principe il devrait fonctionner sur d’autres distributions. J’ai cependant vu plusieurs sujets indiquant des problèmes avec Ubuntu à cause notamment de l’utilisation de Plymouth.
  • Je n’ai pas vu de solution utilisant le mot de passe root afin de se connecter au serveur SSH Dropbear mais ça existe peut-être…

Sources :