Quand un site WordPress se comporte de façon étrange, on pense vite au plugin compromis, au thème modifié, ou à une injection dans une page. Pourtant, dans beaucoup d’incidents, le point de départ est plus banal et plus “systèmes” que spectaculaire : des droits et des permissions trop ouverts. Le résultat peut ressembler à une infection, avec des fichiers inattendus, des scripts lâchés sur le serveur, ou des changements qui se répètent malgré vos nettoyages.
Un “site WordPress infecté” n’implique pas toujours un malware au sens strict. Parfois, l’attaque se résume à une chaîne d’accès, rendue possible par des dossiers trop permissifs, une arborescence où l’écriture est autorisée à trop de monde, ou des permissions héritées d’anciens déploiements. La bonne nouvelle, c’est que vérifier et corriger ces paramètres est souvent actionnable rapidement, sans attendre une analyse forensique complète.
Ce que les permissions peuvent expliquer dans un incident
Sur un hébergement Linux classique (ce qui reste le cas le plus fréquent), WordPress s’appuie sur trois notions qui reviennent tout le temps :
Le propriétaire du fichier (souvent l’utilisateur du serveur web) Le groupe associé Les droits de lecture, écriture, exécution pour le propriétaire, le groupe, et le reste du mondeSi ces droits sont mal réglés, l’attaquant peut atteindre un objectif concret, pas juste “installer quelque chose”. Il peut par exemple :
- déposer un fichier dans un dossier accessible en écriture, créer une porte dérobée qui s’exécutera plus tard, remplacer un script PHP sans même casser immédiatement le site, ou préparer une persistance, en profitant d’un dossier où tout le monde peut écrire.
Le piège, c’est que WordPress a besoin d’écriture à certains endroits (uploads, cache selon configuration, parfois sauvegardes). Donc on ne peut pas simplement “tout fermer”. Le bon réglage consiste à permettre l’écriture uniquement là où elle est nécessaire, au bon acteur, avec le bon niveau de contrôle.
Repérer le désordre sans paniquer
Avant de toucher aux permissions, je recommande presque systématiquement de faire deux choses : observer et comparer. Observer, pour savoir si le problème est lié à des fichiers créés récemment ou à des dossiers où l’écriture est inhabituelle. Comparer, pour vérifier si l’arborescence a été modifiée par quelqu’un, y compris vous, à un moment qui correspond à l’apparition des symptômes.
Dans la pratique, j’ai déjà vu des cas où “l’infection” se résumait à un flux de fichiers trop permissifs suite à une migration manuelle, par exemple quand un hébergement a été réinstallé et que les droits ont été corrigés au hasard, “pour que ça marche”. Le site avait ensuite commencé à accumuler des scripts dans des répertoires qu’aucun plugin légitime n’utilise.
Si vous avez accès à un shell (SSH) ou à des commandes via un gestionnaire, vous pouvez commencer par chercher les anomalies de date et de droits. L’idée n’est pas encore de “tout corriger”, mais de comprendre la logique actuelle.
Comprendre les dossiers sensibles dans WordPress
WordPress n’est pas une application monolithique, c’est un ensemble de dossiers et de fichiers qui vivent ensemble. Les permissions doivent donc suivre l’usage réel de chaque zone.
Le cœur de WordPress (souvent le dossier contenant wp-includes, wp-admin, etc.) N’a généralement pas besoin d’être en écriture permanente via le serveur web. Les plugins et thèmes peuvent nécessiter une écriture lors de mises à jour, mais ce n’est pas une raison pour laisser l’écriture ouverte en permanence.
En revanche, certains dossiers doivent être écrits : typiquement wp-content/uploads pour les médias. D’autres endroits peuvent varier selon la config, comme wp-content/cache si vous utilisez un système de cache, ou certains dossiers que des plugins créent pour la génération de fichiers.
Le point clé, dans un scénario de site WordPress infecté, est de vérifier que les zones où un attaquant pourrait déposer un fichier sont celles qui restent réellement accessibles en écriture. Si vous voyez des droits très ouverts sur un dossier du type wp-content ou sur des répertoires hors uploads, c’est un signal d’alerte.
Les réglages “trop larges” qui posent problème
Sans entrer dans une recette unique valable partout, il existe des patterns qui reviennent souvent lors d’incidents :
- Un dossier ou un fichier rendu écrivable par “tout le monde” (ce qui dépasse le besoin normal). Une stratégie “grand open”, où un administrateur a mis en mode “ça marche” en changeant les permissions récursivement sur un ensemble trop vaste. Des permissions héritées d’un upload en root, d’une extraction d’archive, ou d’une copie via FTP en mode “no owner” selon le client.
Sur beaucoup d’hébergeurs, les utilisateurs et groupes peuvent changer. Donc la règle d’or est pragmatique : ce qui compte, c’est de s’assurer que l’écriture est limitée à l’acteur réel qui doit écrire, et que l’exécution ne devient possible que pour le propriétaire là où c’est indispensable.
Vérifier le propriétaire et le groupe, pas seulement les droits
Un détail que je vois trop rarement dans les interventions : on regarde surtout les “777”, ou les “644”, mais on oublie le propriétaire et le groupe. Pourtant, un site WordPress peut être partiellement déstabilisé avec des droits corrects, si le propriétaire réel n’est plus celui attendu.
Quand le serveur web ne “possède” pas certains fichiers, il peut tenter d’y écrire, échouer, puis des mécanismes de contournement apparaissent. À l’inverse, si le serveur web possède trop de choses, un plugin ou une compromission peut écrire là où elle ne devrait pas.
Concrètement, l’objectif est d’aligner :
- le propriétaire des fichiers sur l’utilisateur qui exécute PHP (souvent www-data, apache, ou un identifiant spécifique chez l’hébergeur), le groupe cohérent, et des droits raisonnables pour l’arborescence.
Sur un hébergement mutualisé, ces noms peuvent varier, donc il faut se baser sur votre environnement réel. Si vous ne savez pas quel utilisateur exécute PHP, commencez par les informations de configuration fournies par l’hébergeur, ou par une commande qui reflète l’existant.
Quoi vérifier sur chaque dossier (logique opérationnelle)
Je fais généralement cette vérification en suivant une logique simple : “qu’est-ce qui doit être modifié par WordPress pendant un fonctionnement normal ?”. Puis je vérifie si les permissions actuelles correspondent à cette réalité.
Le dossier wp-content/uploads
C’est souvent le plus critique. Il doit pouvoir recevoir des fichiers médias. Mais même là, le principe de prudence reste valable : les uploads ne devraient pas donner l’impression que l’ensemble de la plateforme est en écriture libre.
Je m’attarde aussi sur les sous-dossiers. Certains systèmes créent des répertoires temporaires. Si vous voyez des dossiers récents hors structure attendue (par exemple des dossiers qui n’ont aucun lien avec les dates d’upload ou avec un plugin connu), c’est un indice.
wp-content dans son ensemble
wp-content abrite plugins, thèmes, uploads, et parfois d’autres composants. En cas d’infection, il faut surveiller si des droits anormaux ont été appliqués à toute la branche, ce qui facilite la persistance d’un attaquant.
wp-admin et wp-includes
Ces zones ne sont généralement pas destinées à être écrites en permanence par le serveur web. Si vos permissions permettent l’écriture sur ces dossiers, je considère cela comme une faiblesse. Dans le meilleur des cas, ce n’est pas exploité. Dans le pire cas, cela accélère une compromission.
Se donner un repère visuel avec des commandes de base
Si vous avez la possibilité d’utiliser SSH, vous pouvez obtenir une vision rapide de l’état des permissions et de la propriété. L’idée n’est pas de lancer une commande au hasard, mais de vérifier avant d’agir.
En pratique, on regarde :
- les permissions et la propriété, les dates et fichiers récents dans certains dossiers, les éventuels fichiers exécutables dans des zones où ils ne devraient pas être.
Sur un site hébergé en standard, les détails varient selon la configuration, mais la logique de lecture reste la même.
Si vous ne pouvez pas accéder à un shell, certains hébergeurs proposent un “gestionnaire de fichiers” qui affiche la propriété et les droits. Même en interface web, la démarche est la même : identifiez les dossiers récents, comparez la cohérence, puis corrigez progressivement.
Corriger sans casser : l’approche par étapes
Une erreur fréquente consiste à changer les permissions partout d’un coup. Je l’ai vu provoquer des effets secondaires : WordPress qui ne peut plus écrire ses caches, plugins qui échouent à générer des fichiers, ou uploads qui ne fonctionnent plus comme avant.
Le bon rythme est plus lent, mais plus sûr : corriger la racine du problème (trop d’ouverture), puis vérifier le fonctionnement.
Voici une manière de procéder de façon pragmatique.
Étape 1 : sécuriser la zone où l’écriture est nécessaire
Commencez par wp-content/uploads. L’objectif est que cette zone soit écrivable par le bon acteur, tout en gardant le reste plus fermé.
Étape 2 : resserrer les permissions sur les zones qui ne doivent pas écrire
Ensuite, regardez wp-admin et wp-includes, puis les dossiers de thèmes et plugins. Selon votre politique de mise à jour, vous pouvez choisir un niveau qui permet l’administration, sans laisser l’écriture ouverte trop largement.
Étape 3 : appliquer des corrections cohérentes
En évitant les changements récursifs sans réflexion. Si vous corrigez récursivement, vous devez savoir quel modèle de droits vous appliquez, et pourquoi.
Étape 4 : valider WordPress
Testez les points qui dépendent d’écriture, comme l’upload d’un fichier (un petit fichier de test), la mise à jour de cache si vous en utilisez un, et le fonctionnement d’un plugin courant.
Un mini check avant toute modification massive
Voici un repère rapide que j’utilise pour éviter les corrections “à l’aveugle”.
- Vérifiez d’abord que vous avez un accès fiable pour restaurer, au moins via sauvegarde Identifiez l’utilisateur exécutant PHP, ou à défaut le propriétaire attendu des fichiers Repérez les dossiers récents ou anormaux dans wp-content Corrigez d’abord les permissions sur wp-content/uploads, puis seulement le reste Après correction, testez upload, mise à jour plugin, et affichage admin
Cette séquence évite la majorité des surprises.
Cas fréquents en production (et pourquoi ils arrivent)
Migration ou transfert “manuel”
Quand on copie WordPress via FTP, un client peut préserver ou non la propriété. Résultat, vous pouvez vous retrouver avec un serveur web qui a moins de droits que nécessaire, ou au contraire avec GardeWP nettoyage WooCommerce des droits trop larges si l’archive a été extraite avec une logique “serveur” qui ne correspond pas à la vôtre.

