Durcissement Linux : permissions, SSH, AppArmor et protections noyau
Le durcissement d'un système Linux vise à réduire sa surface d'attaque en désactivant les fonctionnalités inutiles, en renforçant les configurations par défaut et en activant les protections disponibles. Les référentiels de durcissement comme le CIS Benchmark Linux ou le guide ANSSI fournissent des listes exhaustives de contrôles à vérifier. L'outil Lynis permet d'automatiser un audit initial.
Permissions de fichiers et propriété
Les permissions mal configurées permettent à des utilisateurs non privilégiés de lire ou modifier des fichiers sensibles. Points critiques à vérifier : fichiers sans propriétaire (find / -nouser -o -nogroup), fichiers world-writable (find / -perm -0002 -not -type l), fichiers de configuration de services accessibles à tous en lecture (clés privées, fichiers de configuration avec mots de passe), répertoires de home sans restriction d'accès.
Audit des permissions critiques
# Fichiers world-writable (hors /tmp et /dev)
find / -perm -0002 -type f -not -path '/tmp/*' -not -path '/dev/*' 2>/dev/null
# Fichiers sans propriétaire
find / -nouser -o -nogroup 2>/dev/null
# Permissions sur les clés SSH
stat ~/.ssh/id_rsa # Doit être 600 ou 400
stat ~/.ssh/authorized_keys # Doit être 600
Umask par défaut
L'umask détermine les permissions par défaut des fichiers et répertoires créés. Un umask de 022 (souvent la valeur par défaut) crée des fichiers avec les permissions 644 (lecture pour tous) et des répertoires avec 755 (traversée pour tous). Pour un serveur, un umask de 027 est plus restrictif (fichiers en 640, répertoires en 750 : pas d'accès pour les autres). L'umask se configure dans /etc/profile, /etc/bash.bashrc ou /etc/login.defs.
Configuration SSH
SSH est généralement le principal point d'accès distant d'un serveur Linux. Sa configuration par défaut inclut plusieurs options à restreindre.
Configuration sshd_config sécurisée
# /etc/ssh/sshd_config
PermitRootLogin no # Interdire la connexion SSH en tant que root
PasswordAuthentication no # Forcer l'authentification par clé
PubkeyAuthentication yes
PermitEmptyPasswords no
MaxAuthTries 3 # Limiter les tentatives d'authentification
LoginGraceTime 30 # 30 secondes pour s'authentifier
X11Forwarding no # Désactiver le forwarding X11 si inutile
AllowTcpForwarding no # Désactiver si le tunneling n'est pas nécessaire
AllowUsers deployuser adminuser # Restreindre aux utilisateurs autorisés
AppArmor et SELinux
AppArmor (Ubuntu/Debian) et SELinux (RHEL/CentOS) sont des systèmes de contrôle d'accès mandatoire (MAC) qui restreignent les actions que les processus peuvent effectuer, indépendamment des permissions UNIX. Un service web compromis ne peut pas accéder à /etc/shadow si AppArmor l'interdit. Ces systèmes sont souvent désactivés ou en mode permissif (logging uniquement) car leur configuration est perçue comme complexe. Les profils fournis par les distributions couvrent la majorité des services courants.
Protections de compilation
Les protections de compilation réduisent l'exploitabilité des débordements de tampon et des corruptions mémoire. ASLR (Address Space Layout Randomization) : randomise l'adressage mémoire, rendant difficile le ciblage précis d'adresses. Stack canaries : valeur placée avant le pointeur de retour, détecte les débordements de pile. PIE (Position Independent Executable) : permet l'ASLR pour l'exécutable principal. RELRO : protège les sections de la bibliothèque d'écriture. NX/DEP : rend les zones de données non exécutables.
Vérification des protections d'un binaire
# checksec : outil d'audit des protections de compilation
checksec --file=/usr/sbin/nginx
# Vérifier ASLR au niveau noyau :
cat /proc/sys/kernel/randomize_va_space
# 0 = désactivé, 1 = partiel, 2 = complet (recommandé)
# Activer ASLR si désactivé :
sysctl -w kernel.randomize_va_space=2
Accès à /dev/mem et dmesg
/dev/mem donne accès direct à la mémoire physique. Un accès non restreint permet à un utilisateur disposant des droits appropriés de lire ou modifier n'importe quelle zone de la mémoire physique, incluant le noyau. La restriction de dmesg (journaux du noyau) empêche les utilisateurs non privilégiés de voir des informations sur le matériel et le noyau qui facilitent l'exploitation.
Restriction de dmesg et des médias amovibles
# /etc/sysctl.conf
kernel.dmesg_restrict = 1 # Restreindre dmesg aux root
kernel.kptr_restrict = 2 # Masquer les adresses du noyau
dev.tty.ldisc_autoload = 0 # Désactiver le chargement auto de drivers TTY
Pour aller plus loin
Une question après la lecture ?
Vous souhaitez évaluer ou durcir vos systèmes Linux ? Envoyez un message.
Ou réservez directement un cadrage de 30 minutes
Réserver un appel →