From fec8c767a5c8b20443ee6b780cdadeaeb56c6adb Mon Sep 17 00:00:00 2001 From: Olivier <1+olivier@noreply.raspot.in> Date: Wed, 19 Aug 2026 15:23:31 +0200 Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20vers=20?= =?UTF-8?q?"/"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG-v1.8.md | 32 +++++++++++ DEPLOYMENT.md | 93 +++++++------------------------- PRODUCTION-CHECKLIST.md | 113 +++++++++++++++++++-------------------- PROVISIONING-v1.8-LAB.md | 83 ++++++++++++++++++++++++++++ configuration.nix | 19 +++++-- 5 files changed, 203 insertions(+), 137 deletions(-) create mode 100644 CHANGELOG-v1.8.md create mode 100644 PROVISIONING-v1.8-LAB.md diff --git a/CHANGELOG-v1.8.md b/CHANGELOG-v1.8.md new file mode 100644 index 0000000..f4582c6 --- /dev/null +++ b/CHANGELOG-v1.8.md @@ -0,0 +1,32 @@ +# Changelog v1.8 LAB — provisioning première session + +## Objectif + +La v1.8 met en œuvre le parcours cible suivant : + +1. `localadm` active la configuration NixOS. +2. NixOS précrée `alice` avec `systemd-homed`, un home LUKS2 et le mot de passe temporaire LAB. +3. Alice ouvre sa première session avec ce mot de passe temporaire. +4. L'assistant plein écran : + - remplace le mot de passe temporaire avec `homectl passwd` ; + - initialise le premier PIN d'une YubiKey FIDO2 vierge via `python-fido2` ; + - enrôle cette YubiKey directement dans le home `systemd-homed` via `homectl update`. +5. Alice peut ensuite déverrouiller son home avec son mot de passe ou avec la YubiKey + PIN. + +## Changements + +- Précréation idempotente du compte `alice` par un service systemd NixOS ordonné avant SDDM. +- Home `alice` en LUKS2/ext4, 10 Gio en LAB. +- Aucun `users.users.alice` classique. +- Conservation du correctif SDDM validé pour énumérer les comptes `systemd-homed` sous NixOS. +- Changement de mot de passe via les credentials systemd `home.password` et `home.new-password`. +- YubiKey vierge : `ClientPin.set_pin()` ; aucun PIN par défaut. +- Enrôlement FIDO2 via les credentials `home.password` et `home.token-pin`. +- Aucun secret dans les arguments de processus. +- Aucun `pam_u2f` et aucun `u2f-mappings`. +- Aucun recovery key créé avant l'enrôlement FIDO2 : l'assistant n'en demande donc aucune. +- Trois marqueurs de reprise : mot de passe, PIN, FIDO2. + +## LAB uniquement + +Le mot de passe temporaire `LaboTest@1980` est volontairement connu et apparaît dans la configuration/Nix store. Il ne doit pas être considéré comme un secret de production. diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 43e1515..21afd30 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -1,89 +1,32 @@ -# Déploiement du candidat production +# Déploiement v1.8 LAB -## 1. Préparer les fichiers locaux propres au poste +La procédure de référence est décrite dans `PROVISIONING-v1.8-LAB.md`. -Le matériel reste local : +## Commande de déploiement -```text -/etc/nixos/hardware-configuration.nix -``` - -Pour une nouvelle création du compte `alice`, aucun fichier de secret local n'est nécessaire dans ce lab. - -Le mot de passe temporaire est déclaré dans `modules/users.nix` : - -```text -LaboTest@1980 -``` - -Avec `users.mutableUsers = true`, il sert à la création initiale du compte puis le mot de passe choisi par l'utilisateur est conservé. - -> En vraie production, le dépôt étant privé, la stratégie de mot de passe initial pourra être adaptée sans modifier le fonctionnement de l'assistant. - - -## 2. Remplacer l'ancien assistant - -La version production utilise : - -```text -modules/workstation-setup.nix -workstation-setup/ -``` - -L'ancien `modules/yubikey-first-login.nix` et l'ancien frontend d'aperçu `modules/first-login-ui.nix` / `first-login-ui/` ne doivent plus être importés. `modules/security.nix` reste utilisé. - -## 3. Construire sans activer +Depuis `localadm` : ```bash cd ~/nixos-workstations - -sudo nixos-rebuild build \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix +sudo nixos-rebuild switch -I nixos-config="$PWD/configuration.nix" ``` -## 4. Examiner l'activation +Cette activation : -```bash -sudo nixos-rebuild dry-activate \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix -``` +1. installe/configure le poste ; +2. active `systemd-homed` ; +3. précrée `alice` si elle n'existe pas ; +4. crée `/home/alice.home` en LUKS2 avec le mot de passe temporaire LAB ; +5. lance SDDM avec le support d'énumération des comptes homed. -## 5. Activer temporairement +Aucune action `homectl` manuelle n'est demandée à `localadm`. -```bash -sudo nixos-rebuild test \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix -``` +## Première session -Avant de continuer, vérifier immédiatement que `localadm` fonctionne toujours. +Alice se connecte avec le mot de passe temporaire et l'assistant finalise automatiquement : -## 6. Valider le parcours utilisateur +- mot de passe personnel ; +- PIN d'une YubiKey vierge ; +- enrôlement FIDO2 dans `systemd-homed`. -Ouvrir une session `alice` avec la YubiKey et le PIN temporaire, puis : - -1. saisir le mot de passe temporaire ; -2. choisir et confirmer le mot de passe personnel ; -3. vérifier que l'étape ne passe à YubiKey qu'après succès réel de `passwd` ; -4. saisir le PIN temporaire de la YubiKey ; -5. choisir et confirmer le nouveau PIN ; -6. vérifier qu'un mauvais PIN ne déclenche aucune nouvelle tentative automatique ; -7. terminer l'assistant ; -8. se déconnecter/reconnecter et vérifier que l'assistant ne revient plus ; -9. vérifier l'authentification YubiKey + nouveau PIN ; -10. vérifier le mot de passe local comme mécanisme de secours. - -Marqueurs attendus : - -```text -~/.local/state/nixos-workstations/password-initialized -~/.local/state/nixos-workstations/yubikey-pin-initialized -``` - -## 7. Passer réellement en production - -Uniquement après la validation complète : - -```bash -sudo nixos-rebuild switch \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix -``` +Aucune recovery key n'est créée à ce stade. diff --git a/PRODUCTION-CHECKLIST.md b/PRODUCTION-CHECKLIST.md index 5ecfd52..d3ffc2b 100644 --- a/PRODUCTION-CHECKLIST.md +++ b/PRODUCTION-CHECKLIST.md @@ -1,79 +1,78 @@ -# Checklist de mise en production — NixOS Workstations +# Checklist de validation — v1.8 LAB -## Avant activation +Cette checklist correspond au workflow de provisioning `systemd-homed + LUKS2 + FIDO2`. + +## État de départ + +- `localadm` existe et reste administrateur local classique ; +- `alice` n'existe pas encore ; +- `/home/alice.home` n'existe pas ; +- la YubiKey est vierge/reset FIDO2 et ne possède aucun PIN. + +## Construction puis activation + +Depuis `localadm` : ```bash cd ~/nixos-workstations sudo nixos-rebuild build \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix - -sudo nixos-rebuild dry-activate \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix + -I nixos-config="$PWD/configuration.nix" ``` -## Test contrôlé - -1. Vérifier que `localadm` se connecte toujours par mot de passe. -2. Vérifier que `/etc/nixos/hardware-configuration.nix` est bien le fichier local du poste. -3. Exécuter : - -```bash -sudo nixos-rebuild test \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix -``` - -4. Fermer la session `localadm` et ouvrir la session `alice`. -5. Vérifier que l'assistant plein écran démarre automatiquement. -6. Tester avec le mot de passe temporaire du lab `LaboTest@1980` et le PIN temporaire réel de la YubiKey. -7. Vérifier qu'un mauvais PIN produit une erreur et **ne déclenche aucune tentative automatique supplémentaire**. -8. Vérifier qu'après succès les deux fichiers existent : - -```bash -ls -l ~/.local/state/nixos-workstations/ -``` - -Attendu : - -```text -password-initialized -yubikey-pin-created -``` - -9. Se déconnecter/reconnecter : l'assistant ne doit plus démarrer. -10. Tester l'authentification YubiKey + nouveau PIN, puis le mot de passe local de secours. - -## Passage persistant - -Uniquement après validation complète : +Si le build est OK, activer la génération : ```bash sudo nixos-rebuild switch \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix + -I nixos-config="$PWD/configuration.nix" ``` -## Important +`build` seul ne modifie pas le système actif. La précréation d'Alice est exécutée lors de l'activation (`switch`). -- Ne jamais supprimer/réinitialiser la YubiKey en cas d'erreur de PIN. -- Ne jamais modifier manuellement `/etc/shadow`. -- Le retour à une ancienne génération NixOS ne restaure pas les mots de passe mutables. +## Précréation attendue -## Diagnostic v1.4 avant test de l'interface +Le déploiement doit avoir créé : -Dans la session `alice` : +- le compte `alice` via `systemd-homed` ; +- `/home/alice.home` en LUKS2 ; +- le mot de passe temporaire LAB `LaboTest@1980` ; +- aucun token FIDO2 ; +- aucune recovery key. -```bash -nixos-workstations-setup --target-user alice --diagnose -``` +Le correctif SDDM doit afficher Alice dans le greeter. -Attendu au minimum : +## Première session Alice + +Alice se connecte avec : ```text -current_user=alice -target_user=alice -current_user_utf8_hex=616c696365 -target_user_utf8_hex=616c696365 -authorized=yes +LaboTest@1980 ``` -Le diagnostic indique également les deux marqueurs et le chemin du journal local. +L'assistant doit démarrer automatiquement et effectuer, dans cet ordre : + +1. changement du mot de passe temporaire ; +2. création du premier PIN sur la YubiKey vierge ; +3. enrôlement FIDO2 de la YubiKey dans le home `systemd-homed`. + +Pendant l'étape FIDO2, Alice saisit son **nouveau mot de passe** et son **PIN YubiKey**, puis touche la clé quand elle clignote. + +**Aucune recovery key ne doit être demandée.** + +## État final attendu + +Les trois marqueurs doivent exister : + +```text +~/.local/state/nixos-workstations/password-initialized +~/.local/state/nixos-workstations/yubikey-pin-created +~/.local/state/nixos-workstations/yubikey-fido-enrolled +``` + +Après déconnexion : + +1. connexion avec YubiKey + PIN : OK ; +2. connexion avec mot de passe : OK ; +3. les deux ouvrent le même `/home/alice` LUKS2. + +La recovery key d'administration sera ajoutée dans une étape ultérieure ; elle ne fait volontairement pas partie de la v1.8. diff --git a/PROVISIONING-v1.8-LAB.md b/PROVISIONING-v1.8-LAB.md new file mode 100644 index 0000000..76cb910 --- /dev/null +++ b/PROVISIONING-v1.8-LAB.md @@ -0,0 +1,83 @@ +# Test v1.8 LAB — provisioning première session + +## État de départ + +- `localadm` existe et peut lancer `nixos-rebuild`. +- `alice` n'existe pas. +- aucune `/home/alice.home`. +- YubiKey FIDO2 vierge/reset, sans PIN. + +## Déploiement + +Depuis `localadm` : + +```bash +cd ~/nixos-workstations +sudo nixos-rebuild switch -I nixos-config="$PWD/configuration.nix" +``` + +> `nixos-rebuild build` seul ne modifie pas l'état du système actif. Pour que le service de précréation d'Alice s'exécute, utiliser `switch` dans ce scénario. + +Après activation, Alice doit exister dans `systemd-homed` avec un home LUKS2, mais sans FIDO2 et sans recovery key. + +Contrôle facultatif : + +```bash +sudo homectl inspect alice | grep -E 'State:|Storage:|FIDO2 Token:|Recovery Key:|Passwords:|Disk Size:' +``` + +Attendu avant première session : stockage LUKS, un mot de passe, aucun token FIDO2, aucune recovery key. + +## Première session Alice + +Dans SDDM, choisir Alice puis utiliser : + +```text +LaboTest@1980 +``` + +L'assistant doit se lancer automatiquement. + +### 1. Mot de passe + +- saisir `LaboTest@1980` ; +- choisir le nouveau mot de passe ; +- confirmer. + +### 2. YubiKey vierge + +- brancher une seule YubiKey ; +- choisir son premier PIN ; +- confirmer. + +### 3. Enrôlement FIDO2 + +- saisir le nouveau mot de passe personnel ; +- saisir le PIN choisi à l'étape précédente ; +- toucher la YubiKey lorsqu'elle demande la présence utilisateur. + +Aucune recovery key ne doit être demandée. + +## Validation finale + +Après la fin de l'assistant : + +```bash +sudo homectl inspect alice | grep -E 'State:|Storage:|FIDO2 Token:|Recovery Key:|Passwords:' +``` + +Résultat cible : + +```text +Storage: luks +FIDO2 Token: 1 +Recovery Key: 0 / absent +Passwords: 1 +``` + +Puis tester séparément : + +1. déconnexion → connexion Alice avec YubiKey + PIN ; +2. déconnexion → connexion Alice avec mot de passe uniquement. + +Les deux doivent ouvrir le même home LUKS2. diff --git a/configuration.nix b/configuration.nix index 3cc460e..87d736c 100644 --- a/configuration.nix +++ b/configuration.nix @@ -10,11 +10,20 @@ ./modules/workstation-setup.nix ]; - # Étape 2 LAB : l'assistant de première connexion est volontairement - # désactivé. Alice est désormais un compte systemd-homed et son mot de - # passe est créé directement avec homectl pour valider LUKS2/PAM/SDDM - # indépendamment de la YubiKey. - nixosWorkstations.workstationSetup.enable = false; + # Pré-provisionnement automatique : le rebuild crée Alice avec systemd-homed + # et un home LUKS2. L'assistant se lance ensuite à sa première session. + nixosWorkstations.homedUser = { + enable = true; + user = "alice"; + realName = "Alice"; + initialPassword = "LaboTest@1980"; + diskSize = "10G"; + }; + + nixosWorkstations.workstationSetup = { + enable = true; + user = "alice"; + }; # Bootloader. boot.loader.systemd-boot.enable = true;