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.