переводим Apache в режим mpm-ITK + ISPmanager

Что такое mpm-itk режим в apache?
ITK это патч к модели работы апача Prefork, позволяющий выполнение скриптов с правами пользователя, например в случае с mod_php, все скрипты выполняются с правами пользователя www-data в Debian или пользователя apache в Centos, соответственно страдает безопасность сервера, т.к. даже если жестко ограничить функции и open_basedir, это не обеспечит 100% изоляции.

1. Для начала проверим возможно apache собран с поддержкой mpm-itk

apachectl -t -D DUMP_MODULES

Смотрим наличие строки

Loaded Modules:
.....
mpm_itk_module (static)
.....

Если есть то переходим к пункту 4.
Создаем в корне вашего сайта простой скрипт например id.php с содержимым:

<?php echo exec('id'); ?>

И открываем его сайт.ру/ip.php Вывод будет примерно такой:

uid=33(www-data) gid=33(www-data) groups=33(www-data)

2. Владельцам Centos: читайте внизу Update 1.
В Сentos необходимо подключить репозиторий CentALT

rpm -ihv //centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm #centos-5
rpm -ihv //centos.alt.ru/repository/centos/6/i386/centalt-release-6-1.noarch.rpm #centos-6-x32 
rpm -ihv //centos.alt.ru/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm #centos-6-x64

Отключим его (чтобы в дальнейшем остальное обновлялось из основного репозитория):
идем /etc/yum.repos.d/centalt.repo

...
enabled=0 
...

В Debian mpm-itk есть в готовых пакетах и заменится автоматом.
В FreeBSD удалить апач:

cd /usr/ports/www/apache22/
make deinstall

3.Устанавливаем:
Centos

yum --enablerepo=CentALT update httpd

Debian

apt-get install apache2-mpm-itk

FreeBSD
Открываем Makefile.local и добавляем строку WITH_MPM=itk

make install clean

4. В centos редактируем файл /etc/sysconfig/httpd и расскоментируем (либо добавляем) строчку

...
HTTPD=/usr/sbin/httpd.itk
...

Правим конфиг апача, заменяя SuexecUserGroup на AssignUserID редактором, либо одной из комманд (путь к конфигу соответственно свой):

sed -i -e 's/SuexecUserGroup/AssignUserID/g' /etc/httpd/conf/httpd.conf
perl -p -i -e 's/SuexecUserGroup/AssignUserID/g' /etc/httpd/conf/httpd.conf

Centos:
В /etc/httpd/conf/httpd.conf добавляем после

<IfModule prefork.c>...</IfModule>

:

# itk MPM
<IfModule itk.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 20
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 500
</IfModule>

В /etc/httpd/conf.d/php.conf добавляем

<IfModule itk.c>
LoadModule php5_module modules/libphp5.so
</IfModule>

иначе можно получить ошибку

Syntax error on line * of ***:
Invalid command 'php_admin_value', perhaps misspelled or defined by a module not included in the server configuration

Debian:
В /etc/apache2/apache2.conf добавляем после

<IfModule mpm_prefork_module>...</IfModule>

:

<IfModule mpm_itk_module>
StartServers       5
MinSpareServers    5
MaxSpareServers    20
MaxClients        50
MaxRequestsPerChild   500
</IfModule>

В mpm-itk есть возможность ограничить колличество соединений для одного виртуалхоста параметром MaxClientsVHost (по аналогии с MaxClients для всего сервера) и приоритет выполнения процессов NiceValue (диапазон от -20 наивысший до 19 наименьший).

5. Перезагружаем апач:
Centos

service httpd restart

Debian

/etc/init.d/apache2 restart

FreeBSD

/usr/local/etc/rc.d/apache22 restart

6. Не забываем сменить владельца файлов/папок www-data (или www или apache) на пользователя (так же сессии в папках /var/www/имя_пользователя/data/mod-tmp и сама папка mod-tmp), выставить права доступа на файлы (644) и папки (755)

7. Для ispmanager правим конфиг /usr/local/ispmgr/etc/ispmgr.conf добавив в начало

Option ApacheMPM 

Проверяем и при наличии удаляем строки

ApacheUid  33
ApacheGid  33

В centos меняем строчку

ApacheProcName httpd

на

ApacheProcName httpd.itk

Далее перезагружаем панель

killall ispmgr

8. Снова открываем сайт.ру/ip.php и видим результат:

uid=501(имя_пользователя) gid=503(имя_пользователя) groups=503(имя_группы),501(mgrsecure)

Профит!!!

Update 1:
В связи с тем, что владелец репозитория CentALT отключил его (по своим причинам) владельцам Centos и в частности 5й версии нужно использовать другой репозиторий Webtatic (для 6й httpd-itk есть в репозитории Epel).

пункт 2. Добавляем репозиторий:
Centos 5

rpm -Uvh //mirror.webtatic.com/yum/centos/5/latest.rpm

Centos 6

#Epel предпочтительнее
rpm --import //mirror.yandex.ru/epel/RPM-GPG-KEY-EPEL-6
#Webtatic
rpm -Uvh //mirror.webtatic.com/yum/el6/latest.rpm
#согласно своей версии
#узнать можно командой
#getconf LONG_BIT
#32 битная
rpm -ihv //mirror.yandex.ru/epel/6/i386/epel-release-6-8.noarch.rpm
#64 битная
rpm -ihv //mirror.yandex.ru/epel/6/x86_64/epel-release-6-8.noarch.rpm

3 пункт: Устанавливаем.
Centos 5

yum install --enablerepo=webtatic httpd-itk

Centos 6 из Epel

yum install httpd-itk

Centos 6 из Webtatic

yum install --enablerepo=webtatic httpd-itk

Остальные пункты те же. ;-)

2 комментария

Аватар

anatolt on 12.11.2017 at 12:51.

Было бы шикарно, если бы вы написали чистую статью без всяких UPВ для 2017 и только для centos

Ответить

admin

admin on 24.11.2017 at 09:25.

ок, сделаю ;-)

Ответить

Скажите свое мнение

ваш email не публикуется. обязательно *

;-) :yawn: :whew: :toivo: :tmi: :time: :thinking: :talking: :sweating: :swear: :sun: :star: :smoke: :smirk: :sleepy: :skype: :shock: :shake: :rofl: :rain: :punch: :puke: :poolparty: :pizza: :phone: :party: :oops: :nod: :no: :ninja: :neutral: :nerd: :music: :muscle: :mrgreen: :movie: :mooning: :mmm: :middlefinger: :makeup: :mail: :mad: :lol: :lipssealed: :kiss: :itwashtme: :inlove: :idea: :hi: :heidy: :heart: :headbang: :happy: :handshake: :giggle: :fubar: :flower: :evilgrin: :emo: :dull: :drunk: :drink: :doh: :devil: :dance: :cry: :cool: :coffie: :clapping: :cash: :call: :cake: :bug: :brokenheart: :bow: :blush: :beer: :bear: :bandit: :arrow: :angry: :angel: :^) :???: :?: :-| :-o :-P :-D :-) :-( :!:

 

*

code

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.