Aller au contenu

Sujets conseillés

Posté

Bonjour,

Depuis quelques temps j'ai des erreurs open_basedir sur mon dédier et tous les sites hébergé.

J'ai cherché un moment mais j'ai pas trouvé, et la seule solution que j'ai trouvé est de restarter Apache. Mais à peine une heure le rédemarrage d'Apache les erreurs reviennent.

Voici ce que j'ai en haut de chaque page :

Warning: Unknown(): open_basedir restriction in effect. File(/home/httpd/vhosts/site2.com/httpdocs/kit/etc/autoprepend.php) is not within the allowed path(s): (/home/httpd/vhosts/site1.com/httpdocs:/tmp) in Unknown on line 0

Warning: Unknown(/home/httpd/vhosts/site2.com/httpdocs/kit/etc/autoprepend.php): failed to open stream: Operation not permitted in Unknown on line 0

Warning: (null)(): Failed opening '/home/httpd/vhosts/site2.com/httpdocs/kit/etc/autoprepend.php' for inclusion (include_path='/home/httpd/vhosts/site2.com/httpdocs/kit/etc') in Unknown on line 0

Si quelqu'un aurait une idée du problème ça serait sympa, parce que en attendant j'ai un cron qui restart Apache toutes les heures mais c'est pas très stable et surtout ça me fait planter le serveur assez souvent.

Merci d'avance.

Posté

Salut Hacken,

As-tu besoin de open_basedir ? Tu as dû le configurer toi-même, lors de l'installation.

Si c'est le cas, il faut adapter le chemin tel que défini dans le fichier php.ini, ou éventuellement le désactiver pour certains VirtualHosts dans la configuration Apache.

open_basedir chaîne de caractères

Limite les fichiers accessibles par PHP dans l'arborescence. Cette directive n'est pas affectée par le safe mode.

Lorsqu'un script tente d'ouvrir un fichier, avec les fonctions fopen() ou gzopen(), la situation du fichier est vérifiée. Si le fichier se situe hors du dossier spécifié dans cette directive, PHP refusera de l'ouvrir. Les liens symboliques sont résolus, ce qui fait que cette restriction ne peut être contournée par un lien symbolique.

La valeur spéciale . indique que le dossier dans lequel le script est stocké, servira de dossier de base. Cela est cependant peu dangereux car le dossier courant du script peut facilement être modifié avec la fonction chdir().

Dans httpd.conf, open_basedir peut être désactivée (i.e. pour certains hôtes virtuels) de la même manière que toute autre directive de configuration avec la syntaxe "php_admin_value open_basedir none".

Sous Windows, séparez les dossiers par des points virgules. Sur les autres systèmes, séparez les dossiers avec des deux-points. Lorsque PHP est utilisé comme module Apache, les chemins de la directive open_basedir des dossiers parents sont automatiques transmis.

La restriction spécifiée par open_basedir est en fait un préfixe et non un dossier. Cela signifie que "open_basedir = /dir/incl" donne accès au dossier "/dir/include" et aussi au dossier "/dir/incls" s'il existe. Lorsque vous souhaitez restreindre l'accès à un dossier spécifique, ajoutez un slash final. Par exemple : open_basedir = /dir/incl/.

Note : Le support des dossiers multiples a été ajouté en PHP 3.0.7.

La valeur par défaut permet l'ouverture de tous les fichiers.

Posté

Merci c'est super,

Aurais-tu quelques liens vers de la documentation en ligne sur ce sujet ou peut-être me conseilles-tu un bon livre sur Apache et sa configuration avec PHP ?

Merci d'avance.

  • 2 semaines plus tard...
Posté

Votre première réponse m'a beaucoup aidé et maintenant je souhaite savoir comment faire pour que php puisse ouvrir n'importe quelle dosser se trouvant à la racine du virtualhost.

Autrement dit, php devrait pouvour ouvrir un dossier qui se trouve dans

/home/httpd/vhosts/site1.com/httpdocs/mondossier/sousdossier

Est-ce que je dois changer quelque chose dans la config de php ou apache ou alors c'est un problèmes de droits ou d'utilisateurs ?

merci d'avance

Posté

Il n'y a pas de modification à faire dans la configuration Apache. A partir du moment où le documentroot est défini, tous les répertoires sous celui-ci seront interprétés par php.

Une condition toutefois: il faut qu'ils soient nommés en .php ou .php3 ou que tu aies ajouté une directive AddType por forcer l'interprétation des fichiers .htm et .html. Mais je te suggère d'oublier cela pour l'instant, pour ne pas compliquer la mise en route.

