× Warning! Currently only available in French, this article will be translated in English soon.
Par F0cks le 17 Août 2017. Màj le 4 Octobre 2017.

Description

J'ai un ordinateur qui possède trois disques durs. Il fonctionne en dual-boot avec deux SSD: un avec Windows et l'autre avec Ubuntu. Le troisième est un HDD qui me sert de stockage. Par souci de sécurité en cas de vol, je veux chiffrer entièrement ce disque et être capable de le monter quelque soit le système d'exploitation utilisé (même si partager un disque entre deux OS n'est pas franchement recommandé...).

schema-chiffrement

Schéma de fonctionnement

Le SSD contenant Windows est complètement chiffré avec Bitlocker (natif Windows). Celui contenant Ubuntu est chiffré avec LUKS (natif Linux). Il m'a paru compliqué de déchiffrer le HDD avec un OS lorsqu'il a été chiffré par l'autre. J'ai donc choisi un logiciel qui est utilisable sur Ubuntu comme sur Windows pour me permettre de déchiffrer le disque: VeraCrypt.


veracrypt-logo

VeraCrypt est un logiciel open source développé par une société française (IDRIX). Que du bon! C'est le descendant de TrueCrypt pour les connaisseurs. Il permet de monter un disque virtuel, à partir d'un disque ou d'un conteneur chiffré, grâce à une méthode d'authentification : mot de passe, clé, etc...

Ubuntu

Installation de VeraCrypt

Il faut tout d'abord se rendre sur le site officiel dans la rubrique download: https://www.veracrypt.fr/en/Downloads.html

On télécharge ensuite la version compatible linux, à l'heure actuelle: veracrypt-1.21.

On a ensuite accès à 4 fichiers d'installation:

  • veracrypt-1.21-setup-console-x64
  • veracrypt-1.21-setup-console-x86
  • veracrypt-1.21-setup-gui-x64
  • veracrypt-1.21-setup-gui-x86

Comme je n'ai pas envie qu'une fenêtre apparaisse au démarrage d'Ubuntu lorsque VeraCrypt se lance, je vais l'installer uniquement en mode console:

./veracrypt-1.21-setup-console-x64

On choisit ensuite l'option "1" qui permet de télécharger et installer Veracrypt.

On appuie sur ENTRÉE ou CTRL+V jusqu'à arriver en bas de la licence puis on accepte en tapant yes.

On tape ensuite son mot de passe administrateur puis on appuie sur ENTRÉE à la fin de l'installation.


Générer une clé aléatoire

Avant toute chose, nous allons générer un fichier contenant un clé aléatoire. Elle nous permettra de ne pas demander de mot de passe à l'utilisateur (moi) à chaque démarrage. Pour rappel, le but est de protéger contre le vol. Il est facile de monter le disque avec ce fichier une fois que l'OS est démarré. Cependant, il est tout à fait possible de stocker ce fichier sur une clé USB ou autre. D'ailleurs, je conseille vivement de stocker cette clé à différents endroits (clé USB, serveur, etc...) pour pouvoir la retrouver si elle est malencontreusement effacée. Sans ça, le disque deviendrait inutilisable...

Créons une clé data-keyfile dans le dossier Document. Pour cela, nous allons utiliser la commande:

veracrypt --create-keyfile ~/Documents/data-keyfile

Il faudra ensuite taper aléatoirement 320 touches du clavier! Pas moins!... Si on appuie sur ENTRÉE avant, la console nous indiquera combien il reste de touches à taper. Si c'est bon, elle affichera:

Keyfiles have been successfully created.

generate-key

Générer la clé aléatoire


Chiffrement du disque dur

Attention! Toutes les données contenues sur le disque que vous sélectionnerez seront effacées! Pensez à sauvegarder!

Pour commencer, il faut chercher le disque dur qui nous intéresse. On va utiliser la commande :

sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL

list-disks

Lister les disques disponibles


On peut voir dans la console un disque de 2go (que j'ai créé pour l'exemple) sdb avec une partition prenant l'intégralité de l'espace sdb1. Le chemin du disque à chiffrer est donc /dev/sdb1. La commande que nous allons utiliser est la suivante:

sudo veracrypt --keyfiles ~/Documents/data-keyfile  --volume-type=normal  --encryption=AES --hash=SHA-512  --filesystem=NTFS --create /dev/sdb1
create-fulldisk-encryption

Chiffrement total d'un disque


Quelques explications:

  • keyfiles: on pointe le fichier contenant notre clé (~/Documents/data-keyfile)
  • volume-type: on précise qu'on veut un volume normal et pas hidden
  • encryption: algorithme de chiffrement utilisé (AES)
  • hash: fonction de cryptographie utilisée (SHA-512)
  • filesystem: type de partition une fois le disque monté (NTFS)
  • create: chemin d'accès vers la partition du disque (/dev/sdb1)

Pendant le création du chiffrement, lorsqu'on nous demande un mot de passe:

Enter password:

Il suffit de taper sur ENTRÉE. On ne veut pas en utiliser.

De même pour le PIM (Personal Iterations Multiplier) qu'on laisse par défaut.

Enfin, il faut encore entrer une combinaison aléatoire de 320 touches et c'est terminé! Notre disque est totalement chiffré!

Monter/démonter le disque dur chiffré

