apache-itk-mpm и виртуальный хостинг

Итак, рано или поздно возникает задача в духе: «А как бы нам организовать хостинг нескольких клиентов с их сайтами так чтобы они не имели друг к другу доступа и не было проблем с доступом к файлам через web/ftp/ssh?». Тут уже обычный стандартный apache не справляется и нужно городить некую более сложную конфигурацию. К счастью, задача эта не уникальна и поэтому давным давно есть готовые решения. Одним из них есть модификация apache2 под названием apache-itk-mpm. Он позволяет запускать от имени определенного в конфигах системного пользователя некий виртуалхост апача. Тоесть получаем чтото в духе некоего изолированного контейнера для нужного пользователя или ряда оных. Туманно объяснил, но по конфигам это более понятно. Итак, поехали!

Создаем пользователя по образу и подобию:

16:32 root@mail [/root]#cat /etc/passwd |grep pau
pauser:*:1982:1982:pauser:/htdocs/www/pa.domain.com.ua:/usr/sbin/nologin
16:32 root@mail [/root]#

Самый обычный apache22 у меня уже был установлен, поэтому мне требовалось доустановить порт apache-itk-mpm

root@black:~# cd /usr/ports/www/apache22-itk-mpm/ && make install clean

Ну и потом для каждого виртуалхоста клепаем вот такую запись в /usr/local/etc/apache22/extra/httpd-vhosts.conf

<VirtualHost *:80>
        ServerAdmin support@domain.com.ua
        DocumentRoot /htdocs/www/pa.domain.com.ua/public_html
        ServerName pa.domain.com.ua
        <IfModule peruser.c>
                ServerEnvironment pauser
        </IfModule>
        <IfModule itk.c>
                AssignUserID pauser pauser
                MaxClientsVHost 150
                NiceValue 10
        </IfModule>
        <Directory /htdocs/www/pa.domain.com.ua/public_html>
                AllowOverride All
                Options MultiViews -Indexes SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS PROPFIND>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS PROPFIND>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
        ErrorLog /htdocs/www/pa.domain.com.ua/httpd_logs/pa.domain.com.ua-error_log
        CustomLog /htdocs/www/pa.domain.com.ua/httpd_logs/pa.domain.com.ua-access_log common
</VirtualHost>

Для остальных виртуалхостов соответственно их записи в этот же конфиг.
Перегружаем apache22

root@black:~# service apache22 restart

Ну и все должно работать без проблем. Для теста попробуйте сделать Upload какогото файлика через web-форму данного виртуалхоста. На файловую систему этот файлик будет сохранен от имени системного юзера прописаного в виртуалхосте.

Удачи!

  1. Комментов пока нет

  1. Трэкбэков пока нет.

Why ask?