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é...).
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 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...
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:
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.
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.
Générer la clé aléatoire
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
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
Chiffrement total d'un disque
Quelques explications:
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é!
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
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
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
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
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
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
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 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
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
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é!
Rédaction en cours