À une époque où une VM ou une instance cloud se déploie en minutes et est accessible sur Internet dès le premier boot, l’intérêt pour des outils d’endurecimiento automatisé qui appliquent les meilleures pratiques sans laisser de failles s’est accru. Parmi les plus cités ces derniers mois dans la communauté figure le dépôt konstruktoid/hardening: un script d’endurecimiento pour Ubuntu (systemd) qui exécute, dans un ordre précis, une dizaines de contrôles sur kernel, réseau, systemd, fstab, SSH, logging, paquets et plus encore, assurant que le système adopte un profil de sécurité élevé et cohérent.
Ce projet ne se limite pas à “un bash qui fait tout sans explication”. Au contraire : il répertorie toutes les fonctions (préfixe f_) dans l’ordre d’exécution, détaille les modifications apportées par chacune, et prévient des consequences opérationnelles (par exemple, désactiver usb-storage bloque l’utilisation des clés USB à moins d’utiliser USBGuard). L’objectif : fournir des référentiels de contrôle (beaucoup alignés avec les recommandations CIS, Ubuntu, Mozilla) pour des admins souhaitant automatiser leur baseline sans entrer dans des cadres de conformité complexes.
Une symphonie en plusieurs mouvements : du kernel à systemd, du réseau à l’utilisateur
Le script suit un ordre logique qui minimise les risques et résout les dépendances entre blocs. La séquence, grosso modo, est la suivante :
1) Pré-contrôle : permissions et apt
La fonction pre fixe des flags pour APT et vérifie les permissions de base. Sans ces fondations, certaines étapes ultérieures (installation, nettoyage, configuration noexec en /tmp) pourraient échouer.
2) Kernel et réseau : firewall et modules superflus
firewall: si UFW est installé, il est configuré. Permet SSH depuis les adresses de $FW_ADMIN vers $SSH_PORT (variable du script), active la journalisation et fixe IPT_SYSCTL=/etc/sysctl.conf.
disablenet: désactive les modules réseau moins courants (dccp, sctp, rds, tipc).
disablefs: désactive les systèmes de fichiers peu utilisés en production (cramfs, freevxfs, jffs2, ksmbd, hfs, hfsplus, udf).
disablemod: désactive les modules risqués ou inutile (bluetooth, firewire, pcspkr, uvcvideo, usb-storage, etc.). Attention : désactiver usb-storage empêche l’utilisation de disques USB ; si des médias externes sont nécessaires, le script prévoit plus tard USBGuard.
3) systemd: cohérence et limites par défaut
systemdconf: fixe CrashShell=no, DumpCore=no et des limites conservatrices pour fichiers et processus (par défaut, DefaultLimitNOFILE=1024, DefaultLimitNPROC=1024, DefaultLimitCORE=0) aussi bien dans system.conf global que dans user.conf.
resolvedconf: configure systemd-resolved avec des DNS tirés de /etc/resolv.conf, active le DNS over TLS en mode opportunistic, active DNSSEC en allow-downgrade et définit un FallbackDNS à 1.0.0.1.
logindconf: renforce la gestion des sessions : IdleAction=lock après 15 minutes, KillUserProcesses=1, RemoveIPC=yes, en excluant root.
journalctl: assure la persistance du journal (Storage=persistent), le comprime et le redirige vers syslog. Si le fichier de rsyslog est modifiable, fixe $FileCreateMode 0600 pour assurer les permissions.
4) Temps et fichiers : timesyncd et fstab avec options sécurisées
timesyncd: définit serveurs NTP (jusqu’à quatre avec < 50 ms de latence) et RootDistanceMaxSec=1.
fstab: ajoute ou ajuste les montages avec nosuid,nodev,noexec là où c’est pertinent :
/boot et /home avec nosuid,nodev s’ils existent.
/var/log, /var/log/audit et /var/tmp avec nosuid,nodev,noexec si présents.
- Monte
/run/shm et /dev/shm en tmpfs avec rw,noexec,nosuid,nodev.
- Monte
/proc avec nosuid,nodev,noexec,relatime,hidepid=2 (limite la visibilité des processus aux utilisateurs) – classique en hardening.
- Remplace
/tmp dans fstab par un montage tmpfs via systemd.
5) Gestion des paquets et nettoyage des binaires
prelink: annule le positionnement préalable des binaires (+ désinstallation de prelink) pour éviter toute altération de signature et assurer l’intégrité.
aptget_configure: configure APT pour renforcer la sécurité : interdiction des dépôts non sécurisés, désactivation des recommandations/suggestions, activation de seccomp sandbox, nettoyage automatique hebdomadaire, suppression automatique, etc.
aptget: met à jour le système avec les dernières versions disponibles.
6) Bannières, permissions et accès hôtes
hosts : configure /etc/hosts.allow et /etc/hosts.deny (TCP Wrappers) pour permettre SSH à certains, en refusant le reste (ALL: ALL), tout en autorisant sshd : ALL : ALLOW.
issue : écrit des messages de bienvenue ou d’usage autorisé dans /etc/issue, /etc/issue.net et /etc/motd, en supprimant le script dynamique pour éviter la fuite d’informations en message d’accueil.
7) Utilisateurs, PAM et mots de passe
sudo : limite su aux membres du groupe sudo, avec pam_wheel et paramètres (use_pty, logfile, timeout, etc.) pour renforcer la sécurité.
logindefs : renforce /etc/login.defs (umask, durée minimale/maximale de mot de passe, méthode d’encryption, etc.).
limitsconf : définit les limites de sessions, mémoire, processus dans /etc/security/limits.conf.
adduser, useradd : durcissent les paramètres par défaut (droits, shell, inactivité).
password : incorpore un fichier /etc/security/pwquality.conf pour imposer une politique de mots de passe robuste, et supprime le PAM nullok pour éviter les mots de passe vides.
users : supprime ou désactive les comptes systèmes non essentiels.
lockroot : verrouille le compte root si nécessaire.
8) SSH sur le serveur : une configuration moderne et agressive
sshconfig / sshdconfig: la configuration est exportée dans /etc/ssh/sshd_config.d/hardening.conf ou modifie le principal si inclusion. Parmi les paramètres :
- Chiffrement / KEX / MACs : spécification forte (ex : aes256-ctr, hmac-sha2-512, eccd-sha2). [email protected]
- Accès : désactivation de l’authentification par mot de passe, désactivation de login root, autorisation de membres sudo, port personnalisé.
- Canaux : désactivation du forwarding TCP, agent, X11, compression.
- Contrôles : temporisation, tentatives maximales, sessions maximum, intervalle de keepalive.
- Audit : niveau VERBOSE, bannière dans /etc/issue.net.
- Hygiène : modes stricts, désactivation DNS, utilisation de PAM, etc.
9) Journaux et audit : journal, rsyslog, AIDE, rkhunter
- Le journal est configuré en persistance, compression et envoi vers syslog.
/etc/rsyslog.conf est ajusté si modifiable.
aide : exclut Docker et LXCFS, crée une base initiale et planifie une vérification périodique via systemd.
rkhunter : activé en cron quotidien, auto-génère des rapports et alertes.
- Les autres outils de vérification d’intégrité (aide_post, aide_timer) complètent le processus.
10) Courriel et gestion des core dumps
postfix : installe et configure avec inet_interfaces=loopback-only et autres restrictions de sécurité, pour des alertes locales possibles.
coredump : désactive le stockage des coredumps (Storage=none) pour éviter la fuite de données sensibles.
11) USBGuard, AppArmor, PATH, umask
usbguard: installe et active des règles pour contrôler les dispositifs USB autorisés.
aa_enforce: met en mode enforce les profils AppArmor disponibles.
path et umask: fixe umask 077 et définit des chemins sécurisés pour root et autres utilisateurs.
12) Paquets : installer ce qui protège, retirer ce qui gêne
package_install: installe des outils de sécurité tels que aid, aide-common, cracklib-runtime, debsums, gnupg2, haveged, libpam-pwquality, etc.
package_remove: désinstalle les logiciels non essentiels ou risqués, comme apport, autofs, avahi, beep, git (si non nécessaire), etc.
restrictcompilers: limite les droits des compilateurs en réglant leur mode à 0750.
13) Cron, at, hôtes et accès à la console
cron: désactive atd et ne permet la programmation que pour root.
rhosts : supprime les fichiers hosts.equiv et autres .rhosts.
rootaccess : restreint l’accès à la console via /etc/security/access.conf et /etc/securetty.
14) Nettoyage et vérifications finales
aptget_noexec: ajoute des hooks à APT pour éviter les échecs lors des mises à jour avec /tmp en noexec.
aptget_clean: effectue un nettoyage et une suppression automatique des paquets inutiles.
systemddelta et post: réalisent de la maintenance et des sauvegardes.
checkreboot: avertit si un redémarrage est nécessaire.
Avantages : ordre, cohérence et avertissements “ce qui peut casser”
La force du script réside dans sa capacité à réaliser beaucoup de vérifications dans le bon ordre et à laisser une traces claire. Exemples typiques :
- Un fstab sécurisé sans casser
/tmp : il passe à tmpfs géré par systemd et ajoute les hooks APT pour éviter que dpkg ne échoue à cause de noexec.
- USB : bloque
usb-storage mais installe USBGuard pour autoriser certains périphériques si besoin.
- SSH : déplace le hardening dans
/etc/ssh/sshd_config.d/ si possibilité, évitant d’écraser des configs locales ; la documentation précise où sont écrits les changements.
- Loggins : consolide journalctl avec persistance, compression et redirection vers syslog, tout en protégeant les fichiers permis par rsyslog.
Ce n’est pas de la “magie” : dans des environnements complexes, il est conseillé de relire chaque fonction, d’adapter les whitelists, groupes et ports, et de faire des tests sur des machines de test ou des snapshots avant déploiement en production.
Pour qui et pourquoi l’utiliser plutôt que manuellement ?
Destiné aux administrateurs et équipes cherchant un baseline robuste sur Ubuntu, sans réécrire toute la politique de sécurité. Comparé à une approche manuelle, il apporte :
- Idempotence (si l’ordre et les variables sont respectés),
- Cohérence (les blocs sont conçus comme un tout cohérent),
- Gain de temps (installation, configuration, nettoyage et vérification en une seule étape).
Il ne remplace pas les CIS Benchmarks ni d’autres cadres, mais rapproche considérablement l’état de la machine de ces recommandations.
Questions fréquentes
Ce hardening peut-il casser mon serveur en production ?
Toute démarche hardening agressive comporte un risque de régressions si certaines dépendances ou configurations spécifiques ne sont pas anticipées (ex : usb-storage si vous utilisez des disques USB, ou noexec dans /tmp si vous avez besoin d’écrire dans ce répertoire). La méthode sûre consiste à faire un snapshot, tester en environnement de staging, examiner les variables (IP d’administration, $SSH_PORT, groupes, services) et déployer par étapes.
Puis-je choisir quelles fonctions exécuter ou pas ?
Oui. La documentation liste la séquence dans l’ordre. Vous pouvez commenter ou invoker sélectivement chaque fonction (toutes débutent par f_). Veillez à respecter leur ordre relatif (par exemple, ne pas configurer fstab en dernier si elle dépend du montage tmpfs en amont).
Ce script remplace-t-il les CIS Benchmarks ou des outils comme Ansible ?
Non. Il s’agit d’un outil pratique d’endurecimiento pour Ubuntu systemd. Pour la conformité (CIS, ISO 27001, etc.), il faudra faire un mapping des contrôles ou envelopper ces fonctions dans des outils d’automatisation comme Ansible ou Terraform, avec des inventaires et tests.
Quels sont les changements les plus “sensibles” ?
Les montages (noexec/nosuid/nodev) en /tmp, /proc et autres répertoires système, la désactivation de modules (notamment usb-storage), la configuration SSH stricte (sans mot de passe, bannière, ports non standards, forwardings désactivés), et la gestion des paquets (par exemple, suppression de rsync si non utilisé). Adaptez selon votre contexte.
Sources
Note : Tous les détails présentés s’appuient sur la documentation du dépôt lié (description des fonctions, paramètres, avertissements). Il est fortement conseillé de consulter le README et les fichiers de configuration (config/*) avant de déployer dans des environnements critiques.
Le « durcisseur » d’Ubuntu qui gagne des adeptes : comment fonctionne le script de Konstruktoïd pour sécuriser les systèmes systemd de haut en bas
À une époque où une VM ou une instance cloud se déploie en minutes et est accessible sur Internet dès le premier boot, l’intérêt pour des outils d’endurecimiento automatisé qui appliquent les meilleures pratiques sans laisser de failles s’est accru. Parmi les plus cités ces derniers mois dans la communauté figure le dépôt konstruktoid/hardening: un script d’endurecimiento pour Ubuntu (systemd) qui exécute, dans un ordre précis, une dizaines de contrôles sur kernel, réseau, systemd, fstab, SSH, logging, paquets et plus encore, assurant que le système adopte un profil de sécurité élevé et cohérent.
Ce projet ne se limite pas à “un bash qui fait tout sans explication”. Au contraire : il répertorie toutes les fonctions (préfixe
f_) dans l’ordre d’exécution, détaille les modifications apportées par chacune, et prévient des consequences opérationnelles (par exemple, désactiverusb-storagebloque l’utilisation des clés USB à moins d’utiliser USBGuard). L’objectif : fournir des référentiels de contrôle (beaucoup alignés avec les recommandations CIS, Ubuntu, Mozilla) pour des admins souhaitant automatiser leur baseline sans entrer dans des cadres de conformité complexes.Une symphonie en plusieurs mouvements : du kernel à systemd, du réseau à l’utilisateur
Le script suit un ordre logique qui minimise les risques et résout les dépendances entre blocs. La séquence, grosso modo, est la suivante :
1) Pré-contrôle : permissions et apt
La fonction
prefixe des flags pour APT et vérifie les permissions de base. Sans ces fondations, certaines étapes ultérieures (installation, nettoyage, configuration noexec en/tmp) pourraient échouer.2) Kernel et réseau : firewall et modules superflus
firewall: si UFW est installé, il est configuré. Permet SSH depuis les adresses de$FW_ADMINvers$SSH_PORT(variable du script), active la journalisation et fixeIPT_SYSCTL=/etc/sysctl.conf.disablenet: désactive les modules réseau moins courants (dccp, sctp, rds, tipc).disablefs: désactive les systèmes de fichiers peu utilisés en production (cramfs, freevxfs, jffs2, ksmbd, hfs, hfsplus, udf).disablemod: désactive les modules risqués ou inutile (bluetooth, firewire, pcspkr, uvcvideo, usb-storage, etc.). Attention : désactiverusb-storageempêche l’utilisation de disques USB ; si des médias externes sont nécessaires, le script prévoit plus tard USBGuard.3) systemd: cohérence et limites par défaut
systemdconf: fixeCrashShell=no,DumpCore=noet des limites conservatrices pour fichiers et processus (par défaut,DefaultLimitNOFILE=1024,DefaultLimitNPROC=1024,DefaultLimitCORE=0) aussi bien danssystem.confglobal que dansuser.conf.resolvedconf: configuresystemd-resolvedavec des DNS tirés de/etc/resolv.conf, active le DNS over TLS en mode opportunistic, active DNSSEC en allow-downgrade et définit un FallbackDNS à 1.0.0.1.logindconf: renforce la gestion des sessions :IdleAction=lockaprès 15 minutes,KillUserProcesses=1,RemoveIPC=yes, en excluantroot.journalctl: assure la persistance du journal (Storage=persistent), le comprime et le redirige vers syslog. Si le fichier de rsyslog est modifiable, fixe$FileCreateMode 0600pour assurer les permissions.4) Temps et fichiers : timesyncd et fstab avec options sécurisées
timesyncd: définit serveurs NTP (jusqu’à quatre avec < 50 ms de latence) etRootDistanceMaxSec=1.fstab: ajoute ou ajuste les montages avecnosuid,nodev,noexeclà où c’est pertinent :/bootet/homeavecnosuid,nodevs’ils existent./var/log,/var/log/auditet/var/tmpavecnosuid,nodev,noexecsi présents./run/shmet/dev/shmentmpfsavec rw,noexec,nosuid,nodev./procavecnosuid,nodev,noexec,relatime,hidepid=2(limite la visibilité des processus aux utilisateurs) – classique en hardening./tmpdans fstab par un montagetmpfsvia systemd.5) Gestion des paquets et nettoyage des binaires
prelink: annule le positionnement préalable des binaires (+ désinstallation de prelink) pour éviter toute altération de signature et assurer l’intégrité.aptget_configure: configure APT pour renforcer la sécurité : interdiction des dépôts non sécurisés, désactivation des recommandations/suggestions, activation de seccomp sandbox, nettoyage automatique hebdomadaire, suppression automatique, etc.aptget: met à jour le système avec les dernières versions disponibles.6) Bannières, permissions et accès hôtes
hosts: configure/etc/hosts.allowet/etc/hosts.deny(TCP Wrappers) pour permettre SSH à certains, en refusant le reste (ALL: ALL), tout en autorisantsshd : ALL : ALLOW.issue: écrit des messages de bienvenue ou d’usage autorisé dans/etc/issue,/etc/issue.netet/etc/motd, en supprimant le script dynamique pour éviter la fuite d’informations en message d’accueil.7) Utilisateurs, PAM et mots de passe
sudo: limite su aux membres du groupe sudo, avec pam_wheel et paramètres (use_pty, logfile, timeout, etc.) pour renforcer la sécurité.logindefs: renforce /etc/login.defs (umask, durée minimale/maximale de mot de passe, méthode d’encryption, etc.).limitsconf: définit les limites de sessions, mémoire, processus dans /etc/security/limits.conf.adduser,useradd: durcissent les paramètres par défaut (droits, shell, inactivité).password: incorpore un fichier /etc/security/pwquality.conf pour imposer une politique de mots de passe robuste, et supprime le PAM nullok pour éviter les mots de passe vides.users: supprime ou désactive les comptes systèmes non essentiels.lockroot: verrouille le compte root si nécessaire.8) SSH sur le serveur : une configuration moderne et agressive
sshconfig/sshdconfig: la configuration est exportée dans/etc/ssh/sshd_config.d/hardening.confou modifie le principal si inclusion. Parmi les paramètres :9) Journaux et audit : journal, rsyslog, AIDE, rkhunter
/etc/rsyslog.confest ajusté si modifiable.aide: exclut Docker et LXCFS, crée une base initiale et planifie une vérification périodique via systemd.rkhunter: activé en cron quotidien, auto-génère des rapports et alertes.10) Courriel et gestion des core dumps
postfix: installe et configure avecinet_interfaces=loopback-onlyet autres restrictions de sécurité, pour des alertes locales possibles.coredump: désactive le stockage des coredumps (Storage=none) pour éviter la fuite de données sensibles.11) USBGuard, AppArmor, PATH, umask
usbguard: installe et active des règles pour contrôler les dispositifs USB autorisés.aa_enforce: met en mode enforce les profils AppArmor disponibles.pathetumask: fixe umask 077 et définit des chemins sécurisés pour root et autres utilisateurs.12) Paquets : installer ce qui protège, retirer ce qui gêne
package_install: installe des outils de sécurité tels que aid, aide-common, cracklib-runtime, debsums, gnupg2, haveged, libpam-pwquality, etc.package_remove: désinstalle les logiciels non essentiels ou risqués, comme apport, autofs, avahi, beep, git (si non nécessaire), etc.restrictcompilers: limite les droits des compilateurs en réglant leur mode à 0750.13) Cron, at, hôtes et accès à la console
cron: désactiveatdet ne permet la programmation que pour root.rhosts: supprime les fichiershosts.equivet autres.rhosts.rootaccess: restreint l’accès à la console via /etc/security/access.conf et /etc/securetty.14) Nettoyage et vérifications finales
aptget_noexec: ajoute des hooks à APT pour éviter les échecs lors des mises à jour avec/tmpen noexec.aptget_clean: effectue un nettoyage et une suppression automatique des paquets inutiles.systemddeltaetpost: réalisent de la maintenance et des sauvegardes.checkreboot: avertit si un redémarrage est nécessaire.Avantages : ordre, cohérence et avertissements “ce qui peut casser”
La force du script réside dans sa capacité à réaliser beaucoup de vérifications dans le bon ordre et à laisser une traces claire. Exemples typiques :
/tmp: il passe àtmpfsgéré par systemd et ajoute les hooks APT pour éviter quedpkgne échoue à cause denoexec.usb-storagemais installe USBGuard pour autoriser certains périphériques si besoin./etc/ssh/sshd_config.d/si possibilité, évitant d’écraser des configs locales ; la documentation précise où sont écrits les changements.Ce n’est pas de la “magie” : dans des environnements complexes, il est conseillé de relire chaque fonction, d’adapter les whitelists, groupes et ports, et de faire des tests sur des machines de test ou des snapshots avant déploiement en production.
Pour qui et pourquoi l’utiliser plutôt que manuellement ?
Destiné aux administrateurs et équipes cherchant un baseline robuste sur Ubuntu, sans réécrire toute la politique de sécurité. Comparé à une approche manuelle, il apporte :
Il ne remplace pas les CIS Benchmarks ni d’autres cadres, mais rapproche considérablement l’état de la machine de ces recommandations.
Questions fréquentes
Ce hardening peut-il casser mon serveur en production ?
Toute démarche hardening agressive comporte un risque de régressions si certaines dépendances ou configurations spécifiques ne sont pas anticipées (ex :
usb-storagesi vous utilisez des disques USB, ounoexecdans/tmpsi vous avez besoin d’écrire dans ce répertoire). La méthode sûre consiste à faire un snapshot, tester en environnement de staging, examiner les variables (IP d’administration,$SSH_PORT, groupes, services) et déployer par étapes.Puis-je choisir quelles fonctions exécuter ou pas ?
Oui. La documentation liste la séquence dans l’ordre. Vous pouvez commenter ou invoker sélectivement chaque fonction (toutes débutent par
f_). Veillez à respecter leur ordre relatif (par exemple, ne pas configurer fstab en dernier si elle dépend du montage tmpfs en amont).Ce script remplace-t-il les CIS Benchmarks ou des outils comme Ansible ?
Non. Il s’agit d’un outil pratique d’endurecimiento pour Ubuntu systemd. Pour la conformité (CIS, ISO 27001, etc.), il faudra faire un mapping des contrôles ou envelopper ces fonctions dans des outils d’automatisation comme Ansible ou Terraform, avec des inventaires et tests.
Quels sont les changements les plus “sensibles” ?
Les montages (
noexec/nosuid/nodev) en/tmp,/procet autres répertoires système, la désactivation de modules (notammentusb-storage), la configuration SSH stricte (sans mot de passe, bannière, ports non standards, forwardings désactivés), et la gestion des paquets (par exemple, suppression dersyncsi non utilisé). Adaptez selon votre contexte.Sources
Info Cloud
le dernier
Le « durcisseur » d’Ubuntu qui gagne des adeptes : comment fonctionne le script de Konstruktoïd pour sécuriser les systèmes systemd de haut en bas
Adeia poursuit AMD pour violation présumée de 10 brevets liés au hybrido-bonding et aux nœuds avancés : la technologie 3D V-Cache en jeu
La Chine protège ses centres de données publics : imposera des puces d’IA « made in China » et expulsera NVIDIA, AMD et Intel des projets financés par l’État
New Relic accélère avec GitHub : IA pour remédier aux vulnérabilités, clôturer les « angles morts » de l’observabilité et accélérer le délai de réalisation de la valeur du développement
Trump ferme la porte à la Chine : bloque l’exportation des GPU NVIDIA Blackwell et réorganise le jeu géopolitique de l’IA
Akamai suscite l’alarme : le trafic de bots avec IA augmente de 300 % et menace le modèle économique du web