open_basedir sur Plesk 10.3

5 avril 2012 par admin Laisser une réponse »

Le système d’interface Plesk utilise pour ses hébergements par défaut un système apellé « open_basedir ». C’est une restriction entre PHP et Apache qui interdit à PHP d’aller chercher par des includes ou fopen des fichiers ailleurs que dans le dossier racine (et sous-dossiers) d’un site. Par exemple, ceci va interdire à un site d’aller chercher des composants dans un dossier racine d’un sous-domaine, ou au contraire, d’interdire à un sous-domaine d’aller chercher des modules sur le domaine principale.

Ce système open_basedir peut être assez facilement modifié, mais il faut, sur Plesk 10.3 et les versions précédentes, aller faire les modifications en mode terminal : L’interface Plesk ne permet pas de faire ces modifs.

Tout d’abord, il faut savoir quels dossiers contiennent les informations qui vous intéressent. Dans l’exemple suivant, je vais utiliser l’arborescence suivant :

Répertoire principal du site mondomaine.com

   /var/www/vhosts/mondomaine.com/httpdocs/

Répertoire principal du sous-domaine sousdomaine.mondomaine.com


   /var/www/vhosts/mondomaine.com/monsousdomaine/

Imaginons que le site http://monsousdomaine.mondomaine.com doit aller chercher un fichier parametres.php qui se trouve, pour une gestion centralisée de votre site, dans la racine, sous le dossier /httpdocs :

Avec une restriction open_basedir, votre commande PHP d’include va échouer car le le dossier httpdocs n’est pas un sous-dossier de monsousdomaine. Il faut passer outre le paramétrage par défaut, en modifiant (ou en créant si inexistant) un fichier vhost.conf dans un dossier spécifique.

Si votre sous-domaine monsousdomine doit accéder à un fichier dans la racine du site principale et vous souhaitez lui retirer toute sécurité open_basedir, vous deviez ajouter le code suivant dans le fichier /var/www/vhosts/mondomaine.com/subdomains/monsousdomaine/conf/vhosts.conf


   <Directory /var/www/vhosts/mondomaine.com/subdomains/monsousdomaine>
      php_admin_value open_basedir none
   </Directory>

Au contraire, si vous devez modifier votre domaine princpal pour désactiver open_basedir, vous devez modifier le fichier suivant : /var/www/mondomaine.com/conf.vhost.conf et ajouter le code suivant :


   <Directory /var/www/vhosts/mondomaine.com/httpdocs>
      php_admin_value open_basedir none
   </Directory>

Le fait de retirer toute protection open_basedir est souvent discuté car cela peut ajouter une faille de sécurité, en laissant un script libre cours et libre accès à toute l’arboresence du serveur à laquelle le compte utilisateur Apache a accès, pour lire et déposer des fichiers.

Il peut être mieux simplement d’ajouter explicitement les dossiers que vous souhaitez autoriser.

Pour ce faire, au lieu de modifier les fichiers conf pour spécifier « open_basedir none », vous aller spécifier à la place de none, tous les chemins autorisés, séparés par des deux-points :


   php_admin_value open_basedir /var/www/vhosts/mondomaine.com/httpdocs:/var/www/vhosts/mondmaine.com/monsousdomaine:/tmp

Ceci donnera accès aux dossiers racine du domaine, du sous-domaine et au dossier temporaire du serveur. Bien évidamment, ceci ne focntionnera que pour le site ou sous domaine qui correspond au fichier conf modifié.

Une fois vos création ou modification des fichiers vhost.conf effectués, vous devez relancer les commandes suivantes pour que plesk regénère ses propres fichiers de paramètres, et pour être certain qu’apache a été rechargé :


   /usr/local/psa/admin/bin/httpdmng --reconfigure-all
   /etc/init.d/httpd reload

2 commentaires

  1. Seda dit :

    We followed every step as dcebrised above.Initially, we got stuck at the First command (cp ), getting an error that said the directory did not exist (/var/www/vhosts//bin/ (substituting the real domain name, of course). So, we proceeded to create it manually, using the mkdir command.Once the directory was created, and we confirmed so (by using the FTP client FileZilla to see it), we proceeded to redo the First command, and were able to move forward up to the Fifth command, which is editing the vhost.conf file.Once here, we proceeded to 1. execute the vim vhost.conf command, 2. change to insert mode using the command a , 3. we copy/pasted the lines provided by you in Step3, 4. we changed back to command mode using the esc key , 5. we quit using the command :wq to save and exit the vim editor.LAST, we execute the command /usr/local/psa/admin/sbin/websrvmng -a -v to reconfigure our server.Once the server restarted, my programmer uploaded a small file called phpinfo.php with the code phpinfo(); to make sure we now had PHP5 running, and not our old PHP4.3. We still got the old information. Soon after, our Apache server started going down. This happened repeatedly. We had to turn off that domain, since we host close to 100 customers in the same server. After this, the problem stopped.

    • admin dit :

      Hi there,

      Your paths may actually depend on the version of Plesk that you use: Between Plesk 9 and 10 there have been a lot of changes (between 7 and 10 even more so) and if you are trying to run PHP 4 AND PHP 5 on the same box, after having someone manually set up the system, you could well confuse the Plesk server that contains it’s own specific settings database, and has a nasty habit of overwriting your own changes and screwing itself up.

      I feel your pain though if you have that many accounts on the box though. It can be far easier if you corrupt a domain to back it up , delete it through plesk and recreate and restore from the backup.

      Unless you have internal unix know-how, and your clients to not have to manage their own accounts, you could be better off managing a « raw » linux server and creating your own vhosts, but otherwise, I do have to agree, that if you just want somthing to « just work », plesk does give you a nice interface for hosting and especially emails… but all is OK as long as you do not need to furkle around under the bonnet!

      Cheers,
      Daniel

Laisser un commentaire