# [LUKS] Montage au boot de deux disques distincts.

## lmarcini

Bonjour,

Je viens de terminer une installation en ~amd64 sur mon nouveau laptop, en full GPT/EFI sans grub.

Sur cette machine, j'ai deux disques : un sda SSD de 256Go et un sdb classique de 1To.

Les deux disques sont chiffrés (avec le même mot de passe) et l'amorçage s'effectue correctement après demande du mot de passe sur le premier disque. Les paramètres de boot sont passés en dur dans le noyau (EFI boot stub oblige), celui étant généré via genkernel. Pour l'instant, je monte à la main via un "dmcrypt luskOpen" le second disque.

Je cherche donc monter et dévérouiller les deux disques en même temps, au boot. Avec, cerise sur le gâteux, une seul saisie de mot de passe.

Merci d'avance !

----------

## boozo

'alute

Au préalable, je signale que je passerai sur les spécificités UEFI/GPT que je ne maitrise pas un brin et supposerai que tu as un initramfs avec tout ce qui va bien (vu que tu bootes une racine qui doit être le ssd... j'ai bon ?), et présupposerai aussi que tu as pris l'option keyfile "simple" sur le disque (càd pas de signature gpg ni de support média externe) et qu'il n'y a pas de lvm sousjacent... 

Normalement en cas "simple", l'init script dmcrypt le fait sans trop sourciller d'habitude (quoique j'ai toujours maille à partir avec gnupg sur un laptop mais c'est un cas plus trappu   :Laughing:   ) donc là, où se situe le problème à l'heure actuelle ? (oui... je me doute bien que si tu postes c'est que tu dois tourner en rond avec depuis un moment a essayer différentes combinaisons  :Wink:  )

Qu'as-tu comme config pour tes disques i.e. un truc dans ce goût-là ?

```
## SSD (/)

target=vg_crypt_root

source='/dev/sdax'

options='--cipher <yours>'

key='/full/path/to/rootkey'

## HDD (/home)

target=vg_crypt_home

source='/dev/sdbx'

options='--cipher <yours>'

key='/full/path/to/homekey'

```

Edit: Pardon... suis parti plein champ et j'ai loupé le cas de base pourtant écrit en clair  :Embarassed:   : alors, je ne crois pas que tu puisses te passer d'une seconde saisie dans ce cas-là (que tu utilises l'initscript cryptsetup ou que tu passes par local.start voire le fstab directement)

A mon sens tu dois nécessairement stocker ta clé qqpart d'où l'option "keyfile" (btw, c'est un laptop avec TPM p.e. ?)

----------

## lmarcini

Merci Boozo pour ta réponse rapide.

Voici l'historique de la construction de mes volumes :

```
#partitionnement

sgdisk -og /dev/sda

sgdisk -n 1::+512M -t 1:ef02 -c 1:"EFI boot" /dev/sda

sgdisk -n 2 -t 2:8e00 -c 2:"System encrypted" /dev/sda

#chiffrement

cryptsetup -c aes-xts-plain -s 512 luksFormat /dev/sda2

cryptsetup luksOpen /dev/sda3 crypto

Création des volumes LVM

#lvm

pvcreate /dev/mapper/crypto

vgcreate crypto /dev/mapper/crypto

lvcreate -L 16G -n swap crypto

lvcreate -L 30G -n root crypto

lvcreate -L 10G -n portage crypto

lvcreate -l 100%FREE -n home crypto

```

Le chiffrage est de type "password based auth" et le fichier /etc/default/dmcrypt est entièrement commenté.

Quant aux paramètres de boot ajoutés au kernel (Processor type and features -> Built-in kernel command string), il s'agit de : 

```
dolvm crypt_root=/dev/sda2 real_root=/dev/mapper/crypto-root root=/dev/mapper/crypto-root rootfstype=ext4 quiet
```

Le second disque est chiffré de la même façon.

----------

## boozo

Ok bon j'ai tout faux ou presque   :Laughing: 

Donc si je te suis : tu as fait un "gros conteneur" Luks sur ton ssd pour héberger tes vm racine et /home séparés et c'est ton init script depuis l'initramfs qui gère le tout. Mais pourquoi le /etc/conf.d/dmcrypt n'est-il pas mis en oeuvre ?

De afit le sdbx intervient qd dans ta séquence et comment le montes-tu (local.start, fstab, ..) ?

----------

## lmarcini

Oui, C'est exactement cela. Je pense que le conf.d/dmcrypt n'est pas nécessaire vu que genkernel fonctionne avec l'option luks activée.

Sinon, je ne monte pas le sdb automatiquement. Je le monte quand j'en ai besoin avec un cryptesup luksOpen. L'install de la machine est très fraîche...

----------

## boozo

Oui ok mais unefois que ton initramfs a passé la main pour :

1° mapping

2° délocker le conteneur Luks

3° montage des volumes lvm

4° la montage de la racine, et du reste

le reste de tes services ils sont lancés classiquement si je ne m'abuse non ? si tu veux faire un montage de disque ensuite il faut bien mettre cette action quelque part si tu veux que ce soit automatique d'où ma question (ou alors j'ai encore raté qqch)

Btw, une fois encore si tu ne veux pas avoir à ressaisir de passwd pour le second disque ben... je ne vois guère que passer via un keyfile pour celà (quitte a ajouter cette nouvelle clé pour conserver le mode passwd autentifié si besoin)

Edit: En fait à la relecture du premier post, je ne suis pas sûr de bien compendre le besoin "montage des 2 disques au boot" : tu veux dire les gérer _tous les 2_ durant la séquence réalisée par l'initramfs ?

----------

## lmarcini

Ça se passe exactement comme cela.

Ma question initiale concerne en fait la possibilité de :

2) délocker sda ET sdb (hypothèse pessimiste = 2 saisies de password)

3) monter les volumes LVM des deux disques.

Pour le 4) tout roule...

