Часто возникает необходимость организовать обработку запросов веб-сервером от имени различных пользователей и групп, в зависимости от виртуального хоста или даже пути.
Можно конечно использовать 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)
Рубрики
-
3D и графика ( 7 )
-
Веб разработка ( 13 )
-
Железо и периферия ( 8 )
-
Портфолио и резюме ( 3 )
-
Сервер на Debian Linux ( 20 )
-
Сисадмину на заметку ( 14 )
-
Тестовая лаборатория ( 10 )
Новые записи
25.03.23 Ошибка 0x00000709 при попытке установить сетевой USB принтер
05.10.19 Добавление сертификата в exim4
18.08.18 Утилиты диагностики системы Linux
02.10.16 Отключение systemd на Debian
Комментарии
- Всё отлично! Спасибо за гайд!
03.03.24 08:01 комментирует: Luidgi Vampa - Добрый день! Спасибо вам за ваши статьи! Подскажите пожалуйста. Как проверить ус...
17.01.24 01:47 комментирует: Олег - Спасибо, проделал на ноутбуке dv5-1040er, скорость реально выросла. Делал на w10...
10.10.23 15:58 комментирует: Евгений - у мене схожа проблема як була у вас... чому ви вирішили ввести 92500000??? дякую...
11.04.23 01:51 комментирует: Володимир