Téléverser les fichiers vers "/"
This commit is contained in:
@@ -1,97 +1,84 @@
|
||||
<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>
|
||||
|
||||
---
|
||||
|
||||
## 🚀 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.
|
||||
|
||||
<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">
|
||||
|
||||
**🔐 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>
|
||||
|
||||
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
|
||||
|
||||
<p align="center">
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

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

|
||||

|
||||

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