Приветствую многоуважаемые участники форума.
Возникла необходимость ограничить ресурсы системы выделяемые для apache22. Было принято решение настроить запуск каждого отдельного виртуального хоста под разными пользователями и уже у этих пользователей вводить квоты на системные ресурсы. Погуглив и поискав на opennet.ru нашел пару статей по этому поводу, но в них приводился в основном apache13 с самописным модулем. Поскольку с apache22 уходить никак не получается (заморочки фирмы) решил пойти по более сложному пути и почитать системные man по httpd.conf :-). В них говорилось про то, что надо пересобрать apache и добавлением в makefile в секцию CFLAGS флаг -DBIG_SECURITY_HOLE, потом запустить apache из-под рута и типа в vhosts можно будет прописывать директивы user и group. Сделал все по этому руководству, но желаемого эффекта это не принесло((( apache конечно из-под рута стартует, но прописать пользователя и группу в каждом виртуальном хосте не позволяет.
Вопрос заключается в следующем, как можно заставить работает апач из-под разных пользователей для виртуальных хостов? НУ или каким способом можно ограничить потребляемые ресурсы для каждого отдельного виртуального хоста, может у кого еть опыт))
Заранее благодарен.
>[оверквотинг удален]
>что надо пересобрать apache и добавлением в makefile в секцию CFLAGS
>флаг -DBIG_SECURITY_HOLE, потом запустить apache из-под рута и типа в vhosts
>можно будет прописывать директивы user и group. Сделал все по этому
>руководству, но желаемого эффекта это не принесло((( apache конечно из-под рута
>стартует, но прописать пользователя и группу в каждом виртуальном хосте не
>позволяет.
>Вопрос заключается в следующем, как можно заставить работает апач из-под разных пользователей
>для виртуальных хостов? НУ или каким способом можно ограничить потребляемые ресурсы
>для каждого отдельного виртуального хоста, может у кого еть опыт))
>Заранее благодарен.ключевое слово: "виртуализация"
Да, забыл сказать, решения с jail не подходят, на сервере 1 ip и больше выделить не получиться.(((
Если вопрос только в дисковых квотах, то достаточно правильного выставления группы с sgid битом на директории пользователей. Квоты будут считаться по uid пользователя,а апач будет иметь доступ по группе. Если же нужны квоты на память и процессор, то только легкая виртуализация, например OpenVZ.
>[оверквотинг удален]
>что надо пересобрать apache и добавлением в makefile в секцию CFLAGS
>флаг -DBIG_SECURITY_HOLE, потом запустить apache из-под рута и типа в vhosts
>можно будет прописывать директивы user и group. Сделал все по этому
>руководству, но желаемого эффекта это не принесло((( apache конечно из-под рута
>стартует, но прописать пользователя и группу в каждом виртуальном хосте не
>позволяет.
>Вопрос заключается в следующем, как можно заставить работает апач из-под разных пользователей
>для виртуальных хостов? НУ или каким способом можно ограничить потребляемые ресурсы
>для каждого отдельного виртуального хоста, может у кого еть опыт))
>Заранее благодарен.Ограничения сетевых подключений -- mod_cband
Нашел в портах вот это /usr/ports/www/apache22-peruser-mpm.
В pkg-descr написано следующееPeruser is an Apache 2 modules based on metuxmpm. The fundamental
concept behind them is to run each apache child process as its own
user and group, each handling its own set of virtual hosts. Peruser
and recent metuxmpm releases can also chroot() apache processes.
The result is a sane and secure web server environment for your
users, without kludges like PHP's safe_mode.Помоему это как раз оно))) Ни кто не сталкивался?
Используйте Apache 2 ITK MPM http://mpm-itk.sesse.net/.
Проблема решена))
Все оказалось проще, чем я думал))) Огромное спасибо Aleksey.
собрать apache22 с mpm itk можно просто изменив в директории порта (/usr/ports/www/apache22) файл Makefile. Необходимо прописать В WITH_MPM вместо prefwork это самое itk))) В этом файле даже комментарий по этому поводу имеется))) После пересборки появляется возможность в VirtualHost прописывать AssignUserID и MaxClientsVHost.
В очередной раз убеждаюсь, что покурить man поподробнее крайне полезно)))
Да, и еще. В принципе можно запуска выполнение cgi сценариев под разными пользователями и при помощи модуля suexec. После подключения данного модуля появляется директива SuexecUserGroup. В ней также прописываются пользователь и группа, но запускаться этими пользователями будут только сценарии cgi. В некоторых случаях это удобно.
Для дальнейшего ограничения ресурсов каждого виртуального хоста будет создан класс пользователей с системными ограничениями ресурсов.
Всем еще раз большое спасибо.
Установите suhosin patch для php, чтобы изменять disabled_functions не глобально, а индивидуально для каждого хоста.