Il faut aussi que php ait les droits d'ouvrir ce fichier, et ceux-ci dépendent de son exécution en module ou en cgi.

S'il est en module, il hérite des droits d'Apache. S'il est en CGI il a les droits de l'utilisateur du domaine.

Dan

Posté

Comment savoir comment PHP est installé, parce que en gros j'ai installé Plesk 7.5 et un certain site n'arrive plus à uploader des images dans des répertoires qui doivent être crée dynamiquement (open_basedir restriction) alors que les chemins sont bon.

Merci bien en tout cas pour les infos, j'ai acheté quelques bouqins sur Apache mais ils parlent pas beaucoup de la config avec PHP et les bouqins PHP parlent presque tous que de programmation :(

Posté

Crée un script php dans lequel tu mets ceci:

<?php
phpinfo();
?>

Tu devrais avoir la liste des modules supportés par Php ainsi que la config Php/Apache :)

Dan

Posté (modifié)

j'ai pu résoudre mon problème d'accès, mais malheureusement la première (voir mon premier message) erreur que j'avais est revenu une semaine plus tard.

Voici une partie de mon httpd.include d'un site.

<Directory /home/httpd/vhosts/monsite.com/httpdocs>
       <IfModule sapi_apache2.c>
               php_admin_flag engine on
               php_admin_value open_basedir "/home/httpd/vhosts/monsite.com/httpdocs:/tmp"
       </IfModule>
       <IfModule mod_php5.c>
               php_admin_flag engine on
               php_admin_value open_basedir "/home/httpd/vhosts/monsite.com/httpdocs:/tmp"
       </IfModule>
               Options -Includes -ExecCGI
       </Directory>
       <Directory /home/httpd/vhosts/monsite.com/web_users>
       <IfModule sapi_apache2.c>
               AddType text/plain .php .php4 .php3 .phtml
               php_admin_flag engine off
       </IfModule>
       <IfModule mod_php5.c>
               AddType text/plain .php .php5 .php4 .php3 .phtml
               php_admin_flag engine off
       </IfModule>
       </Directory>

Et celle-ci de mon fichier php.ini (partie Safe_mode ou se trouve le openbase_dir)

; Safe Mode
;
safe_mode=off

; By default, Safe Mode does a UID compare check when
; opening files. If you want to relax this to a GID compare,
; then turn on safe_mode_gid.
safe_mode_gid = Off

; When safe_mode is on, UID/GID checks are bypassed when
; including files from this directory and its subdirectories.
; (directory must also be in include_path or full path must
; be used when including)
safe_mode_include_dir =

; When safe_mode is on, only executables located in the safe_mode_exec_dir
; will be allowed to be executed via the exec family of functions.
safe_mode_exec_dir =

; Setting certain environment variables may be a potential security breach.
; This directive contains a comma-delimited list of prefixes.  In Safe Mode,
; the user may only alter environment variables whose names begin with the
; prefixes supplied here.  By default, users will only be able to set
; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).
;
; Note:  If this directive is empty, PHP will let the user modify ANY
; environment variable!
safe_mode_allowed_env_vars = PHP_

; This directive contains a comma-delimited list of environment variables that
; the end user won't be able to change using putenv().  These variables will be
; protected even if safe_mode_allowed_env_vars is set to allow to change them.
safe_mode_protected_env_vars = LD_LIBRARY_PATH

; open_basedir, if set, limits all file operations to the defined directory
; and below.  This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
open_basedir = /tmp

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions =

; This directive allows you to disable certain classes for security reasons.
; It receives a comma-delimited list of class names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_classes =

Si vous avez besoin d'autres détails (moi j'essai d'apprendre en local donc) demandez moi ou conseillez moi.

Merci d'avance

Modifié par Hacken
Posté

Pourquoi ne remplaces-tu pas

open_basedir = /tmp

per

open_basedir =

ainsi que virer les lignes:

php_admin_value open_basedir "/home/httpd/vhosts/monsite.com/httpdocs:/tmp"

?? C'est tout simple, non ? ?

Il suffit de redémarrer Apache ensuite...

Posté (modifié)

Edit :

Si j'ai plusieurs sites, après le site x peut ouvrir les fichiers du site y non ?

Sinon, il y a possibilité de supprimer ces lignes dans plusieurs fichiers httpd.include de plsuieurs vhost ?

Parce que imaginons que j'ai 120 sites, je devrais faire comment ?

Merci d'avance.

Modifié par Hacken
Posté
Vous avez une idée ? Peut-être que ma dernière édition est passé inerperçu :rolleyes:

