LINUX.ORG.RU
ФорумAdmin

mod_php, чем заменили safe_mode?

 , ,


1

1

Коллеги, попросили меня похостить php-сайт на сервере. Желание поднимать выделенный апач нет. Необходимо новый сайт за chroot-ить, раньше я для этого использовал open_basedir и если вдруг, из-за какого-то бага, за него выйдут была защита в виде safe_mode php, когда проверялось, что бы владелец скрипта совпадал с владельцем файла, к которому скрипт хочет получить доступ. safe_mode начиная с версии 5.4.0 отменили. Как сейчас справляются с задачей, когда не привилегированному процессу apache (php работает как модуль) у которого, по определению есть доступ ко всем хостящимся на вэбсервере файлам, ограничения доступа к файлам разных пользователей? У файлов разных пользователей будут и группы разные, но во все группы будет входить apache, для доступа к файлам, а прав other у файлов не будет.


Ответ на: комментарий от slowpony

mpm_itk?

Его производительность в 10(!) раз ниже, чем у обычного mpm_prefork/mpm_worker.

По сабжу, самое простое и надёжное решение для виртуальной изоляции — Docker.

Если производительность критична, то LXC-контейнер.

А самое быстрое решение — хостовый nginx+php-fpm.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Спасибо. В итоге всё сводится к тому, что под каждого пользователя нужно держать свой апач, а это дополнительная память, и много если используются к пример opcache, apc для php. Я понимаю, что обеспечивать безопасность средствами php не корректно, но блин, прежде чем выпиливать, предложили бы своё решение.

Viper
() автор топика
Ответ на: комментарий от slowpony

А как работает этот itk? Он при поступлении запроса прям каждый раз создаёт новый fork или, всё-таки, как-то анализирует, есть ли уже с необходимым UID свободный процесс и если есть, не форкает, а передаёт запрос этому процессу? Если есть какой-то анализ, то в моём случае это не страшно, не должна упасть скорость, так как пользователей будет совсем капля, да и сейчас в режиме prefork сконфигурировано, что процессы пересоздаются только через 100500 запросов, а итак постоянно висят и их хватает.

Viper
() автор топика
Ответ на: комментарий от Viper

В итоге всё сводится к тому, что под каждого пользователя нужно держать свой апач, а это дополнительная память

Это всё такие копейки на любом сервере, выпущенном в последние 15 лет...

Я понимаю, что обеспечивать безопасность средствами php не корректно, но блин, прежде чем выпиливать, предложили бы своё решение.

Я выше привёл решения, намного более корректные и удобные, чем safe_mode

KRoN73 ★★★★★
()
Последнее исправление: KRoN73 (всего исправлений: 1)
Ответ на: комментарий от KRoN73

Не могут/не хотят/лень отказываться от использования .htaccess. А так да, перед apache у меня стоит nginx, кэширует статику, в том числе в оперативку.

Это всё такие копейки на любом сервере, выпущенном в последние 15 лет...

В качестве ускорения выполнения скриптов используется apc-кэш, который, сейчас к примеру, заполнен на 2.5Гб. И что, каждому апачу, выделять свой apс-кэш? Хотя, сейчас подумал, может быть вторую ... пятую копию apache с mod_php можно настроить на тот же кэш в разделяемой памяти? Вот я сомневаюсь, что php-fpm будет быстрее при выполнении php-запроса, чем mod_php в apache. И, возможно, php-fpm (который каждый раз форкается с нужным UID) будет даже медленнее, чем mpm_itk, если mpm проводит анализ UID текущих процессов, а не форкается каждый запрос, и если с дуру не отправлять все подряд запросы в itk, а передавать только php-запросы. Вот заинтересовался алгоритмом работы mpm_itk, но что-то вразумительного ничего не нашёл, а в исходниках, думаю, мне разобраться будет сложно.

Viper
() автор топика
Ответ на: комментарий от Viper

В качестве ускорения выполнения скриптов используется apc-кэш, который, сейчас к примеру, заполнен на 2.5Гб

Откуда столько? o_O Никогда не видел, чтобы опкэши забивались больше, чем на десятки мегабайт. И то это на совсем уже извращённых огромных проектах.

К тому же опкеш разделяемый, при работе в одном хосте у разных юзеров кеш общий, только исполняется с разными правами.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Битрикс. При том, что разделение движка на несколько сайтов не используется, у каждого должна быть своя копия.

Viper
() автор топика
Ответ на: комментарий от Viper

Битрикс

Битрикс + разделение по юзерам — это очень, очень редкое извращение :) Очевидно, что мейнстрим на такую экзотику никак не ориентирован.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Его производительность в 10(!) раз ниже, чем у обычного mpm_prefork

В смысле включение модуля mpm_itk замедляет httpd-prefork в 10 раз ?

AS ★★★★★
()
Ответ на: комментарий от AS

При выполнении простейшего скрипта:

<?
//$start = microtime(true);
$temp = tmpfile();
fwrite($temp, "test");
fseek($temp, 0);
echo fread($temp, 1024);
fclose($temp);
//echo microtime(true) - $start;
//echo readfile ('/etc/passwd');
phpinfo();
?>
- без mpm_itk 10 тыс. запросов удалось выжать:
Requests per second: 258.61 [#/sec] (mean)
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2    8   2.6      8      19
Processing:    15   31  11.9     30     252
Waiting:        3    9   2.7      9      79
Total:         25   39  11.4     37     260
- c mpm_itk 10 тыс. запросов удалось выжать:
Requests per second: 251.22 [#/sec] (mean)
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2    6   2.1      6      18
Processing:    14   34  19.8     32     603
Waiting:        6   12   3.1     11     116
Total:         23   40  19.4     38     607
Так что вроде я не вижу проседания производительности у mpm_itk из-за форка на каждый запрос.

Viper
() автор топика
Ответ на: комментарий от Viper

Тест выполнялся при 10 параллельных сессиях. Но выяснилось, что при таком тестировании процессор загружен на 5% без mpm_itk и на 15% с ним. Что уже не так радужно.

Viper
() автор топика
Ответ на: комментарий от Viper

При выполнении простейшего скрипта

Я, вообще-то, про отдачу статики писал :) С PHP будет лимитировать последний. А уж когда он с файловой системой работает напрямую, так и вообще...

KRoN73 ★★★★★
()

suexec + mod_fcgid. Позволяет запускать скрипты от разных системных юзеров. Отличие от itk в том, что один раз запустившись, враппер какое-то время будет висеть в памяти, поэтому меньше расходов на их запуск.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.