173 lines
5.4 KiB
Markdown
173 lines
5.4 KiB
Markdown
|
# Procédure d'installation d'un poste sécurisé.
|
||
|
La procédure ci-dessous permet de mettre en place un poste sécurisé. Les fichiers de ce dépôt ont vocation à être utilisés comme template.
|
||
|
|
||
|
Le disque est chiffré, l'authentification des comptes utilisateurs nécessite une clé hardware et un mot de passe (2FA).
|
||
|
Le déchiffrement du poste nécessite également une clé hardware (FIDO2).
|
||
|
|
||
|
Pour la sécurité, **apparmor** et **clamav** sont installés.
|
||
|
|
||
|
Le compte utilisateur ne peut pas devenir root, il faut passer par un compte tiers. Sous **nixos** il n'y a pas pas beaucoup d'intéret puisque nous utilisons **home-manager** pour installer des applications, mais c'est une bonne pratique.
|
||
|
Ce template installe gnome comme environnement de bureau, pour sa polyvalence.
|
||
|
|
||
|
Pour aller plus loins en matière de sécurité, nous pouvons supprimer les mots de passes de déchiffrement. Attention, la suppression des mots de passes rend impossible l'ajout d'une clé (matériel) ou d'un nouveau mot de passe.
|
||
|
**systemd-cryptenroll** permet de créer un mo de passe de récupération. Il est généré par l'ordinateur avec beaucoup d'entropie.
|
||
|
|
||
|
Personnellement, j'ai une clé yubikey, une clé nitrokey et un mot de passe de récupération, stocké dans une base chiffrée.
|
||
|
|
||
|
# Partie 1 : installation de base
|
||
|
Le poste dispose d'un EFI, le disque sera chiffré
|
||
|
|
||
|
## partitionnement
|
||
|
|
||
|
gdisk /dev/sda
|
||
|
|
||
|
* ````o```` creation d'une nouvelle table de partitions
|
||
|
* ```n``` ajouter une partition de 500M de type ef00 pour l'EFI
|
||
|
* ```` n ```` ajouter une partition avec le reste de l'espace disponible, type 8300
|
||
|
* ```` w ```` on valide la table et on sort
|
||
|
|
||
|
### Chiffrement
|
||
|
|
||
|
cryptsetup luksFormat /dev/sda2 # création d'un volume chiffré
|
||
|
cryptsetup luksOpen /dev/sda2 enc-pv # ouverture du volume chiffré sur le point /dev/mapper/enc-vp
|
||
|
|
||
|
### Partitionnement LVM
|
||
|
Création de deux volumes logiques LVM. Le premier de 8Go pour la swap (j'ai 8Go de RAM) et le second pour la racine
|
||
|
|
||
|
pvcreate /dev/mapper/enc-pv
|
||
|
vgcreate vg /dev/mapper/enc-pv
|
||
|
lvcreate -L 8G -n swap vg
|
||
|
lvcreate -l '100%FREE' -n root vg
|
||
|
|
||
|
### formattage
|
||
|
|
||
|
mkfs.fat /dev/sda1
|
||
|
mkfs.ext4 -L root /dev/vg/root
|
||
|
mkswap -L swap /dev/vg/swap
|
||
|
|
||
|
## Pré-installation
|
||
|
|
||
|
mount /dev/vg/root /mnt
|
||
|
mkdir /mnt/boot
|
||
|
mount /dev/sda1 /mnt/boot
|
||
|
swapon /dev/vg/swap
|
||
|
|
||
|
## Préparation de l'installation
|
||
|
|
||
|
nixos-generate-config --root /mnt
|
||
|
|
||
|
A partir de là le template peut-être installé.
|
||
|
|
||
|
nix-shell -p git
|
||
|
git clone https://git.atlanticaweb.fr/alexandre/nixos-config.git
|
||
|
|
||
|
Enfin dans le hardware.nix, il faut ajouter le volume /boot pour qu'il soit dans le **fstab** puis ajouter le chargement dans l'initrd du LVM et du déchiffrement. ça nous donne :
|
||
|
|
||
|
fileSystems."/boot" =
|
||
|
{ device = "/dev/disk/by-uuid/0BEC-722D";
|
||
|
fsType = "vfat";
|
||
|
};
|
||
|
boot.initrd.luks.devices = {
|
||
|
"partitions" = {
|
||
|
device = "/dev/sda2";
|
||
|
preLVM = true;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
## Notes sur la sécurisation u2f et le déchiffrement via clé FIDO2
|
||
|
|
||
|
### Pour la partie authentification u2f
|
||
|
L'authentification u2f avec une clée Yubikey 5 nécessite une configuration par utilisateur.
|
||
|
|
||
|
nix-shell -p pam_u2f
|
||
|
mkdir -p ~/.config/Yubico
|
||
|
pamu2fcfg > ~/.config/Yubico/u2f_keys
|
||
|
|
||
|
Si vous avez 2 clés, pour ajouter la seconde clé :
|
||
|
|
||
|
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
|
||
|
|
||
|
### Pour le déchiffrement de la partition LUKS avec le protocole FIDO2
|
||
|
Pour cette partie, il faut regénéré l'initrd avec le support FIDO2 et l'ajout de systemd.
|
||
|
|
||
|
Pour cela il faut modifier :
|
||
|
|
||
|
boot.initrd.luks.devices = {
|
||
|
"partitions" = {
|
||
|
device = "/dev/sda2";
|
||
|
preLVM = true;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
en :
|
||
|
|
||
|
boot.initrd.luks.devices = {
|
||
|
"partitions" = {
|
||
|
device = "/dev/sda2";
|
||
|
preLVM = true;
|
||
|
crypttabExtraOpts = ["fido2-device=auto"];
|
||
|
};
|
||
|
};
|
||
|
boot.initrd.systemd.enable = true;
|
||
|
|
||
|
L'ajout des clés de déchiffrement se fait simplement via :
|
||
|
|
||
|
systemd-cryptenroll --fido2-device=auto /dev/sda2
|
||
|
|
||
|
ou pour un déchiffrement uniquement via clé fido2 :
|
||
|
|
||
|
systemd-cryptenroll --unlock-fido2-device=auto /dev/sda2
|
||
|
|
||
|
Cette commande est à exécutée pour chaque clée que vous possédez.
|
||
|
|
||
|
Pour générer une clé de récupération :
|
||
|
|
||
|
systemd-cryptenroll --recovery-key /dev/sda2
|
||
|
|
||
|
Pour supprimer une clée d'un slot :
|
||
|
|
||
|
systemd-cryptenroll --wipe-slot=2 #supprime la clé du slot 2
|
||
|
|
||
|
Pour supprimer tous les mots de passe :
|
||
|
|
||
|
systemd-cryptenroll --wipe-slot=password /dev/sda2
|
||
|
|
||
|
Pour supprimer toutes les clés :
|
||
|
|
||
|
systemd-cryptenroll --wipe-slot=fido2 /dev/sda2
|
||
|
|
||
|
## Installation
|
||
|
On peut démarrer l'installation avec :
|
||
|
|
||
|
nixos-install
|
||
|
reboot
|
||
|
|
||
|
En cas d'erreur au reboot, on redémarre sur la clé. POur accéder à la configuration :
|
||
|
|
||
|
cryptsetup luksOpen /dev/sda2 enc-pv
|
||
|
lvchange -a y /dev/vg/swap
|
||
|
lvchange -a y /dev/vg/root
|
||
|
mount /dev/vg/root /mnt
|
||
|
mount /dev/sda1 /mnt/boot
|
||
|
swapon /dev/vg/swap
|
||
|
cp /mnt/etc/wpa_supplicant.conf /etc
|
||
|
|
||
|
Au reboot, je me connecte en root et je change le password de mon user.
|
||
|
|
||
|
# Configuration utilisateur
|
||
|
## home-manager
|
||
|
J'ai opté pour une installation locale à mon utilisateur de home-manager
|
||
|
ajouter le dépot correspondant à la version en cours de nixpkgs :
|
||
|
|
||
|
nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager
|
||
|
|
||
|
mise à jour de la base
|
||
|
|
||
|
nix-channel --update
|
||
|
reboot
|
||
|
|
||
|
Installation
|
||
|
|
||
|
nix-shell '<home-manager>' -A install
|
||
|
|