2010-05-06 4 views
11

Je suis tombé sur ce problème, j'ai un serveur qui exécute apache et php. Nous avons beaucoup d'hôtes virtuels mais nous avons remarqué qu'un utilisateur potentiellement malveillant pourrait utiliser son espace web pour parcourir les fichiers d'autres utilisateurs (via un simple script php) et même les fichiers système, cela pourrait arriver en raison des permissions php. Une manière de l'éviter est de définir la variable open_basedir dans php.ini, ce qui est très simple dans un seul système hôte, mais dans le cas d'hôtes virtuels, il y aurait une basebir pour chaque hôte.PHP - un open_basedir différent pour chaque hôte virtuel

Comment puis-je définir dis basedir pour chaque utilisateur/hôte? est-il un moyen de laisser apache hereditate php privilèges du fichier php qui a été demandé

E.G. /home/X_USER/index.php a comme propriétaire X_USER, quand apache a lu le fichier index.php il vérifie son chemin et son propriétaire, simplement je cherche une variable système set php basedir à ce chemin.

Merci d'avance Lopoc

Répondre

17

Il est possible de définir open_basedir sur une base par répertoire en utilisant la directive Apache php_admin_value.

Exemple du manual:

<Directory /docroot> 
    php_admin_value open_basedir /docroot 
</Directory> 

Re votre commentaire: oui, les commandes externes ne sont pas affectées par open_basedir - lors de l'appel ls / cela se fait avec les droits du compte utilisateur PHP fonctionne sous (souvent appelé www ou similaire). Pour autant que je sache, il n'est pas possible d'étendre open_basedir à des commandes externes.

Dans ce cas, je ne pense pas que le type de protection que vous recherchez est possible dans une configuration normale d'Apache/PHP. La seule chose qui peut être proche est running Apache in a chroot jail. Je ne l'ai pas fait moi-même, donc je ne peux rien dire à ce sujet - vous devrez creuser et peut-être poser une question spécifique à ce sujet.

+0

ouais ok, mais juste un simple echo 'ls /' fonctionne toujours, même avec cette directive – Lopoc

+0

@Lopoc voir ma mise à jour. –

1

chroot est une bonne idée. Et maintenant docker est plus efficace.

et open_basedir avec "/ docroot" est pas la sécurité, vous devriez finir avec un "/" ou PHP peut accéder/docroot1

Questions connexes