Il est inutile et contraire aux règles de faire remonter un post de cette manière :nono:

Ton serveur est configuré pour faire de l'hébergement de sites ne t'appartenant pas ?

Dans ce cas, ne permettre les includes qu'au départ du répertoire /tmp est un peu trop limitatif.

Plutôt que d'avoir

open_basedir = /tmp

il faudrait

open_basedir = /home/httpd/vhosts/monsite.com/httpdocs:/tmp

En remplaçant le monsite.com par le nom de domaine concerné.

Dan

Posté
Il est inutile et contraire aux règles de faire remonter un post de cette manière :nono:

Je suis désolé, je voulais pas.. mais j'étais pas sûr que mon édition ait été lue. Je recommencerais pas :-)

Ton serveur est configuré pour faire de l'hébergement de sites ne t'appartenant pas ?

Oui, j'essai de configurer un serveur pour mes sites persos mais au même temps je souhaite héberger quelques amis, et je préféres aussi apprendre pour un éventuelle serveur d'hébergement plus tard. Sauf que les livres que j'ai ne parlent pas beaucoup de la configuration PHP/Apache2

Dans ce cas, ne permettre les includes qu'au départ du répertoire /tmp est un peu trop limitatif.

Plutôt que d'avoir

open_basedir = /tmp

il faudrait

open_basedir = /home/httpd/vhosts/monsite.com/httpdocs:/tmp

En remplaçant le monsite.com par le nom de domaine concerné.

<{POST_SNAPBACK}>

Je pense que ça serait la solution, mais existe-il une variable ou un httpd.include qui sert de base pour la création du fichier qui se trouvera dans le Vhost du site en question ? Cela me permettra après de créer des hébergements dynamiquement au lieu de le faire à la main. Soit par une Interface Web développée en PHP ou autre soit par un bash.

Merci d'avance.

Posté

Un script en php qui te permettrait de faire cela n'est pas bien difficile à écrire, non ?

Il faut seulement que ton domaine de contrôle ne soit pas soumis à l'open_basedir.

Posté

Mais la ligne open_basedir = fait parti du php.ini il est pas le même pour tout le monde celui-là ?

De plus j'ai remaqué que le site qui avait ces erreurs utilisait tous des sessions ? Est-ce qu'il y aurait pas un problème à ce niveau là ?

Merci d'avance.

Posté

Bonjour,

Après quelques jours de tests en local et surtout en beta close, j'ai décider de mettre le serveur en production, tout fonctionne bien sauf... toujours cett erreur d'open_basedir qui pose problème.

Je pensais l'avoir réglé durant les tests puisqu'elle n'apasaissait pas mais cela semble pas être le cas puisque certaines personnes m'evoient un email m'indiquant l'erreur en question.

Chose plustôt bizarre, l'erreur ne vient que sur les sites qui utilisent les Sessions en PHP. Est-ce qu'il y a quelque chose de mail configuré à ce niveau ?

Sinon, vu que j'ai installé un Plesk 7.5 Reloaded est-ce que cela pourrait venir de ça ?

Merci d'avance.

Posté

Par défaut, la ligne open_basedir est commentée dans une installation de php... c'est donc soit toi soit plesk qui a modifié ce fichier...

Regardes dans plesk si tu as ce type de configuration.

Dan

Posté

Quand j'ai ouvert le php.ini ou le http.conf pour la première fois la ligne openbase_dir n'était pas en commentaire. Idem pour le fichier http.conf, mais pas contre elle contenait rien comme value et j'avais quand même l'erreur.

Posté

Dans une installation de php, au départ des fichiers standards provenant de php.net, la ligne open_basedir EST commentée.

C'est donc lors de ton installation, ou lors de l'utilisation de Plesk, que cette ligne a été modifiée.

Dan

Posté

Je viens de chercher tous les php.ini possible du serveur et j'ai passé la ligne open_basedir en commentaire.

Maintenant, pour vérifier ma logique, est-ce que si la ligne n'est pas déclarée en php c'est celle de Apache qui prend le dessus ?

Merci d'avance et surtout pour votre patience :-P

Posté

Tu en as combien des fichiers php.ini ? Normalement il ne t'en faut qu'un seul. :)

Posté

Alors, j'ai ai deux qui sont succeptible d'être utilisé par le serveur.

Le premier se trouve dans /etc/php.ini et le secon dans /usr/local/psa/admin/conf/php.ini

Les 5 autres sont renomé avec soit save, soit une autre extention. Sinon, est-ce que ma logique est juste ou j'ai vraiment rien compris à la config d'un serveur ?

Merci :)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...