Install Archlinux crypt

De cyberesprit.fr
Aller à : navigation, rechercher

Introduction

Ce tutoriel a pour but de montrer la procédure pour installer la distribution Archlinux avec toutes les partitions chiffrées sauf /boot (et gpt) avec dmcrypt (niveau 1) et chaque dossier personnel chiffré avec ecryptfs (niveau 2).

Vous pourrez utiliser également un chiffrement de niveau 3 avec par exemple encfs (utilisable en espace utilisateur) pour chiffrer des dossiers, mais cette partie ne sera pas traitée ici.

Les techniques utilisées ici sont étroitement similaires à ce que propose l'installateur de la distribution Ubuntu par exemple quand on indique de chiffrer les partitions ainsi que les dossiers utilisateurs.

Installation

On suppose ici que l'ordinateur a démarré sur un média type usb ou cd/dvd, voir réseau, peu importe, et qu'il est en attente sur un terminal. Le disque dur (ou autre média) qui servira pour cette installation est /dev/sda, il vous faudra donc adapter.

Chargement du mappage clavier

Pour un clavier français :

# loadkeys fr-pc

Attention, vous êtes normalement en clavier qwerty avant cette commande !

Remise à zéro

Pour une question de sécurité et éviter la possibilité de récupérer des données non chiffrées qui étaient présentes avant l'installation en cours, il est probablement judicieux d'effacer le contenu du disque, mais ça reste optionnel.

Attention, sauvegardez vos données avant toutes opérations ! Cette opération dure des heures, soyez patient.

# cryptsetup open --type plain /dev/sda container
# dd if=/dev/zero of=/dev/mapper/container
# umount /dev/mapper/container

Partitionnement

Il y a différentes façon de gérer les partitions : l'ancienne façon MBR et la nouvelle façon GPT, au choix.

Partitionnement MBR

Création des partitions

# fdisk /dev/sda

Créer les partitions suivantes :

Pour /boot : type 83 de 100M ou plus
Pour la partie chiffrée (qui contiendra plus tard /, /home et éventuellement la swap) : type 8E de tous ce qui reste

Formattage des partitions

# mkfs.ext2 /dev/sda1

Gestion du drapeau de boot EFI

Ne concerne que les système UEFI ayant démarré sur le média d'installation en mode UEFI.

# parted /dev/sda set 1 boot on

Partitionnement GPT

Création des partitions

# gdisk /dev/sda

Il faut d'abord penser à créer une partition supplémentaire (non chiffrée) pour le partitionnement GPT :

-> Command: n
-> Partition number: 1
-> First sector: 2048
-> Last sector: +512M

Pour les systèmes BIOS :

-> Hex code: ef02

Pour les systèmes UEFI :

-> Hex code: ef00

Créer les partitions suivantes :

Pour /boot : type 8300 de 100M ou plus
Pour la partie chiffrée (qui contiendra plus tard /, /home et éventuellement la swap) : type 8E00 de tous ce qui reste

Formattage des partitions

# mkfs.vfat -F32 /dev/sda1
# mkfs.ext2 /dev/sda2

Gestion du drapeau de boot EFI

Ne concerne que les système UEFI ayant démarré sur le média d'installation en mode UEFI.

# parted /dev/sda set 1 boot on

Chiffrement (niveau 1)

Préparation de la partition chiffrée

# cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha256 /dev/sdaX

(Dans cet exemple, X = 2 pour MBR et X = 3 pour GPT)

Ouverture du conteneur chiffré

Le nom "cryptlvm" est un nom au hasard, mettez ce que vous voulez sans espace ni caractères spéciaux.

# cryptsetup luksOpen /dev/sdaX cryptlvm

(Dans cet exemple, X = 2 pour MBR et X = 3 pour GPT)

Pour information, toutes les partitions utilisées avec dm (dmcrypt, lvm, ..) sont mappées dans /dev/mapper. Dans notre exemple, /dev/mapper/cryptlvm est la partition chiffrée.

Partitionnement LVM

Préparation des partitions logiques LVM

On ajoute la partition /dev/mapper/cryptlvm en tant que membre LVM (pv = physical volume)

# pvcreate /dev/mapper/cryptlvm

On crée un groupe de volume (vg = volume group) qu'on appel "mystorage" (nom au hasard)

# vgcreate mystorage /dev/mapper/cryptlvm

Enfin, on crée autant de volume logique qu'on désire de partitions, ici 3 (ou 2 si on a pas besoin d'une swap, adaptez)

