Comments: style plus concis (calé sur modules/anssi/, écrit par des pros)
Aucun changement fonctionnel -- juste les commentaires : essais de justification en plusieurs paragraphes remplacés par des notes courtes, type/quoi/pourquoi en une ou deux lignes. Corrige au passage un commentaire obsolète dans installer-base.nix qui décrivait encore l'usage de disko-install (abandonné depuis pour disko + nixos-install séparés). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+21
-56
@@ -4,65 +4,36 @@
|
||||
{
|
||||
imports = [ ../../modules/anssi ];
|
||||
|
||||
# Toutes les machines de la flotte portent le même nom : pas
|
||||
# d'identification individuelle pour l'instant (voir README du repo
|
||||
# racine). À revoir plus tard via le numéro de série DMI si un vrai
|
||||
# besoin d'identification apparaît.
|
||||
# Nom uniforme, pas d'identification individuelle pour l'instant (voir
|
||||
# README). À revoir via le numéro de série DMI si le besoin apparaît.
|
||||
networking.hostName = "Nixos_Fleet";
|
||||
networking.networkmanager.enable = true;
|
||||
|
||||
# Firmware au maximum (wifi/Bluetooth/PCI en tout genre), pour coller à
|
||||
# un parc de PC hétérogène et inconnu à l'avance -- même logique que
|
||||
# Linux Mint, qui embarque les firmwares non-libres par défaut plutôt
|
||||
# que de s'en tenir au strict libre.
|
||||
# enableAllFirmware inclut déjà enableRedistributableFirmware (son
|
||||
# défaut est `config.hardware.enableAllFirmware`, vérifié dans le
|
||||
# source nixpkgs : nixos/modules/hardware/all-firmware.nix), donc pas
|
||||
# besoin de déclarer les deux. Ce que enableAllFirmware ajoute EN PLUS
|
||||
# du strict redistribuable (même fichier source) :
|
||||
# - broadcom-bt-firmware (Bluetooth Broadcom, très répandu)
|
||||
# - b43Firmware (wifi Broadcom BCM43xx)
|
||||
# - xone-dongle-firmware, facetimehd-firmware
|
||||
# Nécessite nixpkgs.config.allowUnfree = true (déjà réglé plus bas).
|
||||
# hardware.wirelessRegulatoryDatabase s'active automatiquement dès que
|
||||
# l'un des deux est vrai (même fichier source) -- pas besoin de le
|
||||
# régler à la main.
|
||||
# mkDefault : un profil peut désactiver au cas par cas.
|
||||
# Couverture matérielle maximale (wifi/Bluetooth/PCI) sur un parc
|
||||
# hétérogène inconnu à l'avance. Inclut enableRedistributableFirmware.
|
||||
hardware.enableAllFirmware = lib.mkDefault true;
|
||||
|
||||
# Durcissement : reprend le module ANSSI de SécurixOS (modules/anssi/,
|
||||
# vendored ci-dessus), qui remplace/couvre déjà tous les sysctls qui
|
||||
# étaient déclarés à la main sur le profil oreo (dmesg_restrict,
|
||||
# kptr_restrict, yama.ptrace_scope, rp_filter, tcp_syncookies,
|
||||
# protected_hardlinks/symlinks -- mêmes valeurs, vérifié règle par
|
||||
# règle dans modules/anssi/kernel-options.nix : R9, R11, R12, R14).
|
||||
# level "intermediary" : c'est le niveau que couvraient déjà TOUTES
|
||||
# les valeurs qu'on avait mises à la main sur oreo -- rien de plus
|
||||
# fort n'a été inventé ici. category "client" : ce sont des postes de
|
||||
# travail, pas des serveurs (les règles actuellement implémentées sont
|
||||
# toutes "category = base" donc ça ne change rien pour l'instant, mais
|
||||
# c'est le bon réglage si Sécurix ajoute des règles catégorisées).
|
||||
# Durcissement ANSSI (modules/anssi/, vendored depuis SécurixOS).
|
||||
# level "intermediary" : couvre déjà tout ce qui était réglé à la main
|
||||
# sur le profil oreo (R9/R11/R12/R14). category "client" : postes de
|
||||
# travail, pas des serveurs.
|
||||
#
|
||||
# ATTENTION : R12 force net.ipv4.ip_forward = 0. Sans impact ici (ce
|
||||
# sont des postes clients), mais à ne SURTOUT PAS importer sur
|
||||
# pxe-server/configuration.nix, qui a besoin l'inverse (voir son
|
||||
# networking.nat) -- pxe-server n'importe pas ce fichier, donc ok.
|
||||
# R12 force net.ipv4.ip_forward = 0 : sans impact sur des postes
|
||||
# clients. Ne pas importer ce module sur pxe-server/configuration.nix
|
||||
# (a besoin du forwarding inverse).
|
||||
security.anssi = {
|
||||
enable = true;
|
||||
level = "intermediary";
|
||||
category = "client";
|
||||
|
||||
# R8 (mitigations CPU) désactive l'hyperthreading via "mds=full,nosmt"
|
||||
# -- impact perf trop lourd sur le matériel bas de gamme du parc (PC
|
||||
# à 4 Go de RAM). On désactive donc la règle via le mécanisme d'exception
|
||||
# prévu par le module lui-même (modules/anssi/options.nix), PAS en la
|
||||
# contournant en silence.
|
||||
exceptions.R8.rationale = "SMT (hyperthreading) volontairement conservé : impact perf trop lourd sur le parc (matériel bas de gamme, parfois 4 Go de RAM). Les autres mitigations de R8 sont réappliquées ci-dessous, à l'identique du texte source (modules/anssi/kernel-options.nix), sauf 'nosmt' remplacé par la valeur alternative documentée 'mds=full' (mitige MDS sans couper l'hyperthreading).";
|
||||
# R8 (mitigations CPU) coupe l'hyperthreading via "mds=full,nosmt" :
|
||||
# trop coûteux sur le matériel bas de gamme du parc. Désactivé via
|
||||
# exception plutôt que contourné en silence ; réappliqué ci-dessous
|
||||
# sans le "nosmt".
|
||||
exceptions.R8.rationale = "SMT conservé : impact perf trop lourd sur le parc (matériel bas de gamme, parfois 4 Go de RAM). Mitigations réappliquées ci-dessous sans 'nosmt'.";
|
||||
};
|
||||
|
||||
# Reprise verbatim de modules/anssi/kernel-options.nix (règle R8), sauf
|
||||
# "mds=full,nosmt" -> "mds=full" (voir exception R8 ci-dessus). Toutes
|
||||
# les autres valeurs viennent du texte source, aucune n'est inventée.
|
||||
# R8 (modules/anssi/kernel-options.nix), sauf mds=full,nosmt -> mds=full.
|
||||
boot.kernelParams = [
|
||||
"l1tf=full,force"
|
||||
"page_poison=on"
|
||||
@@ -77,9 +48,8 @@
|
||||
"rng_core.default_quality=500"
|
||||
];
|
||||
|
||||
# Pas (encore) couvert par le module ANSSI ci-dessus (R45 y est
|
||||
# explicitement listé en exception : "AppArmor is partially supported
|
||||
# on NixOS", modules/anssi/base.nix) -- repris tel quel du profil oreo.
|
||||
# Pas couvert par le module ANSSI (R45 en exception : AppArmor
|
||||
# partiellement supporté sur NixOS).
|
||||
systemd.coredump.enable = false;
|
||||
security.apparmor.packages = [ pkgs.apparmor-profiles ];
|
||||
security.apparmor.enableCache = true;
|
||||
@@ -109,9 +79,7 @@
|
||||
services.openssh.enable = true;
|
||||
networking.firewall.enable = true;
|
||||
|
||||
# Certains PC du parc n'ont que 4 Go de RAM (Cinnamon + Firefox +
|
||||
# LibreOffice + VLC peuvent solliciter la mémoire) — swap compressé en
|
||||
# RAM, marche identiquement quelle que soit la machine.
|
||||
# Swap compressé en RAM : couvre le bas du parc (4 Go, desktop complet).
|
||||
zramSwap = {
|
||||
enable = true;
|
||||
memoryPercent = 50;
|
||||
@@ -129,10 +97,7 @@
|
||||
options = "--delete-older-than 30d";
|
||||
};
|
||||
|
||||
# Convergence : chaque machine de la flotte tire ses mises à jour du
|
||||
# même repo public, sans intervention humaine (pas de netrc nécessaire
|
||||
# ici, contrairement au repo nixos_users). Voir README pour adapter
|
||||
# l'URL réelle du repo.
|
||||
# Convergence automatique depuis le repo public, sans netrc.
|
||||
system.autoUpgrade = {
|
||||
enable = true;
|
||||
dates = "daily";
|
||||
|
||||
@@ -15,19 +15,16 @@
|
||||
warpinator
|
||||
];
|
||||
|
||||
# Fond d'écran par défaut (juste le logo NixOS, pas la galerie perso de
|
||||
# nixos_cinnamon -- repo public, on n'y met que ce qui est nécessaire).
|
||||
# Ce chemin (/etc/nixos) suppose la config installée là -- voir
|
||||
# nixos_fleet/installer/install.sh (do_install copie le clone sur le
|
||||
# disque cible après nixos-install).
|
||||
# Fond d'écran par défaut (logo NixOS, pas la galerie perso de
|
||||
# nixos_cinnamon). Suppose la config installée sur /etc/nixos (voir
|
||||
# installer/install.sh).
|
||||
environment.etc."dconf/db/local.d/00-background".text = ''
|
||||
[org/cinnamon/desktop/background]
|
||||
picture-uri='file:///etc/nixos/hosts/common/wallpaper/Nix/13977413.png'
|
||||
'';
|
||||
system.activationScripts.dconfUpdate.text = "${pkgs.dconf}/bin/dconf update";
|
||||
|
||||
# Réglages de confidentialité génériques (pas de SearXNG/DNS personnels
|
||||
# comme sur le poste perso — cette config est destinée à être publique).
|
||||
# Confidentialité générique (pas de SearXNG/DNS perso : repo public).
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
languagePacks = [ "fr" ];
|
||||
|
||||
Reference in New Issue
Block a user