Pourquoi auditer régulièrement la sécurité de votre serveur Linux
Un serveur Linux mal configuré représente une porte ouverte pour les attaques informatiques. Selon le rapport annuel de l’ANSSI (Agence nationale de la sécurité des systèmes d’information), plus de 60 % des incidents de sécurité sur les serveurs proviennent de configurations par défaut non modifiées ou de mises à jour négligées. Auditer régulièrement votre serveur est donc une pratique essentielle, que vous gériez un site web, une application ou une infrastructure complète.
Dans cet article, nous détaillons dix commandes Linux concrètes que tout administrateur système devrait connaître. Chacune est expliquée avec sa syntaxe, son objectif et un exemple de résultat attendu. L’objectif est de vous donner un protocole d’audit reproductible que vous pouvez appliquer dès aujourd’hui.
Commande 1 : Vérifier les ports ouverts avec ss
La commande ss -tulnp remplace l’ancien netstat et affiche tous les ports TCP et UDP actuellement en écoute sur votre serveur. Chaque port ouvert est un point d’entrée potentiel. Un serveur web standard ne devrait exposer que les ports 80 (HTTP), 443 (HTTPS) et éventuellement 22 (SSH).
Si vous constatez des ports que vous ne reconnaissez pas, c’est un signal d’alerte. Un port 3306 (MySQL) ouvert au public, par exemple, expose votre base de données à des tentatives de connexion brute-force. La bonne pratique consiste à restreindre les ports ouverts au strict nécessaire via iptables ou firewalld.
Commande 2 : Lister les utilisateurs et leurs privilèges avec cat /etc/passwd
Le fichier /etc/passwd contient la liste de tous les comptes utilisateurs du système. En l’examinant, vous pouvez détecter des comptes créés par des logiciels malveillants ou des comptes inutilisés qui devraient être désactivés. Un compte avec un shell de connexion (/bin/bash) qui ne devrait pas en avoir constitue une vulnérabilité.
Complétez cette vérification avec cat /etc/sudoers pour identifier les utilisateurs disposant de privilèges administrateur. Le principe de moindre privilège recommande de limiter l’accès root au strict minimum de personnes.
Commande 3 : Détecter les fichiers modifiés récemment avec find
La commande find / -type f -mtime -7 -not -path "/proc/*" liste tous les fichiers modifiés au cours des 7 derniers jours. Après une suspicion d’intrusion, cette commande permet d’identifier rapidement les fichiers altérés par un attaquant. Elle est particulièrement utile pour repérer des scripts PHP malveillants déposés dans des répertoires web.
Vous pouvez affiner la recherche en ciblant des répertoires spécifiques comme /var/www ou /tmp, qui sont des emplacements fréquemment exploités par les attaquants pour déposer des fichiers malveillants.
Commande 4 : Analyser les logs de connexion avec last et lastb
La commande last affiche l’historique des connexions réussies, tandis que lastb montre les tentatives de connexion échouées. Un nombre élevé de tentatives échouées depuis une même adresse IP indique une attaque par brute-force. La commande lastb | head -50 vous donne les 50 dernières tentatives échouées.
Ces informations sont précieuses pour ajuster vos règles de pare-feu et configurer des outils comme Fail2Ban, qui bloque automatiquement les adresses IP après un nombre défini de tentatives échouées.
Commande 5 : Vérifier l’intégrité des paquets avec rpm -Va ou debsums
Sur les distributions Red Hat et dérivées, la commande rpm -Va compare les fichiers installés avec leur signature d’origine. Sur Debian et Ubuntu, l’outil debsums remplit la même fonction. Tout fichier modifié par rapport à sa version d’installation mérite une investigation.
Cette vérification est fondamentale après une compromission suspectée, car un attaquant sophistiqué peut remplacer des binaires système (comme ls, ps ou netstat) par des versions modifiées qui dissimulent sa présence. C’est ce qu’on appelle un rootkit.
Commande 6 : Scanner les processus actifs avec ps aux
La commande ps aux affiche tous les processus en cours d’exécution. Examinez cette liste pour identifier des processus inconnus ou suspects. Un processus avec un nom aléatoire (comme xmrig ou kworkerds) peut indiquer la présence d’un logiciel de minage de cryptomonnaies installé frauduleusement.
Combinez cette commande avec top ou htop pour identifier les processus consommant anormalement des ressources CPU ou mémoire. Une utilisation CPU constante à 100 % sur un serveur normalement peu sollicité est souvent le signe d’un minage clandestin.
Commande 7 : Vérifier les tâches planifiées avec crontab
Les attaquants utilisent fréquemment les tâches cron pour maintenir leur accès à un serveur compromis. La commande for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null; done liste les tâches planifiées de tous les utilisateurs du système.
Vérifiez également les répertoires /etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/ et /var/spool/cron/ pour détecter des scripts ajoutés frauduleusement. Toute tâche cron que vous ne reconnaissez pas doit être investiguée.
Commande 8 : Analyser les connexions réseau actives avec lsof -i
La commande lsof -i affiche toutes les connexions réseau actuellement ouvertes, avec le processus responsable de chacune. Cette information est cruciale pour détecter des connexions sortantes suspectes, comme un serveur compromis qui communique avec un serveur de commande et contrôle (C2).
Portez une attention particulière aux connexions vers des adresses IP inhabituelles ou des ports non standard. Un processus Apache qui ouvre une connexion vers le port 6667 (IRC) est un indicateur classique de compromission.
Commande 9 : Vérifier les permissions SUID avec find
Les fichiers avec le bit SUID (Set User ID) s’exécutent avec les privilèges de leur propriétaire, souvent root. La commande find / -perm -u=s -type f 2>/dev/null liste tous ces fichiers. Si un attaquant parvient à créer un fichier SUID appartenant à root, il obtient un accès permanent avec les plus hauts privilèges.
Comparez cette liste avec une référence connue de votre système. Les fichiers SUID légitimes incluent des commandes comme passwd, su et sudo. Tout fichier SUID que vous ne reconnaissez pas est potentiellement malveillant.
Commande 10 : Vérifier les mises à jour de sécurité disponibles
Sur Ubuntu et Debian, la commande apt list --upgradable 2>/dev/null | grep -i security affiche les mises à jour de sécurité en attente. Sur CentOS et Red Hat, utilisez yum check-update --security. Les vulnérabilités non corrigées sont la première cause de compromission des serveurs.
La bonne pratique est de configurer les mises à jour de sécurité automatiques avec unattended-upgrades (Debian/Ubuntu) ou dnf-automatic (Fedora/CentOS). Cela garantit que les correctifs critiques sont appliqués rapidement sans intervention manuelle.
Mettre en place un audit régulier
Ces dix commandes constituent la base d’un audit de sécurité serveur. Pour une efficacité maximale, créez un script bash qui exécute ces commandes automatiquement et envoie le rapport par e-mail. Planifiez ce script en tâche cron hebdomadaire pour maintenir une surveillance continue.
La sécurité informatique n’est pas un état mais un processus continu. Un serveur sécurisé aujourd’hui peut devenir vulnérable demain si une nouvelle faille est découverte dans l’un de ses composants. L’audit régulier, combiné à une veille sur les vulnérabilités publiées (CVE), constitue la meilleure défense contre les menaces actuelles.