MPM (Multi-Processing Module) для веб-сервера Apache

Как известно, Apache работает от одного юзера. Соответственно, php работающий под ним, тоже работает от этого юзера. Отсюда, естественно, вытекают проблемы безопасности и некоторые неурядицы при работе с файлами на сервере из PHP скриптов.
Представим обычную ситуацию, после установки LAMP:
Apache и PHP работают у нас от пользователя 80 из группы 80. А ФТП пользователь у нас 1000:1000.
Получаем такой косяк: пользователь закачивает по ФТП, скажем, картинку. Далее, PHP скрипт должен, допустим, наложить на нее водяной знак.
В итоге получаем проблему. PHP не может изменять этот файл, т.к. он не является его владельцем и не состоит в группе владельца.

Одним из вариантов (не самым лучшим, кстати) будет поменять права на файл на 666 или 777. То есть дать возможность любому пользователю делать что угодно с этим файлом.
Другой, более приемлемый вариант, используемый на хостингах, это дать возможность vhost работать не под пользователем Apache, а под указанным в настройках vhost.
В этом вопросе нам очень поможет модуль Apache apache2-mpm-itk.

Устанавливаем и настраиваем apache2-mpm-itk

Установка и настройка описаны для Ubuntu, но легко можно понять, что где и как для других систем.

1. Ставим модуль:

sudo apt-get install apache2-mpm-itk

2. Настраиваем vhost (например, для сайта example.com):

<VirtualHost *:80 >
ServerName example.com
AssignUserID user1 group1
CustomLog /home/httpd-logs/instrumentom.ru.access.log combined
DocumentRoot /home/server/data/www/example.com
ServerAlias www.example.com
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
</VirtualHost>

Как видно из конфига виртуального хоста, все что нам нужно сделать, это добавить директиву AssignUserID user1 group1, где user1- пользователь фтп, владеющий файлами сайта, а group1 — группа этого пользователя.
Вносим изменения и сохраняем конфиг

3. Перечитываем конфиги сервера

/etc/init.d/apache2 reload

Теги: Web-programing

Комментарии ()