Aller au contenu
Sécurité medium

Durcir les points de montage avec nodev, nosuid et noexec

8 min de lecture

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.

  • Comprendre ce que font nodev, nosuid et noexec
  • Mesurer les options de montage actuelles avec findmnt
  • Durcir /dev/shm et /tmp de 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 noexec sur /tmp
OptionEffetVecteur fermé
noexecInterdit d'exécuter un binaire ou un script depuis ce montageCharge utile déposée puis exécutée
nosuidNeutralise les bits setuid/setgidÉlévation via un binaire setuid posé là
nodevIgnore les fichiers de périphériquesFichier /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.

  • 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

Regardez les options réellement actives avant de toucher quoi que ce soit :

Fenêtre de terminal
findmnt -no TARGET,OPTIONS /dev/shm /tmp /home

Sur 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.

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.

  1. Remonter avec noexec

    Fenêtre de terminal
    sudo mount -o remount,noexec,nosuid,nodev /dev/shm
  2. Vérifier que l'exécution est bloquée

    Fenêtre de terminal
    printf '#!/bin/sh\necho test\n' > /dev/shm/poc.sh
    chmod +x /dev/shm/poc.sh
    /dev/shm/poc.sh
    /dev/shm/poc.sh: Permission denied

    Le noexec rejette l'exécution, même si le fichier porte le bit exécutable.

  3. Rendre persistant dans /etc/fstab

    tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0

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 0

Puis appliquez :

Fenêtre de terminal
sudo mount /tmp
findmnt -no OPTIONS /tmp
rw,nosuid,nodev,noexec,relatime,size=524288k

Avantage : rapide, pas de repartitionnement. Limite : /tmp est en RAM, dimensionnez size= selon votre charge.

Vérifiez l'effet comme pour /dev/shm : un script déposé dans /tmp doit renvoyer Permission denied à l'exécution.

La même logique s'étend aux autres zones de données, selon votre cas :

MontageOptions recommandéesRemarque
/dev/shmnoexec,nosuid,nodevtmpfs, sûr
/tmpnoexec,nosuid,nodevattention aux installeurs
/var/tmpnoexec,nosuid,nodevsouvent un bind sur /tmp
/homenosuid,nodevnoexec casse les scripts utilisateurs
/bootnosuid,nodev,noexecmonté seulement aux mises à jour noyau
/varpartition séparéeévite qu'un débordement de logs sature /

Un contrôle rapide de l'ensemble des montages durcis :

Fenêtre de terminal
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')"
done

Et 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.

  • noexec n'est pas une barrière absolue : un interpréteur reste capable de lire et d'exécuter un script (sh /tmp/script.sh fonctionne même avec noexec). 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 : /tmp en mémoire consomme de la RAM. Une size= trop petite fait échouer des opérations légitimes, trop grande expose à une saturation mémoire.
  • Séparer /var sur 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.
SymptômeCause probableSolution
Un installeur ou apt échoue après durcissementnoexec sur /tmpRediriger le tmp de l'outil ou remonter exec le temps de l'opération
mount /tmp refuse de monterLigne /etc/fstab incorrecteVérifier la syntaxe avec findmnt --verify
Les options ne tiennent pas après rebootRemontées à la volée, pas dans fstabAjouter la ligne dans /etc/fstab ou activer tmp.mount
/tmp plein alors qu'il y a de l'espace disquetmpfs limité par size=Augmenter size= ou repasser sur disque
Un service échoue à écrire un périphériquenodev sur un montage qui en a besoinRetirer nodev de ce montage précis
  • noexec, nosuid, nodev ferment des vecteurs d'attaque sur les zones de données
  • /dev/shm a souvent nosuid,nodev mais pas noexec par défaut : ajoutez-le
  • /tmp n'est pas séparé par défaut : montez-le en tmpfs (fstab) ou via tmp.mount
  • noexec sur /tmp casse des installeurs : prévoyez une parade (redirection ou remontage temporaire)
  • nodev et nosuid sont sûrs presque partout ; noexec demande des tests
  • Référentiels : CIS 1.1 et ANSSI-BP-028 R28 (« Partitionnement type »)

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn