2013-06-10 7 views
1

Я бы хотел, чтобы PHP использовал исполняемый файл по заданному пути, когда ему нужна оболочка вместо стандартного/bin/sh для каждой ситуации, когда ему нужно shell (например, функция mail() для запуска sendmail на платформе UNIX, функция system(), оператор backtick и т. д. и т. д.). Поскольку я использую PHP как модуль apache, я попытался изменить оболочку для пользователя www-data в/etc/passwd, так как веб-сервер работает как этот пользователь. Это не помогло. Я также пытался установить переменную SHELL в конфигурацию apache с помощью SetEnv, но это тоже не помогло. Я хотел бы сделать это, так как хочу проверить все вызовы оболочки, выполненные PHP, для регистрации и/или отклонения/принятия их тоже. Невозможно отключить функции PHP, такие как system(), поскольку существующие (не могут быть изменены) решения используют его. У меня уже была эта «ограниченная оболочка», закодированная на C, я просто пропустил трюк, чтобы заставить PHP использовать этот двоичный файл вместо/bin/sh все случаи, когда это понадобится/bin/sh в противном случае.Использование другого пути, чем/bin/sh для PHP, когда ему требуется оболочка

Да, я задал этот вопрос, уже связанный с функцией mail(), но я понял, что мне нужно очень общее решение, и это связано не только с почтой(), но проблема заключается в использовании оболочки вообще , во многих разных ситуациях. Я также думал о возможности переопределить имя пути в apparmor, но я не думаю, что это возможно. Решение предоставить пользовательскую корневой «острог» для Apache/PHP только для обеспечения другой оболочки, кажется огромной избыточна для меня ситуация :(

Большого спасибо заранее!

+0

Как запустить apache в среде с chrooted? – hek2mgl

+0

Прочтите эту статью [http://www.redhat.com/mirrors/LDP/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec254.html). В этой тюрьме chroot вы можете заменить оболочку своей модифицированной версией. – hek2mgl

+0

Да, я также упомянул chroot в моем вопросе, спасибо. Просто я чувствую, что на самом деле слишком сложно использовать chroot env только потому, что для установки переменной _single_ (путь используемой оболочки) это огромная трата ресурсов и упрощение администрирования для меня. Но если нет другого решения, я должен с этим справиться ... Спасибо! – LGB

ответ

1

PHP использует popen() в этом случай, который обычно является жестко использовать /bin/sh -c (см, например, glibc's implementation).

Если создание CHROOT тюрьмы действительно не вариант, и что AppArmor предоставляет не достаточно, вы, возможно, придется изменить либо PHP или libc.