Рейтинг 4.8 из 5 (4 Голоса)

apache ruid2

Часто возникает необходимость организовать обработку запросов веб-сервером от имени различных пользователей и групп, в зависимости от виртуального хоста или даже пути. 

Можно конечно использовать Apache MPM-ITK, который замечательно работает на большинстве популярных платформ, хотя и не отличается высокой производительностью.

Но что делать если нужна производительность? Тут нам на помощь придёт mod_ruid2, который заметно быстрее. В Debian 7 он даже есть в репозитории и легко устанавливается.

Всё написанное далее проверено на Debian 7 с установленным apache2, работающем в режиме apache2-mpm-prefork.

Переходим к установке и настройке. Для начала установим модуль ruid2:

apt-get update 
apt-get install libapache2-mod-ruid2

Включить модуль можно командой

a2enmod ruid2

Если был включен mpm-itk модуль, то его нужно отключить

a2dismod mpm_itk

Теперь нужно проверить в файл /etc/apache2/apache2.conf наличие строк:

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

А в конфигурации виртуальных хостов надо будет добавить строки вида:

<IfModule mpm_prefork_module>
        RMode config
        RUidGid www www
        RGroups www-data
</IfModule>

<IfModule mpm_itk_module>
        AssignUserID www www
</IfModule>

Где www наш пользователь и группа  от имени которых работает один из сайтов, www-data это группа под которой Apache работает по умолчанию.

Более подробно можно прочитать про директивы на Гитхабе:

Также стоит проверить права на файлы и каталоги в наших директориях сайтов.

Права на каталоги: 0750
Права на файлы 0640

Пример создания пользователя www c домашней директорией в папке home

useradd www -b /home -m -U -s /bin/false
passwd www

Если папку создаем вручную, то

mkdir -p -m 750 /home/www
chown -R www:www /home/www

Когда на одном сервере сосуществуют множество пользователей, а все их сайты обслуживаются только одним веб-сервером, возникает проблема разграничения прав при исполнении php-скриптов. Обычно эта проблема решается путем исполнения скриптов через suexec и suphp.

Преимуществом mod_ruid2 является то, что он работает напрямую с mod_php, что обеспечивает более высокую скорость выполнения.

По сравнению с mpm-itk mod_ruid2 позволяет использовать Keep-Alive соединения между браузером и веб-сервером, а при использовании mod_php можно будет использовать устойчивые ("persistent") соединения с MySQL, memcached и т.д.

Для того чтобы узнать от какого пользователя работает сайт можно воспользоваться следующим скриптом:

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

Здесь конечно надо понимать что функция exec является небезопасной и ее желательно потом отключить, внеся в список директивы (disable_functions =) в php.ini.

Результат выполнения скрипта будет примерно такой.

uid=1000(www) gid=1000(www) groups=1000(www),33(www-data)
Просмотров: 3605 Печать Назад
 
 
Рекомендуем по теме...