----------

## lmarcini

 *boozo wrote:*   

> 
> 
> Edit: En fait à la relecture du premier post, je ne suis pas sûr de bien compendre le besoin "montage des 2 disques au boot" : tu veux dire les gérer _tous les 2_ durant la séquence réalisée par l'initramfs ?

 

Oui, c'est "les gérer _tous les 2_ durant la séquence réalisée par l'initramfs" !

----------

## boozo

 *lmarcini wrote:*   

> Ça se passe exactement comme cela.
> 
> Ma question initiale concerne en fait la possibilité de :
> 
> 2) délocker sda ET sdb (hypothèse pessimiste = 2 saisies de password)
> ...

 

J'avais édité mon post entre-temps donc en effet c'est l'init script (de l'initramfs) qu'il faut modifier mais en revanche je fait çà à la mano et ne l'ai jamais fait via genkernel - j'ai pas cherché mais ce doit être possible d'éditer/paraméter avec lui aussi -  

Cependant dans tous les cas, délocker les 2 disques en une seule fois en mode saisie passwd depuis stdin c'est pas possible à ma connaissance car chaque commande cryptsetup le réclamera ; d'où ma propal d'essayer d'ajouter une clé de plus en mode keyfile pour le second disque i.e. => 1ère cmd cryptsetup == passwd ; la 2nd en keyfile

Edit: quoique en étant tordu et en passant par un "# tee" ?... sait pas je dis peut-être une co******, faut voir...

----------

## lmarcini

Merci Boozo. Je vais creuser ces pistes...

----------

## boozo

bah j'ai rien fait sur le fond  :Embarassed:   mais ton retour m'intéresse (et l'en parle même pas si tu passes ensuite en signature gpg sur usb  :Mr. Green:  )

Je vais voir ce que je trouve côté genkernel mais il doit y avoir un script du genre ci-dessous que tu pourras éditer puis uen option pour re-générer l'initramfs via genkernel

```
#!/bin/busybox sh

#

mount -t proc none /proc

mount -t sysfs none /sys

mount -t devtmpfs none /dev

# Do cryptsetup stuff

# i.e.

cryptsetup luksOpen /dev/sdax <name> &&

cryptsetup --key-file <point_de_montage/sdbx_key> luksOpen /dev/sdbx <name> # && ...

# Do LVM stuff

# Do other things i.e.

#mount -t <fs> -o <options> /dev/mapper/root <name>

 

umount /{proc,sys,dev,...}

 

exec switch_root blahblah
```

----------

