129 lines
4.1 KiB
Markdown
129 lines
4.1 KiB
Markdown
# NixOS Workstations — v1.8 LAB
|
||
|
||
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.
|
||
|
||
## Parcours cible
|
||
|
||
```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
|
||
```
|
||
|
||
## 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 :
|
||
|
||
```text
|
||
LaboTest@1980
|
||
```
|
||
|
||
Il est volontairement connu pour le laboratoire et n'est pas un secret de production.
|
||
|
||
Depuis `localadm` :
|
||
|
||
```bash
|
||
cd ~/nixos-workstations
|
||
sudo nixos-rebuild switch -I nixos-config="$PWD/configuration.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.
|
||
|
||
## Première connexion
|
||
|
||
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
|
||
|
||
```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
|
||
```
|
||
|
||
`/etc/nixos/hardware-configuration.nix` reste local au poste et n'est pas versionné dans le dépôt partagé.
|
||
|
||
## État LAB
|
||
|
||
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.
|