Open_basedir

Empêcher l'accès à PHP en dehors de votre site

Une erreur, un problème ou une simple demande d'information ?
Vous pouvez nous contacter !

Qu’est-ce que la directive open_basedir ?

La directive open_basedir est un mécanisme de sécurité natif de PHP qui permet de limiter les fichiers et répertoires auxquels les scripts PHP ont le droit d’accéder sur le serveur.

Dès que cette directive est activée, toute fonction d’accès au système de fichiers (telles que fopen(), file_get_contents(), include, require, readfile(), opendir(), etc.) vérifie si le fichier cible se trouve bien à l’intérieur de l’une des arborescences autorisées.

Si un script tente d’accéder à un fichier situé en dehors des dossiers autorisés, PHP bloque immédiatement l’opération et génère un avertissement de sécurité du type :

PHP Warning: Unknown: open_basedir restriction in effect. File(...) is not within the allowed path(s)

Pourquoi activer open_basedir ?

Sur un hébergement accueillant plusieurs sites ou applications, open_basedir offre un cloisonnement indispensable :

  • Isoler les sites les uns des autres : si vous hébergez plusieurs sites web ou sous-domaines sur votre compte, un script d’un site ne pourra pas lire les fichiers de configuration, les bases de code ou les données des autres sites.
  • Protéger le serveur contre les failles applicatives : en cas de vulnérabilité dans un CMS, un thème ou un plugin tiers (faille de type Local File Inclusion / LFI ou traversée de répertoires Path Traversal via ../../), la directive empêche un attaquant d’accéder aux fichiers système du serveur ou aux informations sensibles d’autres applications.
  • Limiter l’impact d’une compromission : même si du code malveillant est injecté sur un site, son champ d’action reste strictement confiné à l’arborescence autorisée de ce site.

Pourquoi adapter session.save_path et upload_tmp_dir ?

Par défaut, PHP utilise le répertoire temporaire global du système (/tmp ou /var/tmp) pour deux opérations courantes :

  1. L’enregistrement des sessions PHP des visiteurs et des administrateurs (session.save_path).
  2. Le stockage temporaire des fichiers envoyés par les formulaires de téléversement (upload_tmp_dir), par exemple lors de l’ajout d’une image ou d’un média dans WordPress ou PrestaShop.

Or sur notre hébergement, chaque client a son propre dossier temporaire qui est ~/admin/tmp (ou /home/{mon-compte}/admin/tmp).

C’est donc important de spécifier à votre application le bon chemin.


Les directives à appliquer

Voici le bloc de configuration à renseigner dans la configuration PHP de votre site :

session.save_path = /home/{compte}/admin/tmp
upload_tmp_dir = /home/{compte}/admin/tmp
open_basedir = "/home/{compte}/{chemin-du-vhost}:/home/{compte}/admin/tmp"

Explication des paramètres

  • session.save_path : définit l’emplacement où PHP enregistre les fichiers de sessions des utilisateurs.
  • upload_tmp_dir : définit le dossier où PHP dépose temporairement les fichiers téléversés avant leur traitement final par votre script.
  • open_basedir : liste les chemins autorisés, séparés par un caractère deux-points (:) sous Linux. On y déclare le dossier racine de votre site web ainsi que le dossier temporaire /home/{compte}/admin/tmp. Les guillemets permettent d’encadrer proprement la chaîne de valeurs.

Trouver vos variables {compte} et {chemin-du-vhost}

Avant de renseigner ces directives, vous devez remplacer {compte} et {chemin-du-vhost} par les valeurs réelles correspondant à votre hébergement.

1. Trouver le nom de votre {compte}

Le paramètre {compte} correspond au nom de votre compte client chez Ethersys (le dossier personnel hébergeant vos données se situe sous /home/{compte}/).

Vous pouvez le trouver facilement par l’une des méthodes suivantes :

Méthode A : En ligne de commande SSH

Connectez-vous à votre compte en SSH et saisissez la commande :

pwd

La commande affiche le chemin de votre dossier courant, par exemple /home/moncompte. Dans cet exemple, le nom de votre compte {compte} est moncompte.

Méthode B : À l’aide d’un fichier PHP temporaire

Si vous n’utilisez pas SSH, créez un fichier temporaire nommé par exemple test-chemin.php à la racine de votre site avec le contenu suivant :

<?php
echo __DIR__;

