Упрощенно mpm-itk — это Apache с запуском виртуальных хостов под указанными User и Group. Чаще всего используется на шаред хостингах. Процесс, работающий от пользователя root, анализирует, какому виртуальному хосту пришел запрос, после чего форкает самого себя с setuid на того пользователя, который указан в настройках данного виртуального хоста.
В результате всё, что далее вызывается апачем (в т.ч. mod_php, mod_python и прочие прелести) работают уже от имени пользователя данного виртуалхоста. Данная технология позволяет не использовать обходные пути типа mod_cgi, mod_fcgi, mod_fcgid и php-cgi.
Конечно, можно использовать php-cgi, mod_fcgi или suphp, но все они потребляют слишком много ресурсов (mod_fcgi и suphp) или же медленны (как php-cgi). Поэтому на серверах где ресурсы хочется съэкономить стоит устанавливать имеено apache с mpm-itk.
Привожу один из вариантов установки apache mpm-itk, опробованный мною лично.
Подключаем репозиторий CentALT
rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm
Также требуется репозиторий EPEL, который у меня уже был подключен
rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Проверить, какие репозитории подключены можно командой
yum repolist
Устанавливаем Apache MPM-ITK
yum update httpd
При этом должно отобразиться, что установка будет выполнена из репозитория CentALT.
Подтверждаете установку вводом «y»
Будет установлен Apache из репозитория CentALT, больше он не потребуется, рекомендуем его отключить чтобы автоматически другое ПО из него не устанавливалось и не обновлялось автоматически, для этого пропишите в файле /etc/yum.repos.d/centalt.repo enabled=0 вместо enabled=1.
Далее отредактируйте /etc/sysconfig/httpd — пропишите или раскоментируйте в нем строку
HTTPD=/usr/sbin/httpd.itk
Отредактируйте конфигурацию Apache — исправьте файл /etc/httpd/conf.d/php.conf — пропишите в него
LoadModule php5_module modules/libphp5.so
Отредактируйте /etc/httpd/conf/httpd.conf — если есть какие-либо VirtualHost в нем, то поменяйте в нем SuexecUserGroup на AssignUserID например командой
perl -p -i -e 's/SuexecUserGroup/AssignUserID/g' /etc/httpd/conf/httpd.conf
или sвиртуалхостам необходимо добавить директиву AssignUserID с указанием пользователя и группы данного виртуального хоста.
Здесь же пропишите настройки также для модуля itk.c (все по аналогии с , просто скопируйте его строки или исправьте в конфигурации). Например, так
StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 110
MaxClients 100
MaxRequestsPerChild 4000
Перезапустите Apache
service httpd restart
И убедитесь что запущен httpd.itk
ps ax|grep http
Должен появиться список процессов с адресом /usr/sbin/httpd.itk
Для проверки пользователя под которым выполняются скрипты на виртуальном хосте необходимо в корень этого виртуального хоста записать файл php такого содержания:
echo exec('id');
и запустить.
После вот установки великого mpm-itk увидим вот такое:
uid=500(test2) gid=502(test2) groups=501(mgrsecure),502(test2) -где test2 -- имя юзера.