Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 02-03-2015 18:50:20

ArtaxerxesFr
Membre
Inscription : 10-07-2014

[Résolu] : Démarrage partition chiffrée avec clé OU mot de pas

Bonjour,

j'ai récemment installé une Debian sur des partitions chiffrées avec cryptsetup et LUKS.

Je souhaiterais pouvoir démarrer sur la partition que laquelle est montée la racine du système, soit :
- Par le biais d'une clé, placé sur un support amovible (cela j'y parviens)
- OU en saisissant un mot de passe si la clé est introuvable.

Quelqu'un pourrait m'aider svp ?


J'ai comme partions lvm, dans le conteneur LUKS:
- Une partition root
- Une partition de données (je crée des liens depuis le /home vers les fichiers de cette partition.
- Une swap
- Deux partitions vides destinées à tester des distributions.

J'ai ajouté une clé dans un slot de la partition root. Pour booter sur la partition root, j'ai récupéré un script, appelé dans /etc/crypttab, qui récupère la clé et la fournit (via un echo) à cryptsetup au démarrage. Cela se passe sans problème.

En revanche si la clé est absente, le démarrage s'interrompt et j'obtiens le message d'erreur "cryptsetup : cryptsetup failed, bad password or options ?" puis une invite sur ce qui me semble être la console busybox ou initramfs.

En examinant plusieurs tutoriels (références en bas de page) je ne suis pas parvenu à trouver une solution à ce problème.

Auriez-vous une solution oou des pistes à examiner s'il-vous-plaît ?

Ci-dessous :
- le contenu du fichier /etc/crypttab (les lignes précédée d'un # correspondent à des tentatives infructueuses

# <target name>   <source device>      <key file>   <options>
tank      UUID=61a4c4e4-708d-4012-a7df-fc7bae0e8391   tank.key   luks,keyscript=/etc/initramfs-tools/scripts/tank.sh
#tank      UUID=61a4c4e4-708d-4012-a7df-fc7bae0e8391   none      luks,keyscript=/etc/initramfs-tools/scripts/tank.sh
#tank      UUID=61a4c4e4-708d-4012-a7df-fc7bae0e8391   tank.key   luks,tries=1,timeout=3
#tank      UUID=61a4c4e4-708d-4012-a7df-fc7bae0e8391   UUID=a248a493-7ae2-448d-87f1-084da8057994:tank.key   luks,keyscript=/etc/initramfs-tools/scripts/tank.sh
#tank      UUID=61a4c4e4-708d-4012-a7df-fc7bae0e8391   UUID=a248a493-7ae2-448d-87f1-084da8057994:tank.key   luks
sav      UUID=90e1c47b-5173-498d-89d9-fedaf20986bb   savLx0.key   luks,keyscript=/etc/initramfs-tools/scripts/savLx0.sh




- Le script appelé dans /etc/crypttab et situé dans /etc/initramfs-tools/scripts

#!/bin/sh

# Modif en statique
mkdir /keyTmpMnt 2>/dev/null
mount UUID=a248a493-7ae2-448d-87f1-084da8057994 /keyTmpMnt -t ext4 2>/dev/null
cat /keyTmpMnt/LUKS/tank.key 2>/dev/null
umount /keyTmpMnt 2>/dev/null
rmdir /keyTmpMnt 2>/dev/null

exit

# Principe : Monter la partition contenant la clé du conteneur LUKS et la lire

# Définition des variables
tmpMnt="/keyTmpMnt"
keyDev=""
keyPath="LUKS"
keyFile="tank.key"
keyPartUUID="a248a493-7ae2-448d-87f1-084da8057994"
keyPartfs="ext4"
keybool=0 # flag indiquant si la clé a été lue ou non

# Extraction du dev correspondant à l'UUID de la partition contenant la clé

keyDev=$(blkid | grep $keyPartUUID | cut -d: -f1)

# chargement des modules nécessaires

modprobe usb-storage >/dev/null 2>&1
modprobe ext2 >/dev/null 2>&1

# Création d'un répertoire temporaire (s'il n'existe pas déjà)  où monter la partition contenant la clef
if test ! -d $tmpMnt; then
   mkdir $tmpMnt 2>/dev/null
   echo "Création du point de montage"
else
   echo "Point de montage préexistant"

fi

# Montage de la partition si ce n'est pas déjà fait.
if test "$(mount -l | grep $tmpMnt | wc -m)" -eq 0; then
   #mount $keyDev $tmpMnt -t $keyPartfs -o ro 2>/dev/null
   #Modif
   mount $keyDev $tmpMnt
   echo "Montage de la partition contenant la clé"
else
   echo "Partition déjà montée"
fi

# Affichage de la clé
if test -f $tmpMnt/$keyPath/$keyFile; then
   cat $tmpMnt/$keyPath/$keyFile 2>/dev/null
   keybool=1
   echo "Le conteneur LUKS est ouvert"
else
   # Tentative de saisie du mot de passe
   echo -n "Essai de saisie du mot de passe: " >&2
   read -r A
   echo -n "$A"
fi

#~ # Nettoyage
sleep 1
umount $tmpMnt 2>/dev/null
rmdir $tmpMnt 2>/dev/null







Je suis à votre disposition pour vous communiquer toute information complémentaires.

Par avance merci smile

PS: Liste non exhaustive des tutoriels consultés :
- http://www.linuxpedia.fr/doku.php/exper ... cryptsetup
- http://vesta.homelinux.free.fr/wiki/cry ... ebian.html
- http://doc.ubuntu-fr.org/cryptsetup
- http://korben.info/comment-chiffrer-une ... buntu.html
- http://wejn.org/how-to-make-passwordles ... 02760c694b

Dernière modification par ArtaxerxesFr (21-03-2015 09:52:31)

Hors ligne

#2 04-03-2015 18:47:04

ArtaxerxesFr
Membre
Inscription : 10-07-2014

Re : [Résolu] : Démarrage partition chiffrée avec clé OU mot de pas

up. svp.

Hors ligne

#3 20-03-2015 10:42:48

ArtaxerxesFr
Membre
Inscription : 10-07-2014

Re : [Résolu] : Démarrage partition chiffrée avec clé OU mot de pas

Bonjour,

Je me réponds à moi-même en éspérant que cela peut servir à quelqu'un d'autre.

Mon problème venait du fait que le script utilisé était incorrect. J'ai donc corrigé le script et mon problème est maintenant corrigé.

Ma situation est la suivante :
- J'ai chiffré l'ensemble des partitions utilisées par Linux (OS, données et swap). L'ensemble des partitions est situé dans un conteneur LUKS
- J'ai mis sur une clé USB la partition de boot et les clés permettant de déchiffrer les partitions.
- Je cherche à pouvoir déchiffrer le conteneur LUKS avec (en laissant la clé USB après le démarrage) ou sans clé  (en l'enlevant juste après le chargement du noyau)

La solution consiste à s'appuyer sur un script bash.

Les étapes de la mise en place sont les suivantes :
- Ajouter dans le fichier crypttab une ligne de décryptage du conteneur LUKS en précisant l'adresse d'un script et la clé (je pense que ce dernier point est inutile)

tank  UUID=61a4c4e4-708d-4012-a7df-fc7bae0e8391 tank.key  luks,keyscript=/etc/initramfs-tools/scripts/tank.sh


- Ajouter un script (nommé ici tank.sh) dans /etc/initramfs-tools/scripts. Le script est ci-dessous


#!/bin/sh

# Principe : Monter la partition contenant la clé du conteneur LUKS et la lire

# Définition des variables
tmpMnt="/keyTmpMnt"                 # Répertoire temporaire sur lequel est montée le périphérique amovible contenant la clé
keyDev=""                     # Point de montage
keyPath="LUKS"                    # Répertoire contenant la clé
keyPartUUID="a248a493-7ae2-448d-87f1-084da8057994"  # UUID de la partition contenant la clé
keyPartfs="ext4"                  # Système de fichier de la partition contenant la clé
keyFile="tank.key"                  # nom du fichier contenant la clé

# On laisse l'ensemble des partitions être prises en compte
sleep 1

# Extraire le point de montage sur lequel la clé est
keyDev=$(blkid | grep "$keyPartUUID" | cut -d: -f1)

# Si le répertoire temporaire de montage de la partition contenant la clé n'existe pas, on le créé
if test ! -d "$tmpMnt"; then
  mkdir "$tmpMnt" 2>/dev/null
fi

# On vérifie que ni la partition contenant la clé, ni le répertoire de montage ne sont montés
if ! $(mount | grep "$tmpMnt") && ! $(mount | grep "$keyDev"); then
 
  # On monte la partition contenant la clé sur le répertoire temporaire de montage
  mount "$keyDev" "$tmpMnt" -t ext4 2>/dev/null
 
  # Si on peut lire la clé, on l'affiche et on la transmet à cryptsetup
  if test -f "$tmpMnt/$keyPath/$keyFile"; then
    cat "$tmpMnt/$keyPath/$keyFile"
  else
  # Sinon, on demande la saisie du mot de passe
    echo "Pas de clé valide trouvée" >&2
    echo -n "Saisie du mot de passe : " >&2
    read -s -r A
    #~ read -r A
    echo -n "$A"
  fi

else
  echo "Impossible de monter le périphérique sur son point de montage" >/dev/null 2>&1
fi

sleep 1
umount "$tmpMnt" #2>/dev/null
rmdir "$tmpMnt" #2>/dev/null

 




- mettre à jour l'initramfs de la manière habituelle :

update-initramfs -u -k all




Le problème n'est pas intégralement résolu car lors de la mise à jour de l'initramfs, j'obtiens les messages suivants :


/var/tmp/mkinitramfs_Xtmv5f/scripts/old/tank.sh: 31: /var/tmp/mkinitramfs_Xtmv5f/scripts/old/tank.sh: /dev/sdd4: Permission denied
Pas de clé valide trouvée
Saisie du mot de passe : /var/tmp/mkinitramfs_Xtmv5f/scripts/old/tank.sh: 43: read: Illegal option -s
update-initramfs: Generating /boot/initrd.img-3.2.0-4-amd64
/var/tmp/mkinitramfs_NZSiXA/scripts/old/tank.sh: 31: /var/tmp/mkinitramfs_NZSiXA/scripts/old/tank.sh: /dev/sdd4: Permission denied
Pas de clé valide trouvée
Saisie du mot de passe : /var/tmp/mkinitramfs_NZSiXA/scripts/old/tank.sh: 43: read: Illegal option -s
 



Cependant, en dépit de ce message, le problème est corrigé. Cela fonctionne depuis plusieurs semaines de mon côté. Ainsi, si je laisse la clé USB branchée, le système décrypte les partitions et se lance et s'il n'y a pas de clé, le système demande de la saisir.

Dernière modification par ArtaxerxesFr (20-03-2015 10:44:18)

Hors ligne

Pied de page des forums