Auditer la sécurité de son serveur
Un audit n'est pas un scan lancé une fois après une alerte. C'est une liste de contrôles reproductibles, exécutés à intervalle régulier et consignés. Son but est de repérer une dérive avant qu'elle ne devienne un incident : un service oublié, un port ouvert, un compte inutile. Voici une routine adaptée à un VPS Debian 13.
Inventaire de ce qui tourne
sudo ss -lntup
systemctl list-units --type=service --state=running
systemctl list-unit-files --state=enabled
sudo crontab -l
sudo ls -l /etc/cron.d
getent passwd | awk -F: '$3 >= 1000 {print $1, $3, $6, $7}'Notez chaque port, chaque service et chaque compte. Ce que vous ne pouvez pas expliquer doit être compris ou désactivé. Un service dont vous ignorez l'usage est un service que vous ne mettrez pas à jour.
Lynis comme point de départ
sudo apt install lynis
sudo lynis audit systemLynis produit un indice de durcissement et une liste de suggestions. Traitez l'indice comme une tendance, pas comme une note absolue. Priorisez les avertissements liés à SSH, au pare-feu, aux mises à jour et aux permissions. Le rapport détaillé reste dans /var/log/lynis.log : il décrit votre système, ne le publiez pas tel quel.
Permissions, comptes et élévation
sudo find / -xdev -perm -4000 -type f 2>/dev/null
sudo find /var/www -xdev -type f -perm -o+w
getent group sudo
sudo chage -l utilisateurComparez la liste des binaires SUID avec celle d'une installation fraîche. Un fichier accessible en écriture par tous dans /var/www est une porte d'entrée. Vérifiez que chaque membre du groupe sudo a réellement besoin de ce droit, et que les comptes de service ne disposent pas d'un shell interactif.
Mises à jour, pare-feu et exposition
sudo apt update && apt list --upgradable
systemctl status unattended-upgrades
cat /var/run/reboot-required 2>/dev/null
sudo ufw status verbose
sudo fail2ban-client status sshdDans un conteneur système, le noyau est partagé avec la plateforme : les mises à jour de noyau relèvent de la plateforme, pas de votre système. Vérifiez en revanche les paquets applicatifs, le redémarrage requis et les règles de pare-feu. Comparez les ports ouverts avec la liste des services attendus, pas avec une liste générique.
Vérification
Consignez chaque contrôle dans un compte rendu daté :
| Contrôle | Commande | Attendu |
|---|---|---|
| Ports | ss -lntup |
uniquement les services voulus |
| Services | systemctl list-unit-files |
pas d'unité inconnue activée |
| SUID | find / -perm -4000 |
liste stable et justifiée |
| Mises à jour | apt list --upgradable |
rien de critique en attente |
| Pare-feu | ufw status verbose |
politique par défaut restrictive |
Ajoutez pour chaque écart : correctif appliqué, ticket ouvert ou risque accepté avec justification, et une date de revue. Automatisez les contrôles en lecture seule dans un script, sans appliquer automatiquement les correctifs : une remédiation non comprise casse plus qu'elle ne protège.
Relancez Lynis après correction et comparez les résultats. Un audit est terminé quand chaque écart est corrigé, accepté ou suivi. Conservez une copie du compte rendu hors du serveur s'il contient des détails sensibles, et refaites la routine après tout changement d'architecture.
Publicité
Cet article vous a-t-il aidé ?
À lire aussi
- Sécuriser une API publiqueLes couches minimales d'une API exposée : TLS, authentification, quotas, validation, CORS et journaux exploitables.
- Chiffrer les données sensiblesDistinguer TLS, chiffrement applicatif, sauvegardes chiffrées et gestion des clés sur un VPS.
- Sécuriser une base de donnéesRéduire l'écoute réseau, les privilèges et l'exposition des sauvegardes d'une base MariaDB ou PostgreSQL.