Un attaquant qui dépose un script dans /tmp ou /dev/shm et l'exécute,
ou qui pose un binaire setuid sur une partition de données, profite de
montages trop permissifs. Les options noexec, nosuid et nodev
ferment ces vecteurs : interdire l'exécution, neutraliser l'élévation de
privilèges, ignorer les fichiers de périphériques. Ce guide montre comment
établir une baseline, durcir /dev/shm et /tmp de façon persistante,
et éviter le piège du noexec sur /tmp qui casse certains installeurs.
L'approche suit CIS 1.1 et la recommandation R28 d'ANSSI-BP-028 v2.0.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre ce que font
nodev,nosuidetnoexec - Mesurer les options de montage actuelles avec
findmnt - Durcir
/dev/shmet/tmpde façon persistante (fstab ou systemd) - Vérifier que l'exécution est bien bloquée, sans casser le système
- Contourner le piège du
noexecsur/tmp
Les trois options de durcissement
Section intitulée « Les trois options de durcissement »| Option | Effet | Vecteur fermé |
|---|---|---|
noexec | Interdit d'exécuter un binaire ou un script depuis ce montage | Charge utile déposée puis exécutée |
nosuid | Neutralise les bits setuid/setgid | Élévation via un binaire setuid posé là |
nodev | Ignore les fichiers de périphériques | Fichier /dev piégé sur une partition de données |
L'idée du durcissement : sur les zones où l'on ne fait que stocker des données
(/tmp, /var, /home, /dev/shm), aucune de ces capacités n'est légitime.
Les retirer ne gêne pas l'exploitation mais bloque des techniques d'attaque
courantes.
Prérequis
Section intitulée « Prérequis »- Un serveur Linux (Debian, Ubuntu, RHEL, AlmaLinux, Rocky) ou une VM
- Un accès root (ou
sudo) - Une fenêtre de test : un montage mal configuré peut empêcher un service de démarrer
Établir une baseline
Section intitulée « Établir une baseline »Regardez les options réellement actives avant de toucher quoi que ce soit :
findmnt -no TARGET,OPTIONS /dev/shm /tmp /homeSur une Debian 12 par défaut, on observe deux trous typiques :
/dev/shm rw,nosuid,nodev/dev/shm a bien nosuid et nodev, mais pas noexec : un script déposé
là s'exécute. Et /tmp n'apparaît pas, car il est sur la racine (pas une
partition séparée), donc impossible à durcir tant qu'on ne le monte pas à part.
Durcir /dev/shm
Section intitulée « Durcir /dev/shm »C'est le cas le plus simple : /dev/shm est déjà un tmpfs, il suffit de le
remonter avec l'option manquante, puis de figer ça dans /etc/fstab.
-
Remonter avec
noexecFenêtre de terminal sudo mount -o remount,noexec,nosuid,nodev /dev/shm -
Vérifier que l'exécution est bloquée
Fenêtre de terminal printf '#!/bin/sh\necho test\n' > /dev/shm/poc.shchmod +x /dev/shm/poc.sh/dev/shm/poc.sh/dev/shm/poc.sh: Permission deniedLe
noexecrejette l'exécution, même si le fichier porte le bit exécutable. -
Rendre persistant dans
/etc/fstabtmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0
Durcir /tmp
Section intitulée « Durcir /tmp »Sur la plupart des distributions, /tmp n'est pas une partition séparée.
Deux approches pour le durcir, au choix :
Monter /tmp en mémoire (tmpfs) avec les options de durcissement. Ajoutez à
/etc/fstab :
tmpfs /tmp tmpfs rw,nosuid,nodev,noexec,size=512M 0 0Puis appliquez :
sudo mount /tmpfindmnt -no OPTIONS /tmprw,nosuid,nodev,noexec,relatime,size=524288kAvantage : rapide, pas de repartitionnement. Limite : /tmp est en RAM,
dimensionnez size= selon votre charge.
systemd fournit une unité prête à l'emploi pour monter /tmp en tmpfs durci :
sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/sudo systemctl enable tmp.mountL'unité applique nosuid,nodev,noexec par défaut. C'est l'option propre sur un
système systemd, sans éditer /etc/fstab.
Vérifiez l'effet comme pour /dev/shm : un script déposé dans /tmp doit
renvoyer Permission denied à l'exécution.
Aller plus loin : les autres montages
Section intitulée « Aller plus loin : les autres montages »La même logique s'étend aux autres zones de données, selon votre cas :
| Montage | Options recommandées | Remarque |
|---|---|---|
/dev/shm | noexec,nosuid,nodev | tmpfs, sûr |
/tmp | noexec,nosuid,nodev | attention aux installeurs |
/var/tmp | noexec,nosuid,nodev | souvent un bind sur /tmp |
/home | nosuid,nodev | noexec casse les scripts utilisateurs |
/boot | nosuid,nodev,noexec | monté seulement aux mises à jour noyau |
/var | partition séparée | évite qu'un débordement de logs sature / |
Vérifier
Section intitulée « Vérifier »Un contrôle rapide de l'ensemble des montages durcis :
for m in /tmp /dev/shm /var/tmp; do printf '%-10s %s\n' "$m" "$(findmnt -no OPTIONS "$m" 2>/dev/null || echo 'non monté à part')"doneEt un test fonctionnel : déposer un script exécutable dans chaque zone durcie
doit échouer à l'exécution, tandis que les binaires système de /usr continuent
de fonctionner normalement.
Sécurité et points de vigilance
Section intitulée « Sécurité et points de vigilance »noexecn'est pas une barrière absolue : un interpréteur reste capable de lire et d'exécuter un script (sh /tmp/script.shfonctionne même avecnoexec). L'option bloque l'exécution directe, pas l'interprétation explicite. C'est une réduction de surface, pas une protection totale.- Dimensionner les tmpfs :
/tmpen mémoire consomme de la RAM. Unesize=trop petite fait échouer des opérations légitimes, trop grande expose à une saturation mémoire. - Séparer
/varsur un serveur exposé : un débordement de journaux ne doit pas remplir la partition racine et bloquer le système. - Tracer les changements : couplez avec auditd
pour journaliser les modifications de
/etc/fstab.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
Un installeur ou apt échoue après durcissement | noexec sur /tmp | Rediriger le tmp de l'outil ou remonter exec le temps de l'opération |
mount /tmp refuse de monter | Ligne /etc/fstab incorrecte | Vérifier la syntaxe avec findmnt --verify |
| Les options ne tiennent pas après reboot | Remontées à la volée, pas dans fstab | Ajouter la ligne dans /etc/fstab ou activer tmp.mount |
/tmp plein alors qu'il y a de l'espace disque | tmpfs limité par size= | Augmenter size= ou repasser sur disque |
| Un service échoue à écrire un périphérique | nodev sur un montage qui en a besoin | Retirer nodev de ce montage précis |
À retenir
Section intitulée « À retenir »noexec,nosuid,nodevferment des vecteurs d'attaque sur les zones de données/dev/shma souventnosuid,nodevmais pasnoexecpar défaut : ajoutez-le/tmpn'est pas séparé par défaut : montez-le en tmpfs (fstab) ou viatmp.mountnoexecsur/tmpcasse des installeurs : prévoyez une parade (redirection ou remontage temporaire)nodevetnosuidsont sûrs presque partout ;noexecdemande des tests- Référentiels : CIS 1.1 et ANSSI-BP-028 R28 (« Partitionnement type »)