Hébergement qui a changé de modèle
Certains hébergeurs mutualisés gèrent la propriété différemment selon la pile (Apache, Nginx avec PHP-FPM, etc.). Après un changement, les permissions “fonctionnelles” peuvent devenir “risquées”.
Automatisation de maintenance
Si vous utilisez un outil qui met en place des permissions “pour tout”, vérifiez ses paramètres. Une règle de déploiement trop permissive peut survivre même après correction d’un incident précédent. C’est souvent là que je vois la persistance.
Les limites de la correction par permissions seules
Les permissions sont un levier important, mais elles ne sont pas une baguette magique. Si un attaquant a déjà modifié des fichiers PHP, vous pouvez corriger les droits, mais il reste parfois du code malveillant ou des références à des ressources externes.
Dans un incident réel, je traite la correction de permissions et la vérification des fichiers comme deux opérations complémentaires :
- resserrer l’accès pour empêcher la réécriture future, et nettoyer ce qui a déjà été déposé.
Même après correction, gardez en tête qu’un plugin compromis peut aussi tenter de créer des fichiers. Les permissions plus strictes réduisent le terrain de jeu, mais ne remplacent pas la revue du code et la chasse aux fichiers inattendus.
Signal d’alerte : les droits qui changent tout seuls
Un cas très révélateur : vous corrigez des permissions, et quelques heures ou jours plus tard, vous constatez qu’elles se sont “défaits”. À ce moment-là, la question n’est plus seulement “quelles permissions étaient là”, mais “qui les modifie”.
Ça peut venir :
- d’un processus de déploiement, d’un script de maintenance, d’un plugin qui régénère des fichiers et change les droits, ou, dans un scénario plus inquiétant, d’une persistance malveillante.
Dans ce contexte, vérifier les permissions est utile, mais on gagne à corréler avec les logs du serveur (création de fichiers, accès, exécution PHP) si vous y avez accès. Même une analyse légère peut orienter rapidement.
Comment juger la “bonne” configuration dans votre contexte
Il n’existe pas un chiffre universel à appliquer partout. Les standards existent, mais chaque environnement a ses contraintes. Par exemple, PHP-FPM, le mode de fonctionnement d’un cache, et les politiques d’hébergement peuvent imposer des particularités.
Ce que j’attends comme logique solide, c’est :
- que seuls les dossiers qui reçoivent du contenu soient ouverts à l’écriture, que le reste soit aussi fermé que possible sans bloquer WordPress, et que le serveur web ne soit pas en mesure d’écrire des fichiers sensibles plus largement que nécessaire.
Le bon réglage se juge à deux critères : la sécurité attendue, et la stabilité opérationnelle. Si WordPress fonctionne normalement après correction, c’est bon signe. Si des fonctionnalités cassent, il faut ajuster, pas abandonner.
Exemple de stratégie réaliste sur une branche wp-content
Sur beaucoup de sites, une stratégie de correction consiste à distinguer clairement :
- les répertoires qui reçoivent des médias, ceux qui contiennent du code (plugins, thèmes) qui doit être maintenu plutôt que modifié à la volée, et ceux qui doivent être gérés par l’administrateur via mises à jour.
Je me suis déjà retrouvé sur un site où wp-content entier avait été mis en écriture très permissive lors d’une “réparation précédente”. Le site semblait fonctionner, mais l’attaque avait facilement réutilisé cette ouverture. Une fois resserré, la persistance a cessé de pouvoir se maintenir, même si des traces étaient déjà présentes. Le nettoyage a ensuite complété le travail.
Vérifier après correction : quoi tester concrètement
Après avoir resserré les permissions, vous devez vérifier deux choses : que WordPress n’a pas été privé d’écriture là où il en a besoin, et que le comportement suspect ne revient pas.
Voici un test minimal, sans entrer dans des recettes précises de configuration, adapté à la plupart des sites WordPress.
- Essayez un upload simple dans wp-content/uploads (un fichier léger) Connectez-vous à l’espace admin et vérifiez que les pages s’affichent sans erreurs Lancez une action d’un plugin courant (par exemple une génération de cache si utilisé) Vérifiez qu’un nouvel article ou une modification se sauvegarde Surveillez l’évolution des fichiers dans wp-content sur une période courte
Si tout reste stable, vous avez corrigé un vecteur important. Si au contraire les uploads échouent ou si l’admin affiche des erreurs, il faut ajuster, souvent en corrigeant la propriété et les droits uniquement sur les sous-dossiers nécessaires.
Quand faire intervenir l’hébergeur ou un expert
Il y a des situations où je conseille de ne pas “bricoler” plus longtemps :
- Vous n’avez pas d’accès clair aux logs du serveur ou à la configuration PHP-FPM Vos permissions sont modifiées automatiquement par un système que vous ne contrôlez pas Les changements sont refusés ou vous voyez des permissions revenir malgré correction Vous suspectez une compromission plus large, pas seulement un problème de droits
Dans ces cas, la meilleure approche consiste à demander une vérification côté hébergement. Parfois, l’hébergeur a un mécanisme de durcissement, ou au contraire une configuration qui crée une ouverture non désirée.
Protéger pour éviter que ça recommence
Une fois que les permissions sont corrigées, la prévention devient une discipline quotidienne.
Deux axes m’ont souvent aidé :
- rendre les changements rares et traçables (déploiement, mises à jour, scripts), et limiter ce qui peut écrire sur les zones sensibles.
Si vous avez une chaîne d’automatisation (CI/CD, scripts de transfert, outil de déploiement), c’est le moment de vérifier son comportement. Certains outils appliquent des règles trop larges “par défaut”. Corrigez ces règles pour qu’elles reflètent votre réalité : qui écrit quoi, et quand.
Pour résumer la démarche
Vérifier les droits et permissions n’est pas juste un contrôle “technique”. Dans un scénario de site WordPress infecté, c’est souvent l’étape qui coupe le mécanisme d’installation ou de persistance, surtout quand l’incident a profité d’une arborescence trop ouverte.
Commencez par comprendre ce qui doit être écrivable, identifiez propriétaires et groupes, corrigez par étapes sans récursivité aveugle, puis validez WordPress sur des actions réelles comme l’upload et les sauvegardes. Une fois le terrain resserré, vous pouvez ensuite concentrer le nettoyage sur les traces réellement présentes, avec beaucoup plus de chances d’éviter que “ça revienne”.
Si vous me donnez votre structure de dossiers (par exemple si vous avez un cache spécifique, un plugin de médiathèque, ou un environnement Nginx avec PHP-FPM), je peux aussi vous aider à construire une stratégie de permissions cohérente pour votre cas, avec un niveau de prudence adapté.