# lvcreate -L 2G mystorage -n lvswap
# lvcreate -L 20G mystorage -n lvroot
# lvcreate -l +100%FREE mystorage -n lvhome

(lvswap, lvroot et lvhome sont des noms au hasard)

Formattage des partitions logiques LVM

Si on a créer une partition de swap :

# mkswap /dev/mapper/mystorage-lvswap

Pour les autres partitions :

# mkfs.ext4 /dev/mapper/mystorage-lvroot
# mkfs.ext4 /dev/mapper/mystorage-lvhome

Montage des partitions

# mount /dev/mapper/mystorage-lvroot /mnt
# mkdir /mnt/home && mkdir /mnt/boot
# mount /dev/mapper/mystorage-lvhome /mnt/home
# mount /dev/sdaX /mnt/boot

(Dans cet exemple, X = 1 pour MBR et X = 2 pour GPT)

Si on a créé une partition de swap :

# swapon /dev/mapper/mystorage-lvswap

Installation du système

(Utilisez la commande dhcpcd pour configurer votre carte réseau, sinon suivez la procédure suivante : https://wiki.archlinux.fr/Installation#Connexion_au_r.C3.A9seau)

Base

# pacstrap /mnt base base-devel

Installation du chargeur de démarrage

Pour syslinux :

# pacstrap /mnt syslinux

Pour grub :

# pacstrap /mnt grub

Configuration du système

Générer le /etc/fstab :

# genfstab -U -p /mnt >> /mnt/etc/fstab

Chrooter dans le nouveau système :

# arch-chroot /mnt

1. Renseignez le nom de la machine dans le fichier /etc/hostname

2. Éditez le fichier /etc/locale.gen et décommentez votre locale

3. Exécutez :

# locale-gen

4. En supposant que vous avez décommenté fr_FR.UTF-8, ajoutez la ligne suivante au fichier /etc/locale.conf :

LANG="fr_FR.UTF-8"

5. Éditez le fichier /etc/vconsole.conf afin d'y spécifier la disposition du clavier que vous souhaitez utiliser :

KEYMAP=fr-pc

6. Créez un lien symbolique /etc/localtime afin de choisir votre fuseau horaire, par exemple:

# ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime

7. Modifier le fichier /etc/mkinitcpio.conf :

HOOKS="... keymap encrypt lvm2 ... filesystems ..."

8. Puis :

# mkinitcpio -p linux

9. Définissez un mot passe pour le root :

# passwd

Configuration du chargeur de démarrage

Syslinux MBR

PARTIE À COMPLÉTER !

Syslinux GPT

PARTIE À COMPLÉTER !

Grub MBR

Installation de la configuration

(Remplacez x86_64 par i386 si vous n'êtes pas 64bits)

# mkdir -p /boot/efi
# mount -t vfat /dev/sda1 /boot/efi
# mkdir -p /boot/efi/EFI
# pacman -Syy efibootmgr
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
Configuration

Editez /etc/default/grub :

GRUB_CMDLINE_LINUX="cryptdevice=/dev/sdaX:mystorage root=/dev/mapper/mystorage-lvroot"

(Dans cet exemple, X = 2 pour MBR et X = 3 pour GPT)

# grub-mkconfig -o  /boot/grub/grub.cfg

Si vous avez des messages comme :

/run/lvm/lvmetad.socket: connect failed: No such file or directory
WARNING: failed to connect to lvmetad: No such file or directory

Ce n'est pas grave, on s'en moque.

Petite explication en anglais pour les curieux : "When re-installing GRUB, you may receive warnings like /run/lvm/lvmetad.socket: connect failed: No such file or directory or WARNING: failed to connect to lvmetad: No such file or directory. Falling back to internal scanning. This is because /run is not available inside the chroot. These warnings will not prevent the system from booting, provided that everything has been done correctly, so you may continue with the installation."

Mot de passe Grub2

Vous devriez également en profiter pour instaurer un mot de passe pour sécuriser l'édition de grub2 au démarrage : Grubpassword

Grub GPT

PARTIE À COMPLÉTER !

Fin de l'installation

On sort du chroot :

# exit

(ou CTRL+D)

On démonte les partitions :

# umount /mnt/boot/efi /mnt/boot /mnt/home /mnt

(retirez /mnt/boot/efi dans le cas bios)

On redémarre sur la nouvelle installation :

# reboot

Suite d'installation

Création d'un utilisateur

En root :

# useradd -g users -m -s /bin/bash <nom utilisateur>
# passwd <nom utilisateur>
# groupadd ecryptfs
# usermod -aG ecryptfs <nom utilisateur>

Chiffrement (niveau 2) et configuration du dossier utilisateur

(Utilisez la commande dhcpcd pour configurer votre carte réseau, sinon suivez la procédure suivante : https://wiki.archlinux.fr/Installation#Connexion_au_r.C3.A9seau)

# pacman -S ecryptfs-utils keyutils
# modprobe ecryptfs
# mkdir -p /home/<nom utilisateur>/.ecryptfs
# mkdir -p /home/<nom utilisateur>/.Private
# mkdir -p /home/<nom utilisateur>/Private
(si vous utilisez ssh) # mkdir -p /home/<nom utilisateur>/.ssh
# mount -t ecryptfs /home/<nom utilisateur>/.Private /home/<nom utilisateur>/Private
-> (passphrase)
-> [une passphrase qui peut et devrait être différente de la session utilisateur -> mount passphrase]
-> 1 (aes)
-> 1 (16)
-> n (no plaintext passthrough)
-> y (filename encryption)
-> (juste entrée - FNEK)
-> yes (mount)
-> yes (avoid warning)
# umount /home/<nom utilisateur>/Private
# mv /root/.ecryptfs/sig-cache.txt /home/<nom utilisateur>/.ecryptfs/
# chown -R <nom utilisateur>:users /home/<nom utilisateur>/
# chmod -R 700 /home/<nom utilisateur>/
# cd /home/<nom utilisateur>/Private
# ln -s ../.ecryptfs
# ln -s ../.Private
(si vous utilisez ssh) # ln -s ../.ssh
# su - <nom utilisateur>

À partir de là on utilise le compte utilisateur que l'on vient de créer :

$ cd /home/<nom utilisateur>/.ecryptfs
$ touch auto-mount auto-umount
$ echo /home/<nom utilisateur>/Private > Private.mnt
$ echo <ecryptfs_sig> > Private.sig
$ echo <ecryptfs_fnek_sig> >> Private.sig
$ ecryptfs-wrap-passphrase wrapped-passphrase
Passphrase to wrap: [enter mount passphrase]
Wrapping passphrase: [enter user password]
$ exit

À partir de là on redevient root.

Il faut changer le « home » de l'utilisateur dans /etc/passwd en ajoutant « /Private », exemple :

<nom utilisateur>:x:1003:100::/home/<nom utilisateur>/Private:/bin/bash

Il faut éditer le fichier /etc/pam.d/system-auth pour qu'il ressemble à ceci :

#%PAM-1.0

auth      required  pam_unix.so     try_first_pass nullok
auth      required  pam_ecryptfs.so unwrap
auth      optional  pam_permit.so
auth      required  pam_env.so

account   required  pam_unix.so
account   optional  pam_permit.so
account   required  pam_time.so

password  required  pam_ecryptfs.so
password  required  pam_unix.so     try_first_pass nullok sha512 shadow
password  optional  pam_permit.so

session   required  pam_limits.so
session   required  pam_unix.so
session   optional  pam_ecryptfs.so unwrap
session   optional  pam_permit.so

Note: le démontage auto à la fermeture de session utilisateur ne fonctionne pas, je ne sais pas encore pourquoi.

Puis, finalement :

# reboot

Astuces

Pour avoir /tmp en ram (tmpfs), éditez en ajoutant dans /etc/fstab :

# tmp
tmpfs   /tmp    tmpfs   defaults,nosuid,nodev,noexec,size=512m  0 0

size=512m limite la taille à 512Mio, changez selon vos besoins.

Optimisation disques dur SSD

  • Dans /etc/fstab, ajouter l'option "discard", exemple (à adapter) :
# /dev/mapper/myroot-lvroot
UUID=a350a565-b411-4814-8be8-78702e59f4be  /  ext4  rw,relatime,discard,data=ordered  0 1

(Ajoutez l'option pour toutes les partitions LVM contenues dans la partition chiffrée)

  • Dans le gestionnaire de démarrage comme grub ou syslinux, ajoutez ":allow-discards" pour la partition chiffrée, exemple syslinux (à adapter) :
APPEND cryptdevice=/dev/sda2:myroot:allow-discards root=/dev/mapper/myroot-lvroot rw

(à ajouter pour chaque entrée de menu comme avec archfallback également)

  • Si tel est le cas, ajoutez l'option "discard" dans /etc/crypttab (non utilisé dans cet exemple).
  • Dans la configuration LVM /etc/lvm/lvm.conf, modifiez issue_discards à 1 :
issue_discards = 1

Puis, finalement :

# reboot