Vérifié dans nixpkgs (nixos/modules/hardware/all-firmware.nix) : enableAllFirmware inclut déjà enableRedistributableFirmware (son défaut est config.hardware.enableAllFirmware) et ajoute en plus broadcom-bt-firmware (Bluetooth), b43Firmware (wifi Broadcom), xone-dongle-firmware, facetimehd-firmware. Nécessaire pour coller à un parc de PC inconnu à l'avance (logique Linux Mint : firmware non-libre inclus par défaut). allowUnfree déjà réglé, rien d'autre à changer. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
152 lines
6.0 KiB
Nix
152 lines
6.0 KiB
Nix
# Socle commun à toutes les machines de la flotte (repo public).
|
|
{ pkgs, lib, ... }:
|
|
|
|
{
|
|
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.
|
|
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.
|
|
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).
|
|
#
|
|
# 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.
|
|
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).";
|
|
};
|
|
|
|
# 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.
|
|
boot.kernelParams = [
|
|
"l1tf=full,force"
|
|
"page_poison=on"
|
|
"pti=on"
|
|
"slab_nomerge=yes"
|
|
"slub_debug=FZP"
|
|
"spec_store_bypass_disable=seccomp"
|
|
"spectre_v2=on"
|
|
"mds=full" # sans ",nosmt" : hyperthreading conservé
|
|
"mce=0"
|
|
"page_alloc.shuffle=1"
|
|
"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.
|
|
systemd.coredump.enable = false;
|
|
security.apparmor.packages = [ pkgs.apparmor-profiles ];
|
|
security.apparmor.enableCache = true;
|
|
|
|
time.timeZone = "Europe/Paris";
|
|
i18n.defaultLocale = "fr_FR.UTF-8";
|
|
i18n.extraLocaleSettings = {
|
|
LC_ADDRESS = "fr_FR.UTF-8";
|
|
LC_IDENTIFICATION = "fr_FR.UTF-8";
|
|
LC_MEASUREMENT = "fr_FR.UTF-8";
|
|
LC_MONETARY = "fr_FR.UTF-8";
|
|
LC_NAME = "fr_FR.UTF-8";
|
|
LC_NUMERIC = "fr_FR.UTF-8";
|
|
LC_PAPER = "fr_FR.UTF-8";
|
|
LC_TELEPHONE = "fr_FR.UTF-8";
|
|
LC_TIME = "fr_FR.UTF-8";
|
|
};
|
|
services.xserver.xkb = {
|
|
layout = "fr";
|
|
variant = "";
|
|
};
|
|
|
|
boot.loader.systemd-boot.enable = true;
|
|
boot.loader.efi.canTouchEfiVariables = true;
|
|
boot.loader.systemd-boot.configurationLimit = 10;
|
|
|
|
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.
|
|
zramSwap = {
|
|
enable = true;
|
|
memoryPercent = 50;
|
|
};
|
|
|
|
nix.settings.experimental-features = [
|
|
"nix-command"
|
|
"flakes"
|
|
];
|
|
nixpkgs.config.allowUnfree = true;
|
|
|
|
nix.gc = {
|
|
automatic = true;
|
|
dates = "weekly";
|
|
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.
|
|
system.autoUpgrade = {
|
|
enable = true;
|
|
dates = "daily";
|
|
flake = "git+https://gitea.miniclic.net/Damien/Nixos_Fleet.git#usagers";
|
|
};
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
git
|
|
curl
|
|
wget
|
|
htop
|
|
nixfmt
|
|
];
|
|
|
|
system.stateVersion = "26.05";
|
|
}
|