Préambule
La procédure suivante vous montrera comment monter des partitions virtuelles cryptées.



Environnement
Pour les opérations suivantes, j'ai installé un noyau 2.6 sur ma Slackware 9.1.
Les options importantes, outres celles qui feront tourner votre machine ..., sont celles concernant la cryptographie (que j'ai choisi d'inclure directement dans le noyau plutôt qu'en modules) et dans "Device Drivers" -> "Block Devices" -> "Loopback device support" -> "Cryptoloop Support" activé le tout lié aussi avec le noyau.
Si vous choisissez de le laisser en modules ces composants pensez à faire :
  • modprobe cryptoloop #pour utiliser les composant "loopback" de cryptographie
  • modprobe cipher-{twofish,serpent,...} #pour utiliser le mode de cryptographie twofish, serpent , ... cf /usr/src/linux-2.6.X/crypto
Enfin, travaillez avec l'uid 0 (zéro),i.e. root cela simplifira la procédure.


Etape 1 : Créer un fichier d'accueil
Ce fichier sera celui qui correspondra à la partition logique que vous voulez crypter. En clair ce fichier sera un équivalent logique d'un /dev/hdXX en IDE ou /dev/sdXX en SCSI.
Dans notre exemple nous aurons un fichier de 10 Mo mais vous pouvez choisir la taille qui vous plait dans la limite de la taille maximale autorisé par le système de fichier.
Alors on y va :
dd if=/dev/zero of=monFichier bs=512k count=20
ou
dd if=/dev/zero of=monFichier bs=1M count=10
ou
dd if=/dev/urandom of=monFichier bs=1M count=10
Les deux premières méthodes sont équivalentes, la troisième plutôt que de remplir le fichier de NULL ( \0 ) le remplira de nombres aléatoires.


Etape 2 : Gratter le ventre du chat
Dans les étapes importantes on retrouve évidemment le grattage de ventre du chat, ça détend et le chat et la personne qui gratte.


Etape 3 : Formatter le fichier
Pour formatter le fichier il faut passer par une boucle locale afin de le faire passer pour un disque virtuel.
Pour cela :
  • losetup -e serpent /dev/loop0 monFichier #serpent pour l'algorithme correspondant, vous avez aussi twofish, blowfish, aes, ...
losetup vous demande un mot de passe, retenez le bien car si vous le perdez il sera difficile de le retrouver. Ce mot de passe ne sera enregistré nulle part. losetup ne vous demande aucune confirmation et quand vous voudrez accéder à cette partition de nouveau, si vous rentrez un mauvais mot de passe il n'y aura aucun message d'erreurs lors de cette opération par contre la suite échouera puisque seule la bonne combinaison algorithme/mot de passe donne un résultat correct.
Ensuite :
  • mkfs -t ext3 /dev/loop0 #pour formatter en ext3, mais tous les autres formats sont autorisés


Etape 4 : Accéder au système de fichiers
Rien de plus simple pour cette étape :
  • mount /dev/loop0 repDeMontage
  • cd repDeMontage
Ensuite vous pouvez faire n'importe quelle opération sur le fichier via le répertoire de montage comme sur n'importe quel périphérique rattaché à l'aborescence.
Il est important de comprendre que c'est le système, via la boucle locale cryptée (lostep -e), qui gère l'accès au fichier. Cela signifie qu'une fois monté, si les donnés ne sont pas protégées via les mécanismes habituels (chmod, gestion des utilisateurs, ...), cela ne sert à rien. Cette manipulation sert uniquement dans le cas de la perte du support physique (i.e. clef USB, disque extractible, ...).
En ce qui concerne le nombre de partitions de ce type, il y a 16 boucles locales possibles par défaut (/dev/loop0 .. /dev/loop15) donc potentiellement 16 répertoires simultanément mais cela est extensible jusqu'à 256 (cf /usr/src/linux-2.6.X/drivers/block/loop.c).


Etape 5 : Libérer les ressources
En premier libérer le point de montage :
  • umount repDeMontage
  • cd repDeMontage
Enfin libérer la boucle locale :
  • losetup -d /dev/loop0


Etape 6 : Accéder derechef aux données
  • losetup -e serpent /dev/loop0 monFichier #serpent pour l'algorithme correspondant, vous avez aussi twofish, blowfish, aes, ...; ne vous trompez NI d'algorithme, NI de mot de passe
  • mount /dev/loop0 repDeMontage #ici vous aurez un plantage si vous vous êtes trompés soit de mot de passe, soit d'algorithme.


Etape 7 : Automatiser le tout pour un user non-root
Pour un utilisateur david : Créez dans son répertoire un fichier .datas que vous attribuez ensuite au user:
  • dd if=/dev/zero of=.datas bs=1M count=10
  • chown david:users .datas #:users si david est dans le group users, cf /etc/passwd et /etc/group
Créez un sous-répertoire donnees auquel vous lui donnez accès :
  • mkdir donnees
  • chown david:users donnees
Copiez dans son répertoire les deux scripts suivants : Modifiez le fichier .bash_login (je suppose que vous utilisez le bash), s'il n'existe pas créez le et ajoutez les lignes suivantes :
  • ~/connect.sh
  • cd ~/donnees/
Idem pour le fichier .bash_logout, ajoutez les lignes suivantes :
  • cd ~
  • ~/disconnect.sh
Enfin via la commande visudo rajouter dans le fichier /etc/sudoers
  • david ALL = NOPASSWD: /sbin/losetup -e serpent /dev/loop0 .datas
  • david ALL = NOPASSWD: /sbin/mount /dev/loop0 /home/david/donnees/
  • david ALL = NOPASSWD: /sbin/umount /home/david/donnees/
  • david ALL = NOPASSWD: /sbin/losetup -d /dev/loop0
Cela permettra au user david d'avoir accès à ces commandes en tant que root.
Les scripts sont à améliorer dans la mesure où ils ne sont pas génériques et amène une maintenance lourde.


Retour à la page d'accueil mail Retour au portail