Téléverser les fichiers vers "/"
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# Checklist de mise en production — NixOS Workstations
|
||||
|
||||
## Avant activation
|
||||
|
||||
```bash
|
||||
cd ~/nixos-workstations
|
||||
|
||||
sudo nixos-rebuild build \
|
||||
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
|
||||
|
||||
sudo nixos-rebuild dry-activate \
|
||||
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
|
||||
```
|
||||
|
||||
## Test contrôlé
|
||||
|
||||
1. Vérifier que `localadm` se connecte toujours par mot de passe.
|
||||
2. Vérifier que `/etc/nixos/hardware-configuration.nix` est bien le fichier local du poste.
|
||||
3. Exécuter :
|
||||
|
||||
```bash
|
||||
sudo nixos-rebuild test \
|
||||
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
|
||||
```
|
||||
|
||||
4. Fermer la session `localadm` et ouvrir la session `alice`.
|
||||
5. Vérifier que l'assistant plein écran démarre automatiquement.
|
||||
6. Tester avec le mot de passe temporaire du lab `LaboTest@1980` et le PIN temporaire réel de la YubiKey.
|
||||
7. Vérifier qu'un mauvais PIN produit une erreur et **ne déclenche aucune tentative automatique supplémentaire**.
|
||||
8. Vérifier qu'après succès les deux fichiers existent :
|
||||
|
||||
```bash
|
||||
ls -l ~/.local/state/nixos-workstations/
|
||||
```
|
||||
|
||||
Attendu :
|
||||
|
||||
```text
|
||||
password-initialized
|
||||
yubikey-pin-initialized
|
||||
```
|
||||
|
||||
9. Se déconnecter/reconnecter : l'assistant ne doit plus démarrer.
|
||||
10. Tester l'authentification YubiKey + nouveau PIN, puis le mot de passe local de secours.
|
||||
|
||||
## Passage persistant
|
||||
|
||||
Uniquement après validation complète :
|
||||
|
||||
```bash
|
||||
sudo nixos-rebuild switch \
|
||||
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
|
||||
```
|
||||
|
||||
## Important
|
||||
|
||||
- Ne jamais supprimer/réinitialiser la YubiKey en cas d'erreur de PIN.
|
||||
- Ne jamais modifier manuellement `/etc/shadow`.
|
||||
- Le retour à une ancienne génération NixOS ne restaure pas les mots de passe mutables.
|
||||
@@ -2,51 +2,51 @@
|
||||
|
||||
# 🛡️ NixOS Workstations
|
||||
|
||||
### Déploiement industrialisé d'environnements de bureau NixOS sécurisés
|
||||
### Déploiement industrialisé de postes de travail NixOS sécurisés
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
**Une base NixOS reproductible pour construire, sécuriser et maintenir un parc de postes de travail homogènes.**
|
||||
**Une base déclarative et reproductible pour déployer, sécuriser et maintenir des environnements de bureau NixOS homogènes.**
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Objectif du projet
|
||||
## 🎯 Objectif
|
||||
|
||||
**NixOS Workstations** a pour objectif d'industrialiser le déploiement de postes de travail NixOS en séparant clairement :
|
||||
**NixOS Workstations** fournit un socle commun permettant de construire un parc de postes de travail NixOS avec :
|
||||
|
||||
- 🧩 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.
|
||||
- 🧬 une configuration déclarative versionnée dans Git ;
|
||||
- 📦 un ensemble logiciel homogène ;
|
||||
- 🖥️ KDE Plasma 6 ;
|
||||
- 👤 des comptes locaux maîtrisés ;
|
||||
- 🔐 une authentification locale de secours ;
|
||||
- 🔑 FIDO2 / YubiKey ;
|
||||
- ✨ une finalisation graphique du poste lors de la première utilisation ;
|
||||
- 💻 une séparation stricte entre configuration commune et matériel propre à chaque machine.
|
||||
|
||||
```text
|
||||
┌─────────────────────────────┐
|
||||
│ Dépôt Git │
|
||||
┌───────────────────────────┐
|
||||
│ Git │
|
||||
│ nixos-workstations │
|
||||
└──────────────┬──────────────┘
|
||||
└─────────────┬─────────────┘
|
||||
│
|
||||
┌───────────────┼────────────────┐
|
||||
┌────────────────┼────────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
📦 Logiciels 🔐 Sécurité 🖥️ Bureau KDE
|
||||
📦 Logiciels 👤 Utilisateurs 🛡️ Sécurité
|
||||
│ │ │
|
||||
└───────────────┼────────────────┘
|
||||
└────────────────┼────────────────┘
|
||||
│
|
||||
▼
|
||||
💻 Poste NixOS
|
||||
🖥️ NixOS + KDE Plasma
|
||||
│
|
||||
🔐 Mot de passe
|
||||
🔑 FIDO2 / YubiKey
|
||||
│
|
||||
▼
|
||||
@@ -59,51 +59,52 @@ L'idée est qu'un poste puisse être réinstallé puis reconstruit à partir du
|
||||
|
||||
| | 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 |
|
||||
| 🧬 | **Déclaratif** | Décrire l'état attendu du poste dans Git |
|
||||
| ♻️ | **Reproductible** | Reconstruire un poste de manière cohérente |
|
||||
| 🧱 | **Modulaire** | Séparer logiciels, utilisateurs, sécurité et UX |
|
||||
| 🔐 | **Natif NixOS** | Utiliser les mécanismes système plutôt que les contourner |
|
||||
| 🔑 | **FIDO2** | Utiliser une clé de sécurité comme moyen d'authentification principal |
|
||||
| 🧰 | **Industrialisable** | Éviter les fichiers de configuration complets spécifiques à chaque poste |
|
||||
| 🧪 | **Validation progressive** | `build` → `dry-activate` → `test` → `switch` |
|
||||
| 🧰 | **Industrialisation** | Limiter les opérations spécifiques à chaque poste |
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Architecture du dépôt
|
||||
## 🏗️ Architecture
|
||||
|
||||
```text
|
||||
nixos-workstations/
|
||||
├── configuration.nix
|
||||
├── u2f-mappings
|
||||
├── LICENSE
|
||||
├── COMMERCIAL-LICENSE.md
|
||||
├── u2f-mappings
|
||||
├── PRODUCTION-CHECKLIST.md
|
||||
│
|
||||
├── first-login-ui/
|
||||
├── workstation-setup/
|
||||
│ ├── CMakeLists.txt
|
||||
│ ├── org.raspot.nixosfirstlogin.desktop
|
||||
│ ├── org.raspot.nixosworkstations.setup.desktop
|
||||
│ └── src/
|
||||
│ ├── CMakeLists.txt
|
||||
│ ├── main.cpp
|
||||
│ └── Main.qml
|
||||
│ ├── Main.qml
|
||||
│ ├── ProvisioningBackend.h
|
||||
│ └── ProvisioningBackend.cpp
|
||||
│
|
||||
└── modules/
|
||||
├── software.nix
|
||||
├── users.nix
|
||||
├── security.nix
|
||||
├── yubikey-first-login.nix
|
||||
└── first-login-ui.nix
|
||||
└── workstation-setup.nix
|
||||
```
|
||||
|
||||
### 💻 Matériel propre à chaque machine
|
||||
### 💻 Matériel propre à chaque poste
|
||||
|
||||
Le fichier matériel généré par NixOS **n'est pas stocké dans le dépôt commun** :
|
||||
Le fichier généré lors de l'installation reste **local à la machine** :
|
||||
|
||||
```text
|
||||
/etc/nixos/hardware-configuration.nix
|
||||
```
|
||||
|
||||
La configuration du parc l'importe directement :
|
||||
Il n'est pas partagé dans le dépôt commun.
|
||||
|
||||
```nix
|
||||
imports = [
|
||||
@@ -111,64 +112,56 @@ imports = [
|
||||
./modules/software.nix
|
||||
./modules/users.nix
|
||||
./modules/security.nix
|
||||
./modules/yubikey-first-login.nix
|
||||
./modules/first-login-ui.nix
|
||||
./modules/workstation-setup.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.
|
||||
Les UUID de partitions et autres informations propres au matériel ne peuvent ainsi pas écraser la configuration d'un autre poste.
|
||||
|
||||
---
|
||||
|
||||
## 🧩 Modules principaux
|
||||
## 🧩 Modules
|
||||
|
||||
### 📦 `software.nix`
|
||||
|
||||
Décrit l'environnement logiciel commun :
|
||||
|
||||
- 🌐 Chromium ;
|
||||
- 🦊 Firefox ESR ;
|
||||
- 📄 OnlyOffice ;
|
||||
- 💬 Teams ;
|
||||
- ✉️ Outlook Web ;
|
||||
- 🔧 Git et outils nécessaires au poste.
|
||||
Déploie l'environnement logiciel commun : Chromium, Firefox ESR, OnlyOffice, Teams, Outlook Web, Git et les outils FIDO2 nécessaires.
|
||||
|
||||
### 👤 `users.nix`
|
||||
|
||||
Décrit les comptes locaux attendus et leurs rôles :
|
||||
Décrit les comptes locaux et leurs rôles. Les mots de passe restent mutables afin que l'utilisateur puisse personnaliser son secret local avec `passwd`.
|
||||
|
||||
- 🛠️ compte d'administration locale ;
|
||||
- 👩💻 comptes utilisateurs standards ;
|
||||
- 👥 appartenance aux groupes nécessaires ;
|
||||
- 🔐 mécanismes d'initialisation des secrets lorsque nécessaire.
|
||||
Dans ce **lab**, le mot de passe temporaire d'`alice` est volontairement déclaré dans `users.nix` avec `initialHashedPassword`.
|
||||
|
||||
```text
|
||||
Mot de passe temporaire du lab : LaboTest@1980
|
||||
```
|
||||
|
||||
Avec `users.mutableUsers = true`, ce hash sert à la création initiale du compte. Une fois le mot de passe changé par l'utilisateur, les activations suivantes conservent le nouveau mot de passe local.
|
||||
|
||||
> Pour un déploiement réel, le dépôt sera privé et la stratégie de secret initial pourra être adaptée au processus d'exploitation.
|
||||
|
||||
### 🛡️ `security.nix`
|
||||
|
||||
Centralise les paramètres d'authentification et les mappings FIDO2/U2F.
|
||||
Déploie le mapping utilisateur ↔ YubiKey et configure l'authentification PAM U2F/FIDO2 utilisée par le poste.
|
||||
|
||||
```text
|
||||
Utilisateur
|
||||
│
|
||||
├──── 🔐 mot de passe
|
||||
│
|
||||
└──── 🔑 YubiKey / FIDO2
|
||||
### ✨ `workstation-setup.nix`
|
||||
|
||||
Déploie l'assistant plein écran de finalisation du poste et son lancement automatique pour l'utilisateur concerné.
|
||||
|
||||
Le nom de l'utilisateur n'est pas codé dans l'application : il est déclaré dans la configuration NixOS :
|
||||
|
||||
```nix
|
||||
nixosWorkstations.workstationSetup = {
|
||||
enable = true;
|
||||
user = "alice";
|
||||
};
|
||||
```
|
||||
|
||||
### 🔑 `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
|
||||
## ✨ Finalisation du poste
|
||||
|
||||
Lors de la première utilisation, l'utilisateur dispose d'un assistant graphique intégré au bureau KDE.
|
||||
Lors de la première ouverture de session de l'utilisateur :
|
||||
|
||||
<div align="center">
|
||||
|
||||
@@ -176,197 +169,168 @@ Lors de la première utilisation, l'utilisateur dispose d'un assistant graphique
|
||||
|
||||
</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 local
|
||||
|
||||
### 🔐 Mot de passe
|
||||
- 👁️ affichage/masquage des champs ;
|
||||
- 📊 indicateur de robustesse purement informatif ;
|
||||
- ✅ mot de passe actuel obligatoire ;
|
||||
- ✅ confirmation du nouveau mot de passe ;
|
||||
- 🟢 aucun blocage UI lié à une robustesse jugée faible ;
|
||||
- 🔒 changement réel effectué par `/run/wrappers/bin/passwd`.
|
||||
|
||||
- 🔒 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.
|
||||
### 🔑 PIN YubiKey
|
||||
|
||||
### 🔑 YubiKey
|
||||
|
||||
- 🔢 saisie du PIN temporaire ;
|
||||
- 👁️ affichage/masquage du PIN ;
|
||||
- 🔁 choix et confirmation du nouveau PIN ;
|
||||
- ✅ validation avant la fin du parcours.
|
||||
- ✅ PIN temporaire obligatoire ;
|
||||
- ✅ choix et confirmation du nouveau PIN ;
|
||||
- 🔐 changement réel effectué par `ykman fido access change-pin` ;
|
||||
- ⚠️ aucune boucle automatique en cas de mauvais PIN.
|
||||
|
||||
### ✅ Poste prêt
|
||||
### 🚪 Assistant obligatoire
|
||||
|
||||
L'écran final récapitule visuellement les opérations réalisées avant de rendre le poste à l'utilisateur.
|
||||
Tant que les deux opérations n'ont pas **réellement réussi** :
|
||||
|
||||
- le bouton final n'est pas disponible ;
|
||||
- une fermeture classique de la fenêtre est refusée ;
|
||||
- une minimisation est immédiatement ramenée en plein écran ;
|
||||
- l'assistant sera reproposé à la prochaine ouverture de session si la configuration reste incomplète.
|
||||
|
||||
Les étapes ne sont considérées terminées qu'après création des marqueurs :
|
||||
|
||||
```text
|
||||
~/.local/state/nixos-workstations/password-initialized
|
||||
~/.local/state/nixos-workstations/yubikey-pin-initialized
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ Sécurité
|
||||
|
||||
<div align="center">
|
||||
|
||||
### 🔐 L'interface graphique ne doit pas réimplémenter les mécanismes de sécurité du système.
|
||||
|
||||
</div>
|
||||
|
||||
L'architecture sépare l'interface des opérations sensibles :
|
||||
## 🛡️ Traitement des secrets
|
||||
|
||||
```text
|
||||
┌────────────────────────────────┐
|
||||
┌───────────────────────────────┐
|
||||
│ Qt Quick / QML │
|
||||
│ Présentation et validation │
|
||||
└───────────────┬────────────────┘
|
||||
│
|
||||
│ saisie utilisateur │
|
||||
└───────────────┬───────────────┘
|
||||
│ pipe privé
|
||||
▼
|
||||
┌────────────────────────────────┐
|
||||
│ Backend contrôlé │
|
||||
├────────────────────────────────┤
|
||||
│ 🔐 Mot de passe → passwd NixOS │
|
||||
│ 🔑 PIN YubiKey → ykman │
|
||||
└────────────────────────────────┘
|
||||
┌───────────────────────────────┐
|
||||
│ backend Qt contrôlé │
|
||||
└───────────────┬───────────────┘
|
||||
│
|
||||
┌────────┴────────┐
|
||||
▼ ▼
|
||||
/run/wrappers/bin/ ykman FIDO2
|
||||
passwd
|
||||
│ │
|
||||
▼ ▼
|
||||
/etc/shadow YubiKey
|
||||
```
|
||||
|
||||
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.
|
||||
- 🚫 aucun mot de passe ou PIN dans les arguments de processus ;
|
||||
- 🚫 aucun **secret définitif utilisateur** écrit dans Git ;
|
||||
- 🧪 le mot de passe temporaire du lab est volontairement versionné dans `users.nix` ;
|
||||
- 🚫 aucune modification directe de `/etc/shadow` ;
|
||||
- 🚫 aucun module PAM artisanal ;
|
||||
- 🚫 aucun reset automatique de YubiKey ;
|
||||
- ✅ wrapper `passwd` fourni par NixOS ;
|
||||
- ✅ outil Yubico officiel pour FIDO2 ;
|
||||
- ✅ logs des helpers désactivés ;
|
||||
- ✅ core dumps désactivés pendant le provisioning ;
|
||||
- ✅ une seule tentative FIDO2 par validation utilisateur.
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Cycle de validation
|
||||
## 🔐 Mot de passe temporaire du lab
|
||||
|
||||
Une modification du dépôt n'est pas directement appliquée avec `switch`.
|
||||
Le compte `alice` est créé avec un mot de passe temporaire connu pour faciliter les essais reproductibles :
|
||||
|
||||
### 1️⃣ Construction
|
||||
```text
|
||||
LaboTest@1980
|
||||
```
|
||||
|
||||
Son hash est déclaré directement dans :
|
||||
|
||||
```text
|
||||
modules/users.nix
|
||||
```
|
||||
|
||||
L'assistant demande ensuite à l'utilisateur de remplacer ce mot de passe temporaire par son mot de passe personnel. Avec `users.mutableUsers = true`, le nouveau mot de passe est conservé lors des activations suivantes.
|
||||
|
||||
> Cette décision est volontaire pour le **lab**. Elle évite une étape locale supplémentaire avant chaque nouvelle installation de test.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Déploiement
|
||||
|
||||
### 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
|
||||
### 2. Simulation d'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
|
||||
### 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. Activation persistante
|
||||
|
||||
### 4️⃣ Validation définitive
|
||||
Après validation complète de la checklist :
|
||||
|
||||
```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.
|
||||
👉 Voir [`PRODUCTION-CHECKLIST.md`](PRODUCTION-CHECKLIST.md) avant un `switch`.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Vision de déploiement
|
||||
## 🔭 Industrialisation future
|
||||
|
||||
L'objectif est de réduire progressivement la préparation d'un poste à une chaîne standardisée :
|
||||
Le socle est conçu pour évoluer vers :
|
||||
|
||||
```text
|
||||
💿 Installation NixOS
|
||||
Inventaire / GLPI / CSV
|
||||
│
|
||||
▼
|
||||
🧬 Génération du matériel local
|
||||
Utilisateur + poste + profil matériel
|
||||
│
|
||||
▼
|
||||
📥 Récupération du dépôt Git
|
||||
Configuration NixOS commune
|
||||
│
|
||||
▼
|
||||
🧱 Construction de la configuration
|
||||
Installation automatisée
|
||||
│
|
||||
▼
|
||||
🛡️ Application du socle de sécurité
|
||||
│
|
||||
▼
|
||||
👤 Affectation de l'utilisateur
|
||||
│
|
||||
▼
|
||||
🔑 Préparation FIDO2 / YubiKey
|
||||
│
|
||||
▼
|
||||
✨ Finalisation graphique
|
||||
│
|
||||
▼
|
||||
✅ Poste prêt
|
||||
Finalisation utilisateur FIDO2
|
||||
```
|
||||
|
||||
À 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.
|
||||
Les prochaines briques possibles sont notamment Disko, un inventaire machines/utilisateurs et une installation unattended.
|
||||
|
||||
---
|
||||
|
||||
## 🧰 Technologies
|
||||
## ⚖️ Licence
|
||||
|
||||
<p align="center">
|
||||
Le projet est distribué sous **PolyForm Noncommercial 1.0.0**.
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
✅ utilisation et modification non commerciales selon les conditions de la licence ;
|
||||
🚫 exploitation commerciale sans autorisation ;
|
||||
💼 une exploitation commerciale peut faire l'objet d'un accord séparé avec le titulaire des droits.
|
||||
|
||||
</p>
|
||||
Voir [`LICENSE`](LICENSE) et [`COMMERCIAL-LICENSE.md`](COMMERCIAL-LICENSE.md).
|
||||
|
||||
---
|
||||
|
||||
## 📜 Licence
|
||||
|
||||

|
||||

|
||||
|
||||
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 :
|
||||
|
||||
- [`LICENSE`](./LICENSE)
|
||||
- [`COMMERCIAL-LICENSE.md`](./COMMERCIAL-LICENSE.md)
|
||||
|
||||
> ℹ️ PolyForm Noncommercial est une licence **source-available non commerciale** et non une licence open source au sens OSI.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
### 🛡️ NixOS Workstations
|
||||
|
||||
**Déployer des postes homogènes, reproductibles et sécurisés sans transformer chaque machine en projet individuel.**
|
||||
|
||||
</div>
|
||||
> Cette licence est *source-available non commerciale* ; elle n'est pas une licence Open Source au sens OSI.
|
||||
|
||||
Reference in New Issue
Block a user