🛡️ NixOS Workstations

Déploiement industrialisé d'environnements de bureau NixOS sécurisés

NixOS KDE Plasma Security Deployment Git License

Une base NixOS reproductible pour construire, sécuriser et maintenir un parc de postes de travail homogènes.


🎯 Objectif du projet

NixOS Workstations a pour objectif d'industrialiser le déploiement de postes de travail NixOS en séparant clairement :

  • 🧩 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.

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.

                ┌─────────────────────────────┐
                │        Dépôt Git            │
                │     nixos-workstations      │
                └──────────────┬──────────────┘
                               │
               ┌───────────────┼────────────────┐
               │               │                │
               ▼               ▼                ▼
         📦 Logiciels     🔐 Sécurité      🖥️ Bureau KDE
               │               │                │
               └───────────────┼────────────────┘
                               │
                               ▼
                       💻 Poste NixOS
                               │
                        🔑 FIDO2 / YubiKey
                               │
                               ▼
                       ✅ Poste opérationnel

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 builddry-activatetestswitch
🧰 Industrialisation Limiter les opérations spécifiques à chaque poste

🏗️ Architecture du dépôt

nixos-workstations/
├── configuration.nix
├── LICENSE
├── COMMERCIAL-LICENSE.md
├── u2f-mappings
│
├── first-login-ui/
│   ├── CMakeLists.txt
│   ├── org.raspot.nixosfirstlogin.desktop
│   └── src/
│       ├── CMakeLists.txt
│       ├── main.cpp
│       └── Main.qml
│
└── modules/
    ├── software.nix
    ├── users.nix
    ├── security.nix
    ├── yubikey-first-login.nix
    └── first-login-ui.nix

💻 Matériel propre à chaque machine

Le fichier matériel généré par NixOS n'est pas stocké dans le dépôt commun :

/etc/nixos/hardware-configuration.nix

La configuration du parc l'importe directement :

imports = [
  /etc/nixos/hardware-configuration.nix
  ./modules/software.nix
  ./modules/users.nix
  ./modules/security.nix
  ./modules/yubikey-first-login.nix
  ./modules/first-login-ui.nix
];

Ainsi, les UUID, partitions et périphériques propres à une installation restent locaux tandis que les règles communes restent centralisées dans Git.


🧩 Modules principaux

📦 software.nix

Décrit l'environnement logiciel commun :

  • 🌐 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.

Utilisateur
    │
    ├──── 🔐 mot de passe
    │
    └──── 🔑 YubiKey / FIDO2

🔑 yubikey-first-login.nix

Gère le workflow de personnalisation initiale des secrets liés au poste et à la YubiKey.

first-login-ui.nix

Installe l'interface graphique plein écran utilisée lors de la finalisation du poste.

L'assistant graphique est une composante du projet, pas sa finalité.


Finalisation du poste utilisateur

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.


🛡️ Sécurité

🔐 L'interface graphique ne doit pas réimplémenter les mécanismes de sécurité du système.

L'architecture sépare l'interface des opérations sensibles :

┌────────────────────────────────┐
│       Qt Quick / QML           │
│   Présentation et validation   │
└───────────────┬────────────────┘
                │
                ▼
┌────────────────────────────────┐
│        Backend contrôlé        │
├────────────────────────────────┤
│ 🔐 Mot de passe → passwd NixOS │
│ 🔑 PIN YubiKey   → ykman       │
└────────────────────────────────┘

Principes retenus :

  • 🚫 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

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

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

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

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 :

💿 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.

🧰 Technologies

Nix NixOS KDE Qt FIDO2 Git


📜 Licence

Licence Commercial

Le projet est distribué sous PolyForm Noncommercial License 1.0.0.

Autorisé

  • utilisation non commerciale ;
  • étude du code ;
  • modification ;
  • partage dans les limites prévues par la licence.

🚫 Exploitation commerciale

Toute exploitation commerciale nécessite une autorisation ou une licence commerciale distincte accordée par le titulaire des droits.

Voir :

PolyForm Noncommercial est une licence source-available non commerciale et non une licence open source au sens OSI.


🛡️ NixOS Workstations

Déployer des postes homogènes, reproductibles et sécurisés sans transformer chaque machine en projet individuel.

S
Description
No description provided
Readme
513 KiB
Languages
QML 39.5%
C++ 36.6%
Nix 21.9%
CMake 1.8%
C 0.2%