Comment isoler en toute sécurité les utilisateurs d’hébergement sous Linux
Publié le 12 novembre 2026

Un serveur partagé peut fonctionner parfaitement pendant des mois, jusqu’au jour où un site web compromis lit un fichier qu’il ne devrait jamais pouvoir consulter. C’est pourquoi les équipes doivent isoler les utilisateurs d’hébergement de manière sécurisée : ce n’est pas un luxe réservé aux grandes sociétés d’hébergement, mais une règle élémentaire pour tout serveur hébergeant plusieurs sites, clients ou projets.
L’isolation des utilisateurs limite les dégâts lorsqu’une application comporte un plug-in vulnérable, un mot de passe faible ou un fichier téléversé qui s’avère malveillant. Elle évite également qu’un compte très sollicité ne ralentisse les sites web de tous les autres. L’objectif est simple : chaque client doit disposer d’un contrôle suffisant pour gérer ses propres sites web, tandis que le serveur maintient des limites claires avec tout le reste.
Ce que signifie réellement l’isolation des utilisateurs d’hébergement
L’isolation ne se résume pas à un seul réglage. C’est un ensemble de couches qui fonctionnent de concert. Au minimum, un compte d’hébergement doit disposer de son propre utilisateur Linux, de son répertoire personnel, de ses autorisations de fichiers, de ses identifiants de base de données, de son processus PHP et de ses règles d’accès. Une défaillance sur un site web ne devrait pas donner automatiquement accès à tous les sites du serveur.
Imaginez un serveur partagé comme un immeuble d’habitation. Un utilisateur Linux distinct représente la porte de l’appartement. Des autorisations de fichiers correctes représentent la serrure. Des pools PHP-FPM, des utilisateurs de base de données et des limites de ressources distincts représentent les murs, les services publics et les disjoncteurs. Une seule couche est utile, mais s’appuyer uniquement sur elle, c’est prendre le risque qu’un petit incident se transforme en longue soirée.
Le niveau d’isolation approprié dépend de ce que vous hébergez. Quelques sites internes gérés par un administrateur de confiance n’ont pas les mêmes besoins qu’un serveur d’agence hébergeant 80 comptes clients. Pour des clients sans lien entre eux, une séparation renforcée justifie la configuration supplémentaire et la légère hausse de consommation mémoire.
Commencez par créer un utilisateur Linux par compte d’hébergement
N’exécutez jamais tous les sites web sous le même compte système. Si tous les fichiers web appartiennent à un utilisateur web générique, tel que `www-data`, tout script vulnérable capable d’écrire des fichiers peut également modifier le site d’un autre client.
Créez un utilisateur Linux dédié pour chaque compte d’hébergement et faites-en le propriétaire de sa propre racine de documents, de ses journaux, de ses fichiers temporaires et de ses fichiers d’application. Évitez autant que possible les répertoires partagés accessibles en écriture. Un répertoire accessible en écriture par tous les comptes finit tôt ou tard par devenir une source de problèmes.
Appliquez par défaut des autorisations restrictives. Les répertoires de sites web nécessitent généralement `755`, tandis que les fichiers ordinaires peuvent utiliser `644`. Les fichiers de configuration contenant des secrets doivent être plus strictement protégés, souvent avec `600` ou `640`, selon le compte de service qui doit les lire. N’utilisez pas `777` parce qu’un dossier de téléversement ne fonctionne pas. Cela corrige le symptôme en retirant la serrure de la porte.
La propriété des fichiers est tout aussi importante que les autorisations numériques. Un site WordPress, par exemple, peut avoir besoin d’un accès en écriture à `wp-content/uploads`, mais le service web ne devrait pas avoir l’autorisation de réécrire l’application entière. N’accordez un accès en écriture qu’aux répertoires qui en ont réellement besoin.
Évitez les chemins partagés pour délimiter les comptes
Il peut être tentant de stocker les sauvegardes, les sessions, les caches ou les fichiers de déploiement dans un emplacement commun. Cela peut être pratique, jusqu’à ce que les autorisations dérivent ou qu’une tâche de nettoyage supprime les mauvais fichiers. Conservez les données d’application propres à chaque utilisateur dans son répertoire personnel ou dans un autre emplacement dont il est spécifiquement propriétaire.
Si un service partagé est inévitable, définissez explicitement les accès. Utilisez un groupe dédié avec les autorisations les plus restrictives nécessaires, documentez sa raison d’être et réexaminez-le après toute modification. Les accès partagés « temporaires » ont tendance à devenir permanents.
Exécutez PHP séparément pour chaque compte
Pour les sites web PHP, le modèle d’exécution est l’un des choix les plus importants que vous aurez à faire. L’exécution de PHP par l’intermédiaire d’un processus partagé signifie qu’un site vulnérable peut hériter d’un accès qui dépasse largement ses propres fichiers. L’utilisation d’un pool PHP-FPM distinct pour chaque utilisateur d’hébergement crée une limite plus nette : le processus de travail PHP s’exécute sous l’utilisateur Linux du compte concerné, avec ses propres paramètres et limites de processus.
Un pool PHP-FPM par utilisateur facilite également le dépannage. Si l’application d’un client commence à consommer des processus de travail ou de la mémoire, vous pouvez identifier le pool responsable au lieu de considérer le serveur comme un grand mystère. Définissez des limites au niveau du pool, comme le nombre maximal de processus enfants et les délais d’expiration des requêtes, en fonction de l’offre du compte et des besoins réels de l’application.
Il y a un compromis à faire. Un plus grand nombre de pools PHP-FPM consomme plus de mémoire qu’un pool partagé, en particulier sur un petit serveur virtuel. Pour un serveur hébergeant seulement quelques sites à faible trafic, choisissez des limites raisonnables au lieu de créer des pools surdimensionnés. Mais ne renoncez pas à la séparation des comptes simplement pour économiser une quantité modeste de mémoire vive. Augmentez la capacité avant de placer tous les utilisateurs dans une seule zone de sécurité.
Pour les applications qui ne sont pas en PHP, appliquez le même principe. Exécutez Node.js, Python, Ruby ou vos services personnalisés sous des utilisateurs dédiés. Utilisez des services système et des fichiers d’environnement distincts, plutôt qu’un seul compte d’application partagé ayant accès à tous les projets.
Séparez les bases de données, les identifiants et les secrets
Un serveur de bases de données est souvent l’endroit où l’isolation se dégrade en silence. Donner à chaque application le même identifiant d’administrateur de base de données est pratique lors de la configuration, mais dangereux par la suite. Chaque site doit avoir sa propre base de données et son propre utilisateur de base de données, avec des autorisations limitées à cette base.
N’accordez pas aux utilisateurs d’application des privilèges globaux, l’autorisation de créer de nouveaux utilisateurs ou l’accès à tous les schémas, sauf raison opérationnelle précise. La compromission d’un identifiant de CMS ne devrait exposer que les données d’une application, et non les dossiers des clients de tout le serveur.
Traitez les secrets avec autant de précaution. Stockez les mots de passe des bases de données, les clés d’API et les identifiants de messagerie dans des fichiers de configuration appartenant au compte. Ne les laissez pas dans les répertoires web publics, les dossiers de contrôle de version ou les emplacements de sauvegarde partagés. Lorsqu’un employé, un prestataire ou un client n’a plus besoin d’un accès, supprimez-le au lieu de supposer que les anciens identifiants resteront sans danger.
Contrôlez l’accès au shell, à SSH et aux tâches planifiées
Tous les utilisateurs d’hébergement n’ont pas besoin de SSH. Pour un client qui gère uniquement un site web basique, la gestion des fichiers via le panneau ou SFTP peut suffire. Pour les développeurs et les agences, SSH peut être très utile pour les déploiements, Composer, WP-CLI et la vérification des journaux. La solution pratique n’est pas de le bloquer partout, mais de l’accorder de façon réfléchie.
Utilisez des clés SSH plutôt que des mots de passe chaque fois que possible. Désactivez la connexion directe de root, évitez les comptes administrateur partagés et attribuez aux membres du personnel des comptes nominatifs distincts afin de pouvoir retracer les actions. Si un utilisateur n’a besoin que de transférer des fichiers, envisagez de limiter son compte à SFTP. S’il a besoin d’un shell, veillez à ce qu’il ne puisse pas lire les répertoires personnels des autres utilisateurs ni exploiter des mécanismes risqués d’élévation de privilèges.
Les tâches cron méritent la même attention. Exécutez chaque tâche planifiée sous l’utilisateur qui en est propriétaire, et non sous root ni sous un compte web partagé. Une tâche cron défectueuse peut remplir un disque, envoyer des milliers de courriels ou exécuter à répétition un script coûteux. Définissez des limites claires et examinez les tâches qui n’ont pas été modifiées depuis longtemps.
Fixez des limites de ressources pour chaque compte
La sécurité et la stabilité se rejoignent dans le contrôle des ressources. Un compte peut affecter tous les autres sans accéder à leurs fichiers, simplement en épuisant le processeur, la mémoire, les processus, l’espace disque ou le nombre d’inœuds. Les limites de ressources permettent de cantonner à son compte un pic de trafic, une requête défectueuse ou une boucle accidentelle.
Utilisez les mécanismes pris en charge par votre environnement Linux, comme les limites de processus, les paramètres des pools PHP-FPM, les quotas de disque et les cgroups au niveau du système. Surveillez l’utilisation réelle avant de définir des valeurs. Une limite trop basse peut perturber le trafic légitime d’un site de commerce électronique, les importations en arrière-plan ou les sauvegardes. Une limite trop élevée n’est guère une limite.
Au minimum, suivez, dans la mesure du possible et par compte, la charge du processeur, la pression sur la mémoire, l’utilisation du disque et des inœuds, le nombre de processus, les échecs de connexion et le volume de courriels sortants. La surveillance en temps réel transforme « le serveur semble lent » en une réponse utile : quel utilisateur, quel processus et depuis quand.
Ajoutez des mécanismes de confinement, sans les confondre avec un remède
Les environnements chroot, les conteneurs et la virtualisation peuvent renforcer les limites entre les utilisateurs. Les conteneurs sont particulièrement utiles lorsque les clients ont besoin d’environnements d’exécution personnalisés, de dépendances ou d’un contrôle au niveau des services qui seraient autrement incompatibles sur un même système d’exploitation. Les machines virtuelles offrent une séparation encore plus forte, au prix d’une charge opérationnelle supérieure.
Ces outils sont utiles, mais ne remplacent ni les autorisations, ni l’application de correctifs, ni la gestion sécurisée des identifiants. Un conteneur exécuté en tant que root avec un montage hôte accessible en écriture ne constitue pas une limite sûre entre utilisateurs. De même, une prison chroot peut réduire l’accès visible au système de fichiers, mais ne permet pas forcément de contenir tous les problèmes au niveau de l’application. Choisissez la couche adaptée au risque et configurez-la avec soin.
Liste de vérification pratique pour l’isolation
Avant d’ajouter un nouveau compte d’hébergement, vérifiez les éléments essentiels suivants :
- Le compte possède son propre utilisateur Linux, son répertoire personnel, ses fichiers de site web, ses journaux et ses chemins temporaires.
- PHP ou un autre environnement d’exécution d’application fonctionne sous cet utilisateur plutôt que sous une identité de service partagée.
- Le compte dispose d’identifiants de base de données distincts, avec accès uniquement à sa propre base de données.
- La propriété et les autorisations des fichiers empêchent les lectures et les écritures entre comptes.
- SSH, SFTP, les tâches cron, les sauvegardes et les limites de ressources sont accordés et configurés spécifiquement pour ce compte.
Un panneau de contrôle devrait rendre ces limites visibles plutôt que de les dissimuler derrière du jargon serveur. FASTPANEL aide les administrateurs à gérer les comptes, les domaines, les bases de données et l’activité du serveur depuis un espace de travail clair et centralisé, ce qui facilite le maintien d’une bonne isolation à mesure que le serveur se développe.
Poursuivez les vérifications après la configuration
L ’isolation n’est pas une tâche que l’on accomplit une fois pour toutes avant de l’oublier. Les nouveaux plug-ins, les scripts de migration, les modifications manuelles d’autorisations et les corrections de support effectuées dans l’urgence peuvent l’affaiblir au fil du temps. Après la migration d’un site, vérifiez la propriété des comptes, recherchez les fichiers accessibles en écriture par tous, supprimez les utilisateurs inactifs, appliquez les mises à jour de sécurité et testez les sauvegardes sans accorder aux processus de sauvegarde un accès inutile à tous les comptes.
La meilleure configuration est celle que votre équipe peut comprendre et maintenir sous pression. Délimitez clairement l’accès de chaque utilisateur, faites en sorte que les exceptions soient rares et documentées, et laissez le serveur empêcher discrètement qu’une mauvaise journée sur un site web ne devienne le problème de tous.








