From b63f4d547dfd3e003182d516ea826f02715977bb Mon Sep 17 00:00:00 2001
From: Olivier <1+olivier@noreply.raspot.in>
Date: Wed, 19 Aug 2026 11:58:30 +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
---
PRODUCTION-CHECKLIST.md | 6 ++++--
README.md | 45 ++++++++++++++++++++++++++++++++++++-----
2 files changed, 44 insertions(+), 7 deletions(-)
diff --git a/PRODUCTION-CHECKLIST.md b/PRODUCTION-CHECKLIST.md
index 6b06079..5ecfd52 100644
--- a/PRODUCTION-CHECKLIST.md
+++ b/PRODUCTION-CHECKLIST.md
@@ -37,7 +37,7 @@ Attendu :
```text
password-initialized
-yubikey-pin-initialized
+yubikey-pin-created
```
9. Se déconnecter/reconnecter : l'assistant ne doit plus démarrer.
@@ -58,7 +58,7 @@ sudo nixos-rebuild switch \
- Ne jamais modifier manuellement `/etc/shadow`.
- Le retour à une ancienne génération NixOS ne restaure pas les mots de passe mutables.
-## Diagnostic v1.1 avant test de l'interface
+## Diagnostic v1.4 avant test de l'interface
Dans la session `alice` :
@@ -71,6 +71,8 @@ Attendu au minimum :
```text
current_user=alice
target_user=alice
+current_user_utf8_hex=616c696365
+target_user_utf8_hex=616c696365
authorized=yes
```
diff --git a/README.md b/README.md
index 0ced0e4..0ce4e13 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+> **État LAB v1.7 / Étape 2** : systemd-homed + LUKS2 pour Alice. L'enrôlement FIDO2 dans le home viendra à l'étape 3.
+
# 🛡️ NixOS Workstations
@@ -74,7 +76,6 @@
```text
nixos-workstations/
├── configuration.nix
-├── u2f-mappings
├── LICENSE
├── COMMERCIAL-LICENSE.md
├── PRODUCTION-CHECKLIST.md
@@ -142,7 +143,7 @@ Avec `users.mutableUsers = true`, ce hash sert à la création initiale du compt
### 🛡️ `security.nix`
-Déploie le mapping utilisateur ↔ YubiKey et configure l'authentification PAM U2F/FIDO2 utilisée par le poste.
+Étape 1 LAB : conserve uniquement les règles d’accès à la YubiKey. Aucun mapping U2F et aucune authentification PAM/FIDO2 ne sont activés ; l’enrôlement sera pris en charge ultérieurement par systemd-homed.
### ✨ `workstation-setup.nix`
@@ -199,7 +200,7 @@ Les étapes ne sont considérées terminées qu'après création des marqueurs :
```text
~/.local/state/nixos-workstations/password-initialized
-~/.local/state/nixos-workstations/yubikey-pin-initialized
+~/.local/state/nixos-workstations/yubikey-pin-created
```
---
@@ -337,9 +338,9 @@ Voir [`LICENSE`](LICENSE) et [`COMMERCIAL-LICENSE.md`](COMMERCIAL-LICENSE.md).
---
-## Correctifs v1.1 du setup
+## Correctifs v1.2 du setup
-La version 1.1 durcit la brique `workstation-setup` :
+La version 1.2 durcit la brique `workstation-setup` :
- l'utilisateur cible n'est plus compilé dans le binaire ; le lanceur le transmet avec `--target-user` ;
- les chemins des helpers sont générés dans `Config.h`, sans macro CMake fragile ;
@@ -362,3 +363,37 @@ Lancement manuel de l'interface :
```bash
nixos-workstations-setup --target-user alice
```
+
+
+### Correctif v1.2 — contrôle de l’utilisateur
+
+La v1.1 pouvait refuser `alice` tout en affichant `alice` comme utilisateur courant et cible à cause d’un ordre d’initialisation incorrect des membres C++. La v1.2 supprime l’état d’autorisation mémorisé et vérifie directement l’UID effectif du processus par rapport à l’UID du compte cible. La compilation traite également les avertissements `reorder` comme des erreurs.
+
+
+### Correctif v1.3 — changement de mot de passe avec PAM/U2F
+
+La configuration conserve U2F pour les services PAM d’authentification, mais le désactive explicitement pour le service `passwd` avec `security.pam.services.passwd.u2f.enable = false;`. Cela évite que le changement de mot de passe lancé par l’assistant soit intercepté par `pam_u2f`. Le message de timeout est également spécifique à l’étape en cours : mot de passe ou YubiKey.
+
+
+### Correctif v1.4 — dialogue PAM `passwd`
+
+Le helper de mot de passe accepte désormais l'invite PAM générique `Password:` pour l'authentification initiale. Les étapes sont suivies explicitement et les erreurs techniques sont journalisées sans secret.
+
+### Correctif v1.5 — changement de PIN FIDO2 direct
+
+La v1.5 n'utilise plus `expect` pour piloter les invites texte de `ykman` lors du changement de PIN. Le helper utilise directement `python-fido2` et `ClientPin.change_pin()` sur l'interface CTAP2 de la clé. Les secrets sont transmis au helper par stdin, jamais dans les arguments du processus. Une seule tentative CTAP2 est effectuée par validation.
+
+
+## Étape 1 v1.6 — YubiKey vierge
+
+Cette version valide uniquement l'initialisation d'une YubiKey FIDO2 vierge :
+
+- aucun PIN FIDO2 initial ;
+- aucun `u2f-mappings` dans Git ou `/etc` ;
+- aucun `pam_u2f` actif ;
+- le setup demande uniquement le nouveau PIN et sa confirmation ;
+- `ClientPin.set_pin()` crée le premier PIN ;
+- si un PIN existe déjà, l'opération est refusée sans tentative de PIN ;
+- le mot de passe local continue de fonctionner comme dans la v1.5.
+
+L'authentification FIDO2 du compte et le chiffrement LUKS2 ne font volontairement pas partie de cette étape.