From 37fe6d1f1f5fd423cef51217e2a96972192011e3 Mon Sep 17 00:00:00 2001 From: Olivier <1+olivier@noreply.raspot.in> Date: Tue, 18 Aug 2026 16:26:57 +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 | 382 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 243 insertions(+), 139 deletions(-) diff --git a/README.md b/README.md index d545ccf..91a14d8 100644 --- a/README.md +++ b/README.md @@ -1,97 +1,84 @@
-# ✨ NixOS First Login +# 🛡️ NixOS Workstations -### Assistant de première connexion pour postes NixOS / KDE Plasma +### Déploiement industrialisé d'environnements de bureau NixOS sécurisés ![NixOS](https://img.shields.io/badge/NixOS-26.05-5277C3?style=for-the-badge&logo=nixos&logoColor=white) ![KDE Plasma](https://img.shields.io/badge/KDE_Plasma-6-1D99F3?style=for-the-badge&logo=kde&logoColor=white) -![Qt](https://img.shields.io/badge/Qt-6-41CD52?style=for-the-badge&logo=qt&logoColor=white) -![QML](https://img.shields.io/badge/UI-QML%20%2F%20Qt_Quick-41CD52?style=for-the-badge) -![Status](https://img.shields.io/badge/UI-VALIDÉE-success?style=for-the-badge) -![License](https://img.shields.io/badge/Licence-PolyForm_Noncommercial-orange?style=for-the-badge) +![Security](https://img.shields.io/badge/Sécurité-FIDO2%20%2F%20YubiKey-111111?style=for-the-badge) +![Deployment](https://img.shields.io/badge/Déploiement-Déclaratif-7EBAE4?style=for-the-badge&logo=nixos&logoColor=white) +![Git](https://img.shields.io/badge/Configuration-Git-F05032?style=for-the-badge&logo=git&logoColor=white) +![License](https://img.shields.io/badge/Licence-PolyForm_Noncommercial-F59E0B?style=for-the-badge) -**Une expérience de première connexion plein écran, claire et moderne, pensée pour industrialiser la préparation des postes NixOS.** +**Une base NixOS reproductible pour construire, sécuriser et maintenir un parc de postes de travail homogènes.**
--- -## 🚀 Objectif +## 🎯 Objectif du projet -**NixOS First Login** fournit un assistant graphique de première connexion inspiré des assistants d'installation d'un système d'exploitation. +**NixOS Workstations** a pour objectif d'industrialiser le déploiement de postes de travail NixOS en séparant clairement : -L'utilisateur est accompagné pas à pas pour préparer son environnement : +- 🧩 la **configuration commune du parc** ; +- 💻 la **détection matérielle propre à chaque poste** ; +- 📦 les **logiciels et paramètres du bureau** ; +- 👤 les **comptes utilisateurs** ; +- 🔐 les **mécanismes d'authentification** ; +- 🔑 l'utilisation de **clés FIDO2 / YubiKey** ; +- ✨ l'expérience de **finalisation du poste à la première connexion**. -> 👋 **Bienvenue** → 🔐 **Mot de passe** → 🔑 **YubiKey** → ✅ **Poste prêt** - -L'interface est développée en **Qt Quick / QML**, s'intègre naturellement à **KDE Plasma 6** et fonctionne en plein écran. - ---- - -## 🧭 Parcours utilisateur - -| Étape | Fonction | -|---|---| -| 👋 **Bienvenue** | Présentation de l'assistant et du processus de configuration | -| 🔐 **Mot de passe** | Saisie du mot de passe temporaire, choix du nouveau mot de passe et confirmation | -| 🛡️ **Robustesse** | Indicateur visuel de qualité du mot de passe, sans blocage d'un mot de passe faible | -| 👁️ **Affichage des secrets** | Bouton œil pour afficher ou masquer mots de passe et PIN | -| 🔑 **YubiKey** | Saisie du PIN temporaire, choix du nouveau PIN et confirmation | -| ✅ **Poste prêt** | Synthèse visuelle de la configuration terminée | - ---- - -## ✨ UX / UI - -### 🖥️ Interface plein écran - -L'assistant occupe l'écran afin de créer un parcours simple et sans distraction, proche d'un assistant d'installation classique. - -### 🧩 Navigation guidée - -Les étapes sont présentées dans des colonnes de largeur fixe afin de conserver un alignement propre, quel que soit le libellé. - -### 👁️ Affichage des mots de passe et PIN - -Chaque champ secret possède un bouton permettant de basculer entre : +L'idée est qu'un poste puisse être réinstallé puis reconstruit à partir du dépôt Git avec un minimum d'opérations manuelles. ```text -•••••••• 👁 - ↓ -MonSecret ◉ + ┌─────────────────────────────┐ + │ Dépôt Git │ + │ nixos-workstations │ + └──────────────┬──────────────┘ + │ + ┌───────────────┼────────────────┐ + │ │ │ + ▼ ▼ ▼ + 📦 Logiciels 🔐 Sécurité 🖥️ Bureau KDE + │ │ │ + └───────────────┼────────────────┘ + │ + ▼ + 💻 Poste NixOS + │ + 🔑 FIDO2 / YubiKey + │ + ▼ + ✅ Poste opérationnel ``` -### 📊 Robustesse du mot de passe - -Le mot de passe reçoit une indication visuelle : - -- 🔴 **Faible** -- 🟠 **Moyen** -- 🔵 **Bon** -- 🟢 **Très bon** - -> 💡 **Cette indication est informative uniquement.** Un mot de passe faible n'est volontairement pas bloqué. - -### 🔒 Parcours verrouillé - -Tant que les informations nécessaires ne sont pas renseignées : - -- ⛔ impossible de passer à l'étape suivante ; -- ⛔ impossible de quitter depuis l'interface ; -- ⛔ `Ctrl+Q` n'est pas proposé ; -- ⛔ une tentative de fermeture de la fenêtre avant la fin est interceptée ; -- ✅ les confirmations doivent correspondre avant de continuer. - --- -## 🏗️ Architecture +## ✨ Principes + +| | Principe | Objectif | +|---|---|---| +| 🧬 | **Configuration déclarative** | Décrire l'état attendu du poste dans Git | +| ♻️ | **Reproductibilité** | Pouvoir reconstruire un poste de manière cohérente | +| 🧱 | **Modularité** | Séparer logiciels, utilisateurs, sécurité et UX | +| 🔐 | **Sécurité native** | S'appuyer sur les mécanismes NixOS plutôt que les contourner | +| 🔑 | **FIDO2 / YubiKey** | Fournir une authentification moderne aux utilisateurs | +| 🖥️ | **Expérience utilisateur** | Fournir un bureau KDE Plasma cohérent et simple | +| 🧪 | **Validation progressive** | `build` → `dry-activate` → `test` → `switch` | +| 🧰 | **Industrialisation** | Limiter les opérations spécifiques à chaque poste | + +--- + +## 🏗️ Architecture du dépôt ```text nixos-workstations/ ├── configuration.nix ├── LICENSE ├── COMMERCIAL-LICENSE.md +├── u2f-mappings +│ ├── first-login-ui/ │ ├── CMakeLists.txt │ ├── org.raspot.nixosfirstlogin.desktop @@ -99,23 +86,24 @@ nixos-workstations/ │ ├── CMakeLists.txt │ ├── main.cpp │ └── Main.qml +│ └── modules/ + ├── software.nix + ├── users.nix + ├── security.nix + ├── yubikey-first-login.nix └── first-login-ui.nix ``` -Le matériel propre à chaque poste **n'est pas stocké dans le dépôt commun** : +### 💻 Matériel propre à chaque machine + +Le fichier matériel généré par NixOS **n'est pas stocké dans le dépôt commun** : ```text /etc/nixos/hardware-configuration.nix ``` -reste généré localement par NixOS. - ---- - -## ⚙️ Intégration NixOS - -Le module est importé depuis `configuration.nix` : +La configuration du parc l'importe directement : ```nix imports = [ @@ -128,45 +116,87 @@ imports = [ ]; ``` +Ainsi, les UUID, partitions et périphériques propres à une installation restent locaux tandis que les règles communes restent centralisées dans Git. + --- -## 🧪 Validation d'une nouvelle version +## 🧩 Modules principaux -Pour conserver une procédure de déploiement prudente : +### 📦 `software.nix` -### 1️⃣ Construire sans activer +Décrit l'environnement logiciel commun : -```bash -sudo nixos-rebuild build \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix +- 🌐 Chromium ; +- 🦊 Firefox ESR ; +- 📄 OnlyOffice ; +- 💬 Teams ; +- ✉️ Outlook Web ; +- 🔧 Git et outils nécessaires au poste. + +### 👤 `users.nix` + +Décrit les comptes locaux attendus et leurs rôles : + +- 🛠️ compte d'administration locale ; +- 👩‍💻 comptes utilisateurs standards ; +- 👥 appartenance aux groupes nécessaires ; +- 🔐 mécanismes d'initialisation des secrets lorsque nécessaire. + +### 🛡️ `security.nix` + +Centralise les paramètres d'authentification et les mappings FIDO2/U2F. + +```text +Utilisateur + │ + ├──── 🔐 mot de passe + │ + └──── 🔑 YubiKey / FIDO2 ``` -### 2️⃣ Vérifier l'activation prévue +### 🔑 `yubikey-first-login.nix` -```bash -sudo nixos-rebuild dry-activate \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix -``` +Gère le workflow de personnalisation initiale des secrets liés au poste et à la YubiKey. -### 3️⃣ Activer temporairement +### ✨ `first-login-ui.nix` -```bash -sudo nixos-rebuild test \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix -``` +Installe l'interface graphique plein écran utilisée lors de la finalisation du poste. -### 4️⃣ Lancer l'interface +L'assistant graphique est **une composante du projet**, pas sa finalité. -```bash -nixos-first-login-ui -``` +--- -### 5️⃣ Rendre la configuration persistante après validation +## ✨ Finalisation du poste utilisateur -```bash -sudo nixos-rebuild switch \ - -I nixos-config=/home/localadm/nixos-workstations/configuration.nix -``` +Lors de la première utilisation, l'utilisateur dispose d'un assistant graphique intégré au bureau KDE. + +
+ +### 👋 Bienvenue → 🔐 Mot de passe → 🔑 YubiKey → ✅ Poste prêt + +
+ +L'objectif est de rendre les opérations de personnalisation simples et compréhensibles, sans exposer l'utilisateur aux outils système. + +### 🔐 Mot de passe + +- 🔒 saisie masquée par défaut ; +- 👁️ bouton pour afficher ou masquer les secrets ; +- 📊 indicateur de robustesse ; +- 💡 recommandations informatives ; +- ✅ confirmation obligatoire ; +- 🟢 un mot de passe faible n'est pas bloqué volontairement. + +### 🔑 YubiKey + +- 🔢 saisie du PIN temporaire ; +- 👁️ affichage/masquage du PIN ; +- 🔁 choix et confirmation du nouveau PIN ; +- ✅ validation avant la fin du parcours. + +### ✅ Poste prêt + +L'écran final récapitule visuellement les opérations réalisées avant de rendre le poste à l'utilisateur. --- @@ -174,30 +204,120 @@ sudo nixos-rebuild switch \
-**🔐 Les mécanismes sensibles doivent rester séparés de l'interface graphique.** +### 🔐 L'interface graphique ne doit pas réimplémenter les mécanismes de sécurité du système.
-L'architecture cible conserve une séparation claire : +L'architecture sépare l'interface des opérations sensibles : ```text -┌───────────────────────────────┐ -│ Qt Quick / QML │ -│ Interface utilisateur │ -└───────────────┬───────────────┘ +┌────────────────────────────────┐ +│ Qt Quick / QML │ +│ Présentation et validation │ +└───────────────┬────────────────┘ │ ▼ -┌───────────────────────────────┐ -│ Backend contrôlé │ -├───────────────────────────────┤ -│ Mot de passe → passwd NixOS │ -│ PIN YubiKey → ykman │ -└───────────────────────────────┘ +┌────────────────────────────────┐ +│ Backend contrôlé │ +├────────────────────────────────┤ +│ 🔐 Mot de passe → passwd NixOS │ +│ 🔑 PIN YubiKey → ykman │ +└────────────────────────────────┘ ``` -L'interface ne doit jamais modifier directement `/etc/shadow` ni réimplémenter PAM. +Principes retenus : -> ⚠️ **État de cette V4 :** l'interface graphique est validée, mais ce nouveau frontend n'exécute encore directement ni `passwd` ni `ykman`. Le module historique `yubikey-first-login.nix` reste distinct tant que le backend de la nouvelle UI n'a pas été intégré et testé. +- 🚫 pas de modification directe de `/etc/shadow` ; +- 🚫 pas de réimplémentation artisanale de PAM ; +- ✅ utilisation des mécanismes NixOS prévus pour les mots de passe ; +- ✅ utilisation des outils FIDO2/YubiKey dédiés ; +- ✅ séparation entre compte administrateur et utilisateur standard ; +- ✅ validation des changements avant activation persistante. + +--- + +## 🧪 Cycle de validation + +Une modification du dépôt n'est pas directement appliquée avec `switch`. + +### 1️⃣ Construction + +```bash +sudo nixos-rebuild build \ + -I nixos-config=/home/localadm/nixos-workstations/configuration.nix +``` + +> 🧱 Construit la nouvelle configuration sans l'activer. + +### 2️⃣ Prévisualisation de l'activation + +```bash +sudo nixos-rebuild dry-activate \ + -I nixos-config=/home/localadm/nixos-workstations/configuration.nix +``` + +> 🔎 Permet d'inspecter les changements d'activation prévus. + +### 3️⃣ Test temporaire + +```bash +sudo nixos-rebuild test \ + -I nixos-config=/home/localadm/nixos-workstations/configuration.nix +``` + +> 🧪 Active la configuration pour validation sans en faire la génération de démarrage par défaut. + +### 4️⃣ Validation définitive + +```bash +sudo nixos-rebuild switch \ + -I nixos-config=/home/localadm/nixos-workstations/configuration.nix +``` + +> ✅ Rend la configuration active et persistante pour les prochains démarrages. + +--- + +## 🚀 Vision de déploiement + +L'objectif est de réduire progressivement la préparation d'un poste à une chaîne standardisée : + +```text +💿 Installation NixOS + │ + ▼ +🧬 Génération du matériel local + │ + ▼ +📥 Récupération du dépôt Git + │ + ▼ +🧱 Construction de la configuration + │ + ▼ +🛡️ Application du socle de sécurité + │ + ▼ +👤 Affectation de l'utilisateur + │ + ▼ +🔑 Préparation FIDO2 / YubiKey + │ + ▼ +✨ Finalisation graphique + │ + ▼ +✅ Poste prêt +``` + +À terme, cette chaîne doit pouvoir être complétée par : + +- 🧰 installation automatisée ; +- 🗂️ inventaire des machines ; +- 🧩 profils matériels ; +- 👥 affectation déclarative utilisateurs/postes ; +- 🔄 mises à jour centralisées par Git ; +- 📋 intégration avec les outils de gestion de parc. --- @@ -205,11 +325,12 @@ L'interface ne doit jamais modifier directement `/etc/shadow` ni réimplémenter

