Téléverser les fichiers vers "/"
This commit is contained in:
@@ -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
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
**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">
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||

|
|
||||||

|

|
||||||

|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -217,7 +338,8 @@ L'interface ne doit jamais modifier directement `/etc/shadow` ni réimplémenter
|
|||||||
|
|
||||||
## 📜 Licence
|
## 📜 Licence
|
||||||
|
|
||||||

|

|
||||||
|

|
||||||
|
|
||||||
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>
|
||||||
|
|||||||
Reference in New Issue
Block a user