Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MPM_ITK_ISOLATION Linux / DevOps

Изоляция виртуальных хостов в Apache с MPM ITK: запуск VirtualHost от разных UID

Обновлено: 21.08.2026
  • Взлом одного сайта на сервере приводит к несанкционированному доступу к файлам и базам данных соседних клиентов.
  • Все VirtualHost работают от единого системного пользователя www-data или apache.
  • Сложности с разграничением прав на запись (права 777 в каталогах uploads).

1. Установка модуля MPM ITK

# Debian / Ubuntu
apt-get install -y libapache2-mpm-itk

# Включение модуля
a2enmod mpm_itk
systemctl restart apache2

2. Создание изолированных системных пользователей

useradd -m -d /var/www/site1 -s /usr/sbin/nologin user_site1
useradd -m -d /var/www/site2 -s /usr/sbin/nologin user_site2

chmod 750 /var/www/site1
chmod 750 /var/www/site2

3. Конфигурация VirtualHost с директивой AssignUserID

Отредактируйте файл сайта /etc/apache2/sites-available/site1.conf:

<VirtualHost *:80>
    ServerName site1.itstm.ru
    DocumentRoot /var/www/site1/public_html

    # Запуск процессов обработки запросов от индивидуального пользователя и группы
    <IfModule mpm_itk_module>
        AssignUserID user_site1 user_site1
        LimitUIDRange 1000 2000
        LimitGIDRange 1000 2000
    </IfModule>

    <Directory /var/www/site1/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/www/site1/logs/error.log
    CustomLog /var/www/site1/logs/access.log combined
</VirtualHost>

4. Валидация и перезапуск Apache

apachectl configtest && systemctl reload apache2
💡 Практика специалистов: Не используйте устаревший suPHP или mod_ruid2. Если требуется изоляция хостов с максимальной производительностью, связывайте Nginx с несколькими независимыми пулами PHP-FPM, запущенными от разных системных пользователей.

Частые вопросы (FAQ)

В чем недостаток производительности MPM ITK по сравнению с MPM Event?

MPM ITK выполняет fork() и setuid() для каждого входящего клиентского запроса. Это снижает максимальный RPS сервера, поэтому перед Apache с MPM ITK обязательно должен стоять Nginx для статики и кэширования.

Может ли скрипт на site1 прочитать конфигурационный файл site2?

Нет. Так как процесс site1 выполняется с UID 'user_site1', стандартные права файловой системы Linux (0750) полностью блокируют доступ к каталогу /var/www/site2.

Полезные материалы
Рекомендуем