Téléverser les fichiers vers "/"

This commit is contained in:
2026-08-18 16:26:57 +02:00
parent f76e2b44c6
commit 37fe6d1f1f
+241 -137
View File
@@ -1,97 +1,84 @@
<div align="center"> <div align="center">
# 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) ![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) ![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) ![Security](https://img.shields.io/badge/Sécurité-FIDO2%20%2F%20YubiKey-111111?style=for-the-badge)
![QML](https://img.shields.io/badge/UI-QML%20%2F%20Qt_Quick-41CD52?style=for-the-badge) ![Deployment](https://img.shields.io/badge/Déploiement-Déclaratif-7EBAE4?style=for-the-badge&logo=nixos&logoColor=white)
![Status](https://img.shields.io/badge/UI-VALIDÉE-success?style=for-the-badge) ![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-orange?style=for-the-badge) ![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.**
</div> </div>
--- ---
## 🚀 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'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.
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 :
```text ```text
•••••••• 👁 ┌─────────────────────────────┐
│ Dépôt Git │
MonSecret ◉ │ 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 ```text
nixos-workstations/ nixos-workstations/
├── configuration.nix ├── configuration.nix
├── LICENSE ├── LICENSE
├── COMMERCIAL-LICENSE.md ├── COMMERCIAL-LICENSE.md
├── u2f-mappings
├── first-login-ui/ ├── first-login-ui/
│ ├── CMakeLists.txt │ ├── CMakeLists.txt
│ ├── org.raspot.nixosfirstlogin.desktop │ ├── org.raspot.nixosfirstlogin.desktop
@@ -99,23 +86,24 @@ nixos-workstations/
│ ├── CMakeLists.txt │ ├── CMakeLists.txt
│ ├── main.cpp │ ├── main.cpp
│ └── Main.qml │ └── Main.qml
└── modules/ └── modules/
├── software.nix
├── users.nix
├── security.nix
├── yubikey-first-login.nix
└── first-login-ui.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 ```text
/etc/nixos/hardware-configuration.nix /etc/nixos/hardware-configuration.nix
``` ```
reste généré localement par NixOS. La configuration du parc l'importe directement :
---
## ⚙️ Intégration NixOS
Le module est importé depuis `configuration.nix` :
```nix ```nix
imports = [ 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 - 🌐 Chromium ;
sudo nixos-rebuild build \ - 🦊 Firefox ESR ;
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix - 📄 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 Gère le workflow de personnalisation initiale des secrets liés au poste et à la YubiKey.
sudo nixos-rebuild dry-activate \
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
```
### 3️⃣ Activer temporairement ### ✨ `first-login-ui.nix`
```bash Installe l'interface graphique plein écran utilisée lors de la finalisation du poste.
sudo nixos-rebuild test \
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
```
### 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 Lors de la première utilisation, l'utilisateur dispose d'un assistant graphique intégré au bureau KDE.
sudo nixos-rebuild switch \
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix <div align="center">
```
### 👋 Bienvenue → 🔐 Mot de passe → 🔑 YubiKey → ✅ Poste prêt
</div>
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 \
<div align="center"> <div align="center">
**🔐 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.
</div> </div>
L'architecture cible conserve une séparation claire : L'architecture sépare l'interface des opérations sensibles :
```text ```text
┌───────────────────────────────┐ ┌───────────────────────────────
│ Qt Quick / QML │ │ Qt Quick / QML │
Interface utilisateur Présentation et validation
└───────────────┬───────────────┘ └───────────────┬───────────────
┌───────────────────────────────┐ ┌───────────────────────────────
│ Backend contrôlé │ │ Backend contrôlé │
├───────────────────────────────┤ ├───────────────────────────────
│ Mot de passe → passwd NixOS 🔐 Mot de passe → passwd NixOS │
│ PIN YubiKey → ykman 🔑 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
<p align="center"> <p align="center">
![Nix](https://img.shields.io/badge/Nix-Déclaratif-5277C3?style=flat-square&logo=nixos&logoColor=white) ![Nix](https://img.shields.io/badge/Nix-Configuration_déclarative-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) ![NixOS](https://img.shields.io/badge/NixOS-Workstations-5277C3?style=flat-square&logo=nixos&logoColor=white)
![QML](https://img.shields.io/badge/QML-Frontend-41CD52?style=flat-square)
![KDE](https://img.shields.io/badge/KDE_Plasma-Desktop-1D99F3?style=flat-square&logo=kde&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)
</p> </p>
@@ -217,7 +338,8 @@ L'interface ne doit jamais modifier directement `/etc/shadow` ni réimplémenter
## 📜 Licence ## 📜 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**. 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
```
<div align="center"> <div align="center">
### 💙 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.**
</div> </div>