2011-06-26 2 views
1

Pour des raisons de sécurité, certaines applications sont isolées dans un environnement chroot. J'ai besoin d'appeler ces applications via un script PHP. Quelque chose comme ça:Appel de chroot dans PHP

exec('chroot /path/to/chroot command') 

je dois être root pour l'utilisation chroot. Il y a un chroot() dans le manuel PHP mais cette fonction nécessite également des privilèges root. Alors, comment utiliser les commandes chroot ed en PHP?

+0

Pour moi, cela ne semble pas être un bon moyen d'assurer la sécurité. Pouvez-vous expliquer un peu plus ce que vous essayez de faire, peut-être y a-t-il d'autres façons de le faire? –

+0

Ok. J'ai besoin de lancer pdflatex et imagemagick pour générer un fichier png correspondant aux formules latex. Le problème est que j'ai besoin d'empêcher l'accès aux fichiers système avec du code latex malveillant. J'ai donc installé du latex dans un chroot et je veux l'appeler via PHP. –

+0

Semble effrayant, bonne chance :) –

Répondre

2

chroot ne peut être appelé que par des utilisateurs privilégiés. Sinon, les utilisateurs normaux pourraient tromper les applications setuid telles que passwd ou sudo pour accéder aux fichiers dans un endroit inattendu. Par conséquent, si votre application php n'est pas exécutée en tant que root, la seule chose que vous pouvez faire est de mettre en place un script wrapper setuid et d'appeler cela à partir de php. Il devrait rapidement abandonner les privilèges après avoir appelé chroot, car root peut trivially break out of chroots.

Vous pouvez également configurer sudo pour permettre à l'utilisateur php d'exécuter chroot /path/to/chroot command et de préfixer sudo à l'appel exec dans php.

0

L'astuce ici est d'utiliser sudo et le fichier sudoers voir le sudo manpage.

Fondamentalement, ce que vous feriez est de donner un accès utilisateur PHP à l'utilitaire sudo pour la commande chroot et votre code sera comme ceci:

exec('sudo chroot /path/to/chroot command') 
2

Vous pouvez utiliser les fonctions Linux. Voir la capacité CAP_SYS_CHROOT au man capabilities.

AVERTISSEMENT! En utilisant sudo, après chrooting vous êtes root!