Appelez ensuite ce fichier dans votre navigateur (par exemple https://www.monsite.fr/test-chemin.php). Le chemin complet s’affichera à l’écran, par exemple :

/home/moncompte/www

Le terme situé directement entre /home/ et le dossier de votre site est votre identifiant de compte (moncompte).

Sécurité : supprimez ce fichier de test dès que vous avez relevé l’information.


2. Trouver le {chemin-du-vhost}

Le {chemin-du-vhost} est le chemin vers le répertoire racine de votre site, à l’intérieur de votre compte /home/{compte}/.

Pour le retrouver :

  1. Connectez-vous sur le manager Ethersys.
  2. Rendez-vous dans la rubrique Web -> Sites (https://admin.ethersys.fr/site/).
  3. Cliquez sur l’icône de modification du site concerné.
  4. Dans l’onglet Configuration, repérez la valeur du champ Répertoire racine.

Quelques exemples fréquents :

  • Si votre site est à la racine usuelle de l’hébergement, le répertoire racine est généralement www. Le chemin complet devient /home/{compte}/www.
  • Si vous avez plusieurs sites ou sous-domaines organisés en sous-dossiers, le répertoire racine peut être par exemple monsite.com/www/. Le chemin complet devient /home/{compte}/monsite.com/www/.
  • Si votre application utilise un framework moderne (Symfony, Laravel…) où le dossier public est un sous-dossier (comme public/), mais que PHP a besoin de charger des dépendances situées dans vendor/ ou d’écrire dans var/, déclarez le dossier parent du projet comme base autorisée (par exemple /home/{compte}/monsite).

Modifier le champ php.ini de chaque site depuis le panel Ethersys

Chaque site configuré en PHP dispose de ses propres paramètres php.ini personnalisables depuis la console d’administration.

Voici la procédure pas à pas :

  1. Rendez-vous sur la page https://admin.ethersys.fr/ et connectez-vous avec votre adresse e-mail et votre mot de passe.
  2. Dans le menu de gauche, rendez-vous dans la rubrique Web -> Sites ou directement sur https://admin.ethersys.fr/site/.
  3. Dans la liste de vos sites, repérez le site concerné et cliquez sur l’icône de modification (la roue crantée ou le crayon).
  4. Rendez-vous dans l’onglet Configuration, puis dans la section Configuration.
  5. Repérez le champ intitulé php.ini personnalisé.
  6. Insérez vos directives adaptées avec vos valeurs réelles à la suite des éventuelles directives déjà présentes :
session.save_path = /home/moncompte/admin/tmp
upload_tmp_dir = /home/moncompte/admin/tmp
open_basedir = "/home/moncompte/www:/home/moncompte/admin/tmp"

Attention : si d’autres directives sont déjà présentes dans le champ php.ini personnalisé (par exemple memory_limit, max_execution_time ou l’activation des logs PHP), conservez-les et ajoutez simplement ces trois lignes à la suite.

  1. Cliquez sur le bouton Valider (ou Enregistrer) en bas de page pour appliquer les modifications.

Les nouvelles directives sont prises en compte immédiatement par le processus PHP du site web.


Vérification et conseils

Après avoir enregistré la configuration, il est fortement conseillé de vérifier le bon fonctionnement de votre site :

  1. Vérifier l’affichage de votre site : parcourez les pages principales pour vous assurer qu’aucune erreur 500 n’apparaît.
  2. Tester les sessions : connectez-vous à l’administration de votre CMS (back-office WordPress, PrestaShop…) et naviguez entre plusieurs pages pour vous assurer que votre session reste active.
  3. Tester les téléversements (upload) : essayez d’importer une image ou un document dans vos médias pour confirmer que upload_tmp_dir fonctionne sans encombre.
  4. Consulter les logs d’erreurs en cas de blocage : si une fonctionnalité échoue ou affiche une erreur, consultez vos logs PHP. Si un composant de votre site nécessite un répertoire additionnel non déclaré dans open_basedir, le message d’erreur mentionnera précisément le chemin bloqué. Il vous suffira alors de rajouter ce chemin dans la directive open_basedir, séparé par un deux-points (:).

En cas de question ou si vous souhaitez être accompagné, l’équipe d’Ethersys reste à votre disposition par téléphone au 05 82 95 25 35 ou par e-mail à contact@ethersys.fr.