Chiffrer ses partitions sous Gentoo

Toi aussi, chiffre tes partitions avec dm-crypt/cryptsetup/luks sous Gentoo (et OpenRC – c’est différent avec systemd).

Ceci est un retour d’expérience suite à une problématique cliente.
L’installation de Gentoo ne sera pas décrite ici. [1]

– Boot via un sysrescue.
– Création des partitions via fdisk

modprobe dm-crypt
fdisk /dev/xvda

– Entre en jeux cryptsetup (y’a plein d’option possible [2] [3])

cryptsetup luksFormat -s 512 /dev/xvda{2,3,4} -s 512

– On monte nos partitions pour pouvoir suivre l’installation de Gentoo

cryptsetup luksOpen /dev/xvda{2,3,4} {root,swap, var}
mkfs.ext4 /dev/mapper/{root,var}
mkswap /dev/mapper/swap

– On suit l’installation Gentoo normalement, puis on attaque le fun

USE="crypt cryptsetup" emerge cryptsetup genkernel
rc-update add dmcrypt boot

– Au niveau du kernel, on fait attention à ce que

Device Drivers
Multi-device support (RAID and LVM)
[*] Multiple devices driver support (RAID and LVM)
 Device mapper support
 Crypt target support
Cryptographic API
 SHA256 digest algorithm
 AES cipher algorithms

– Puis on compile le kernel et on fait l’initramfs

genkernel --luks --menuconfig all

– On install grub comme d’hab

- /etc/default/grub

GRUB_CRYPTODISK_ENABLE=
GRUB_CMDLINE_LINUX="crypt_root=/dev/xvda2 root rootfstype=ext4"

grub2-install --modules="linux search_fs_uuid luks" --recheck /dev/xvda
grub2-mkconfig -o /boot/grub/grub.cfg

– /etc/fstab

/dev/mapper/root / ext4 defaults,noatime,nodiratime ...
/dev/mapper/var /var ext4 ....

– /etc/conf.d/dmcrypt (Gentoo n’utilise pas crypttab).

target=swap
source='/dev/xvda3'
key='/root/passwd'

## /var with passphrase
target=var
source='/dev/xvda4'
key='/root/passwd'

– Création de la clef pour /var et swap

dd if=/dev/urandom of=/root/passwd bs=1 count=2048
chmod 400 /root/passwd
cryptsetup luksAddKey /dev/xvda{3,4} /root/passwd

Donc là, normalement c’est censé faire le taff tout seul et monter correctement les partitions supplémentaires.

Pour une raison que j’ignore, il ne monte pas chez moi la partition /var , j’ai donc mis en place aun gruikage

cat /etc/init.d/mountencrypt
#!/sbin/runscript
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

depend() {
before apache2 mysql syslog-ng vixie-cron postfix zabbix-agentd
}

start() {
mount-var
}
cat /usr/local/bin/mount-var
#!/usr/bin/env sh

if cryptsetup status /dev/mapper/var | egrep -q ' is active'; then
mount /var
fi

Si vous avez mieux, je suis preneur.

[1] https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation
[2] https://wiki.gentoo.org/wiki/DM-Crypt_LUKS
[3] http://www.gentoo-wiki.info/SECURITY_System_Encryption_DM-Crypt_with_LUKS
[4] https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt