From 2f2aad80db03f745cdb5171dcd07eec6f9efc7df Mon Sep 17 00:00:00 2001 From: Olivier <1+olivier@noreply.raspot.in> Date: Thu, 20 Aug 2026 08:52:43 +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 --- README.md | 222 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 117 insertions(+), 105 deletions(-) diff --git a/README.md b/README.md index 70f5867..86f3cbc 100644 --- a/README.md +++ b/README.md @@ -1,128 +1,140 @@ -# NixOS Workstations — v1.8 LAB +# NixOS Workstations — v1.9.0 modulaire -Cette branche valide un poste NixOS/KDE dont le compte utilisateur est géré par `systemd-homed` et dont le home est chiffré en LUKS2. +Cette version généralise le provisionnement validé en v1.8.7 afin que le même moteur puisse préparer plusieurs postes pour des utilisateurs différents. -## Parcours cible +## Principe + +Le dépôt sépare désormais trois responsabilités : ```text -localadm - │ - └── nixos-rebuild switch - │ - ├── logiciels - ├── systemd-homed - ├── création automatique d'Alice - │ └── /home/alice.home → LUKS2 - └── SDDM - │ - ▼ - Alice se connecte avec - le mot de passe temporaire - │ - ▼ - assistant première session - │ - ┌───────┼────────────┐ - ▼ ▼ ▼ - nouveau PIN FIDO2 enrôlement - mot de vierge FIDO2 homed - passe - │ - ▼ - home déverrouillable par - mot de passe OU YubiKey+PIN +configuration commune + ↓ +fiche du poste + ↓ +fiche utilisateur + ↓ +moteur de provisionnement commun ``` -## Principes - -- `localadm` reste un compte NixOS classique d'administration locale. -- `alice` n'est jamais déclarée dans `users.users` : elle appartient exclusivement à `systemd-homed`. -- Le déploiement précrée Alice automatiquement avant SDDM. -- Le home d'Alice est `/home/alice.home`, conteneur LUKS2 monté sur `/home/alice` pendant la session. -- Aucun `pam_u2f`. -- Aucun `u2f-mappings`. -- La YubiKey démarre sans PIN ; Alice choisit son premier PIN. -- L'enrôlement FIDO2 est stocké dans le record `systemd-homed`. -- Le mot de passe reste un moyen de déverrouillage de secours. - -## Déploiement LAB - -Le mot de passe temporaire est : +Exemples fournis : ```text -LaboTest@1980 +bureautix-01 -> Alice +bureautix-02 -> Bob +bureautix-03 -> Mike ``` -Il est volontairement connu pour le laboratoire et n'est pas un secret de production. +Le moteur de provisionnement dans `modules/` et `workstation-setup/` ne contient plus de dépendance à Alice, Bob ou Mike. -Depuis `localadm` : +## Arborescence utile -```bash -cd ~/nixos-workstations -sudo nixos-rebuild switch -I nixos-config="$PWD/configuration.nix" +```text +flake.nix +configuration.nix + +hosts/ + bureautix-01.nix + bureautix-02.nix + bureautix-03.nix + +users/ + alice.nix + bob.nix + mike.nix + +modules/ + provisioning.nix + homed.nix + workstation-setup.nix + users.nix + software.nix + security.nix ``` -Un simple `nixos-rebuild build` construit la génération mais ne l'active pas ; il ne peut donc pas exécuter la précréation du compte sur le système courant. +## Association poste / utilisateur -## Première connexion +La fiche du poste est la source de vérité. -Alice sélectionne son compte dans SDDM et utilise le mot de passe temporaire. L'assistant se lance automatiquement et impose trois opérations réussies : - -1. remplacement du mot de passe temporaire ; -2. création du premier PIN sur une YubiKey FIDO2 vierge ; -3. enrôlement de cette YubiKey dans le home chiffré `systemd-homed`. - -Les secrets sont transmis aux helpers par stdin puis à `homectl` par le mécanisme `CREDENTIALS_DIRECTORY`. Aucun mot de passe ni PIN n'est placé dans les arguments de processus. - -## Recovery key - -La v1.8 **ne crée volontairement aucune recovery key avant ou pendant la première session**. Cela évite le problème validé en LAB où `homectl update` demandait la recovery key existante lors de la synchronisation des clés de chiffrement. - -L'ajout et l'escrow d'une recovery key d'administration feront l'objet d'une étape distincte. - -## SDDM et comptes homed sous NixOS - -Le greeter SDDM reçoit explicitement le chemin des modules NSS NixOS : - -```nix -services.displayManager.sddm.settings = { - Users = { - MinimumUid = 1000; - MaximumUid = 60513; - }; - General = { - GreeterEnvironment = - "QT_WAYLAND_SHELL_INTEGRATION=layer-shell,LD_LIBRARY_PATH=${config.system.nssModules.path}"; - }; -}; -``` - -Ce réglage est nécessaire sur le LAB pour que le greeter puisse énumérer Alice, dont l'UID `systemd-homed` est dans la plage 60001–60513. - -## Arborescence importante +`hosts/bureautix-02.nix` importe par exemple : ```text configuration.nix -modules/ -├── homed.nix -├── users.nix -├── security.nix -├── software.nix -└── workstation-setup.nix -workstation-setup/ -├── CMakeLists.txt -├── org.raspot.nixosworkstations.setup.desktop -└── src/ - ├── CMakeLists.txt - ├── Config.h.in - ├── Main.qml - ├── ProvisioningBackend.cpp - ├── ProvisioningBackend.h - └── main.cpp +users/bob.nix ``` -`/etc/nixos/hardware-configuration.nix` reste local au poste et n'est pas versionné dans le dépôt partagé. +Le build de `bureautix-02` prépare donc automatiquement Bob. Le nom de l'utilisateur n'est pas passé dans la commande de déploiement. -## État LAB +## Configuration matérielle -Le workflow doit encore être validé de bout en bout sur le poste réel avec la v1.8. Ne pas considérer cette archive comme une version production. +`/etc/nixos/hardware-configuration.nix` reste local à chaque PC et n'est pas stocké dans le dépôt. + +Pour cette raison, les builds Flake sont actuellement lancés avec `--impure` afin d'autoriser cet unique import local. + +## Migration sûre depuis v1.8.7 + +Pour le premier test, conserver le poste `bureautix-01` associé à Alice et utiliser d'abord le mode classique : + +```bash +sudo nixos-rebuild build \ + -I nixos-config=/home/localadm/nixos-workstations/hosts/bureautix-01.nix +``` + +Si le build est correct : + +```bash +sudo nixos-rebuild switch \ + -I nixos-config=/home/localadm/nixos-workstations/hosts/bureautix-01.nix +``` + +Cette activation active également `nix-command` et `flakes`. + +## Utilisation avec Flake + +Depuis la racine du dépôt, générer une première fois le verrou de dépendances : + +```bash +nix flake lock +``` + +Puis l'ajouter au dépôt afin que tous les postes utilisent exactement la même révision de Nixpkgs. + +Exemple pour Bob : + +```bash +sudo nixos-rebuild build --impure --flake .#bureautix-02 +``` + +Puis : + +```bash +sudo nixos-rebuild switch --impure --flake .#bureautix-02 +``` + +Pour Mike : + +```bash +sudo nixos-rebuild switch --impure --flake .#bureautix-03 +``` + +## Ajouter un nouvel utilisateur + +Créer une fiche `users/.nix`. Elle ne contient que les données propres à l'utilisateur, par exemple son identifiant et son nom affiché. + +Aucun changement dans le moteur C++/QML n'est nécessaire. + +## Ajouter un nouveau poste + +Créer `hosts/.nix`, importer `configuration.nix` et la fiche utilisateur voulue, puis ajouter ce poste dans `nixosConfigurations` de `flake.nix`. + +## Provisionnement utilisateur + +Le parcours validé en v1.8.7 reste identique : + +1. création automatique du compte `systemd-homed` ; +2. espace personnel LUKS2 ; +3. affichage du compte dans SDDM ; +4. changement du mot de passe à la première connexion ; +5. création du code PIN de la YubiKey ; +6. association de la YubiKey au chiffrement. + +La logique de ces opérations n'a pas été modifiée dans v1.9.0.