-![Nix](https://img.shields.io/badge/Nix-Déclaratif-5277C3?style=flat-square&logo=nixos&logoColor=white) -![Qt Quick](https://img.shields.io/badge/Qt_Quick-UI-41CD52?style=flat-square&logo=qt&logoColor=white) -![QML](https://img.shields.io/badge/QML-Frontend-41CD52?style=flat-square) +![Nix](https://img.shields.io/badge/Nix-Configuration_déclarative-5277C3?style=flat-square&logo=nixos&logoColor=white) +![NixOS](https://img.shields.io/badge/NixOS-Workstations-5277C3?style=flat-square&logo=nixos&logoColor=white) ![KDE](https://img.shields.io/badge/KDE_Plasma-Desktop-1D99F3?style=flat-square&logo=kde&logoColor=white) -![FIDO2](https://img.shields.io/badge/FIDO2-YubiKey-black?style=flat-square) +![Qt](https://img.shields.io/badge/Qt_Quick-QML-41CD52?style=flat-square&logo=qt&logoColor=white) +![FIDO2](https://img.shields.io/badge/FIDO2-YubiKey-111111?style=flat-square) +![Git](https://img.shields.io/badge/Git-Source_of_truth-F05032?style=flat-square&logo=git&logoColor=white)

@@ -217,7 +338,8 @@ L'interface ne doit jamais modifier directement `/etc/shadow` ni réimplémenter ## 📜 Licence -![Licence](https://img.shields.io/badge/SPDX-PolyForm--Noncommercial--1.0.0-orange?style=flat-square) +![Licence](https://img.shields.io/badge/SPDX-PolyForm--Noncommercial--1.0.0-F59E0B?style=flat-square) +![Commercial](https://img.shields.io/badge/Usage_commercial-Autorisation_requise-EF4444?style=flat-square) Le projet est distribué sous **PolyForm Noncommercial License 1.0.0**. @@ -241,28 +363,10 @@ Voir : --- -## 🎯 Vision - -L'objectif à terme est de pouvoir préparer un poste de manière industrialisée : - -```text -💻 Installation NixOS - ↓ -📦 Déploiement de la configuration commune - ↓ -👤 Première connexion utilisateur - ↓ -🔐 Personnalisation du mot de passe - ↓ -🔑 Personnalisation de la YubiKey - ↓ -✅ Poste opérationnel -``` -
-### 💙 NixOS • KDE Plasma • FIDO2 +### 🛡️ NixOS Workstations -**Des postes reproductibles sans sacrifier l'expérience utilisateur.** +**Déployer des postes homogènes, reproductibles et sécurisés sans transformer chaque machine en projet individuel.**