Pour monter le disque chiffré, il suffit de spécifier son chemin d'accès /dev/sdb1 et le point de montage, disons /media/veracryt1. On précisera aussi qu'on ne souhaite pas utiliser de mot de passe -p "" mais plutôt la clé que nous avons générée -k ~/Documents/data-keyfile. Nous utilisons le PIM par defaut --pim=0 et enfin nous n'utilisons pas la protection en écriture pour les volumes cachés --protect-hidden=no (ce qui en soit ne nous concerne pas, mais la console nous le demande si on ne le précise pas...).
Finalement, la commande pour monter le disque est :

veracrypt -p "" -k ~/Documents/data-keyfile --pim=0 --protect-hidden=no /dev/sda1 /media/veracrypt1
mount-encrypteddisk

Disque chiffré monté


Pour le démonter, il suffit d'utiliser le paramètre --dismount avec le point de montage du disque /media/veracrypt1:

veracrypt --dismount /media/veracrypt1
unmounted-disk

Disque chiffré démonté


On peut aussi démonter tout ce qui est monté par VeraCrypt avec la commande (qui nous servira plus tard):

veracrypt -d

Scripts d'automatisation

Nous allons créer un script qui lancera au démarrage de l'ordinateur les commandes de montage et démontage du disque.

Tout d'abord, il va nous falloir notre identifiant utilisateur (UID), pour ma part f0cks:

id -u $user
user-id

Identifiant utilisateur


L'UID (pour moi 1000) va nous servir à nous donner les droits sur le dossier que nous allons monter en NTFS au démarrage par le root. On va maintenant s'attaquer au script lui-même. Plaçons le dans ~/Documents/Scripts :

mkdir ~/Documents/Scripts
nano ~/Documents/Scripts/startup.sh

On commence par l'interpréteur:

#!/bin/bash

On s'assure que tout est bien démonté au démarrage:

#Dismount any mouted volume
veracrypt -d
sleep 1

Enfin on monte le disque. Attention, pour la clé on utilise bien le chemin complet /home/'user'/Documents/data-keyfile. Le script sera lancé par le root donc ~/Document/... n'aurait pas la même signification. On oublie pas d'ajouter l'option --fs-options=uid=1000 pour monter le disque avec les droits de notre utilisateur et pas ceux du root.

#Mount volume
veracrypt -p "" -k /home/f0cks/Documents/data-keyfile --pim=0 --protect-hidden=no --fs-options=uid=1000 /dev/sdb1 /media/veracrypt1
exit
script

Script


On peut vérifier le bon fonctionnement du script en le lançant depuis le terminal:

sudo chmod +x ~/Documents/Scripts/startup.sh
sudo ~/Documents/Scripts/startup.sh

De la même manière, nous allons créer un script qui permettra de démonter le disque lorsque nous fermerons Ubuntu:

nano ~/Documents/Scripts/shutdown.sh

Dans celui là nous allons simplement écrire:

#!/bin/bash
#Dismount any mouted volume
veracrypt -d
exit

Finalisation

On a maintenant tous les outils pour automatiser le montage et le démontage du disque. Comme les scripts vont être lancés en mode administrateur, il est important d'éviter que n'importe qui puisse les modifier et les utiliser pour lancer une commande non voulue... On va donc changer les droits pour n'autoriser que l'exécution en root:

sudo chmod 100 ~/Documents/Scripts/startup.sh
sudo chown root:root ~/Documents/Scripts/startup.sh sudo chmod 100 ~/Documents/Scripts/shutdown.sh
sudo chown root:root ~/Documents/Scripts/shutdown.sh
droits

Droits du script


J'ai essayé beaucoup de techniques lancer automatiquement le script startup.sh au démarrage... Cron, systemd... Rien à faire, les droits imposés sur le dossier de montage ne sont pas respectés... Pourtant le script fonctionne très bien lorsque je le lance en root. La seule solution que j'ai trouvée est d'autoriser la commande sudo avec ce script, sans utiliser de mot de passe. Pas très sûr on me dira! C'est vrai, mais les risques sont minimes puisque le script n'est disponible pour personne en lecture ni en écriture.

Pour cela nous allons créer une régle:

sudo nano /etc/sudoers.d/customRules

Nous allons y ajouter les lignes suivantes:

#Allow startup script
f0cks ALL = NOPASSWD: /home/f0cks/Documents/Scripts/startup.sh
customRule

Régle de sudoers


On va maintenant exécuter notre script lorsque l'utilisateur se connecte à sa session:

nano ~/.profile

Et on ajoute à la fin du fichier:

# automount veracrypt
sudo ~/Documents/Scripts/startup.sh
profile

Lancer le script au login


Enfin, pour démonter le disque lors d'un shutdown ou d'un reboot, on va créer un service dans systemd:

sudo nano /etc/systemd/system/stop.service

Puis on y ajoute cette config qui pointe vers notre script de shutdown:

[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target

[Service]
Type=oneshot
ExecStart=/home/f0cks/Documents/Scripts/shutdown.sh  #shutdown script

[Install]
WantedBy=halt.target reboot.target shutdown.target

Puis on l'active:

sudo systemctl enable stop.service

Tout devrait être fonctionnel, il n'y a plus qu'à redémarrer l'ordinateur pour vérifier que le disque est bien monté!

Windows



Rédaction en cours

Image

Comments


Leave a comment: