2013-06-09 1 views
3

J'ai créé un serveur nginx dans un chroot à/srv/http avec php-fpm. Les deux services utilisent l'utilisateur http et cela fonctionne très bien. Le problème vient quand je tente d'exécuter une commande exec tels queExec avec PHP-FPM sur nginx (sous chroot) ne renvoie rien

echo shell_exec('/usr/bin/ls'); 

Il n'y a pas de sortie du tout sur la page Web ou dans les erreurs. J'ai également essayé

error_log(shell_exec('/usr/bin/ls'); 

et toujours rien.

choses que j'ai essayé ou de savoir:

  1. safe mode off
  2. exec activé
  3. utilisateur est http (en utilisant la fonction phpinfo())
  4. display_errors = sur
  5. error_reporting = E_ALL
  6. sudo/usr/bin/chroot --userspec = http: http/srv/http ls fonctionne bien
  7. peut créer un fichier et lire à l'aide file_puts_content et fopen/fread
  8. essayé shell_exec, exec, système et passthrough - rien travaillé
  9. essayé annexant 2> & 1 à la fin de la commande et rien
  10. I avez copié tous les fichiers exécutables et les bibliothèques nécessaires sur
  11. toutes les bibliothèques, les binaires, et tout sous/srv/http/www (où les pages Web sont) ont exécutable et lire les autorisations
  12. doc_root est www

Pour autant que je sache, tout fonctionne dans le chroot, sauf les commandes shell via php-fpm. Quelqu'un at-il une idée de l'endroit où j'ai mal tourné et comment y remédier?

Répondre

0

Si vous chroot vers un répertoire, ce répertoire devient la racine de tous vos scripts PHP. Cela signifie que si vous exécutez /usr/bin/ls à partir de PHP, il va essayer d'exécuter /srv/http/usr/bin/ls à la place.

Vous pouvez copier l'exécutable dans ce répertoire, mais soyez conscient des implications de sécurité. Si vous copiez des exécutables système critiques dans le répertoire chrooté, vous évitez les effets positifs de chroot.

+0

Je l'ai déjà fait. J'ai copié/usr/bin/ls à/srv/http/usr/bin/ls (et après avoir vu les bibliothèques nécessaires avec ldd/srv/http/usr/bin/ls), j'ai copié les fichiers .so dans/srv/http/usr/lib. Et ça n'a toujours pas marché. Et voir # 6 où je peux l'exécuter dans le chroot, donc j'ai les fichiers nécessaires. – projectdelphai

1

Cela peut sembler stupide, mais vous devez simplement copier /bin/sh (pas /bin/bash!) À vous chroot.

Par exemple voir cette question: How do I change the shell for php's exec()

+0

Utilisez également 'ldd sh' pour trouver les bibliothèques dont il a besoin. –

0

Je reçois pas de sortie pour

echo shell_exec('/usr/bin/ls'); 

soit. Vraisemblablement parce que ls n'est pas un fichier mais une commande intégrée.Course:

echo shell_exec('ls'); 

sorties:

démos css robots.txt routing.php de Favicon.ico images js Test

qui est la liste des fichiers dans mon répertoire racine pour le site.