18 января 2009 05:07 пп
Запуск виртуальных хостов Apache2 от разных пользователей
Допустим у вас есть 3 пользователя, и они имеют сайты на вашем сервере, но при стандартном веб сервере apache2 все они имеют привелегии пользователя www-data от которого запущен веб сервер. Допустим, пользователь user1 при помощи простого php скрипта может просмотреть файлы в директории пользователя user2, так же получить доступ к файлам конфигурации сайта и в итоге к паролям от баз данных. Есть несколько способов решения этой пролемы, такие как chroot или jail, или запуск виртуальных хостов от имени разных системных пользователей. Для этого нам потребуетс установить немного модифицированный apache, для операционных систем Debian и Ubuntu он уже включен в официальные репозитории, насчет остальных не знаю, подробнее вы сможете узнать на сайте разработчика по адресу
И так, для начала заменим стандартный apache2 на модифицированный apache2-mpm-itk выполнив команду
Код:
apt-get install apache2-mpm-itk
Пакет при установке предложет удалить apache2, не пугайтесь, все настройки останутся неизменными, спокойно соглашайтесь.
Затем добавьте нужных пользолвателей в систему, от их имени будут работать виртуальные хосты нашего веб сервера.
Код:
useradd -s /bin/false -m -d /var/www/site1 -c "website1.ru" site1
Этой командой мы добавили юзера site1 с домашней директорией /var/www/site1 (подразумевается что там и будет распологаться сайт)
По аналогии добавьте других пользователей с домашними директориями в /var/www
Теперь надо подправить права на директории и сменить владельца.
Код:
chown -R site1:site1 /var/www/site1
cd /var/www/
find ./ -type d -exec chmod 4770 {} \;
Затем отредактируем конфигурационные файлы виртуальных хостов как показано в примере ниже, только заменив имена пользователя и его группу на реальные.
Код:
[....]
<IfModule mpm_itk_module>
AssignUserId site1 site1
</IfModule>
</VirtualHost>
Указывать имя и группу надо по порядку, сначала имя пользователя для виртуального хоста, затем группу.
После того как вы отредактировали ваши конфиги надо перезапустить apache
Код:
/etc/init.d/apache2 restart
После этого виртуальные хосты будут работать от пользователей которых вы указали в конфигах.
Удачи в работе!
15 комментариев »
15 комментариев to “Запуск виртуальных хостов Apache2 от разных пользователей”
Leave a Reply
You must be logged in to post a comment.
Так же могу посоветовать в папке пользователя создать папки data, tmp, files.
И настроить папку data — корневой для его сайта.
Это делается директивой:
DocumentRoot «/var/www/site1/data»
Это позволит пользователям сохранять файлы (и иметь к ним доступ из php скриптов), которые нельзя будет скачать с сайта даже в случае глюка скриптов.
Так же могу посоветовать задействовать такие параметры:
# Папка, выше которой php скрипты не полезут
php_admin_value open_basedir «/var/www/site1»
# Корневая папка
php_admin_value doc_root «/var/www/site1»
# Папка для загрузки временных файлов
php_admin_value upload_tmp_dir «/var/www/site1/tmp/»
# Папка для сохранения файлов сессий
php_admin_value session_save_path «/var/www/site1/tmp/»
php_admin_value session.save_path «/var/www/site1/tmp/»
Тогда все файлы будут сохраняться в директории пользователя.
А то php любит сохранять сессии или временные файлы в папках /tmp или /var/tmp.
И ещё, прошу заметить, что параметру open_basedir можно передать несколько путей, разделенных двоеточием.
Это может быть нужно для того, чтобы дать доступ скриптам к каким-то модулям.
Например:
php_admin_value open_basedir «/var/www/site1:/usr/local/share/pear»
Без этого в свое время не хотел запускаться egroupware — не мог получить доступ к модулям с нужными функциями.
Спасибо за полезные советы, возьму на заметку
Очень полезная статейка, давно искал способ как такое сделать без плясок с бубном. Спасибо 🙂
Полезная статья. Только после установки столкнулся с проблемой suexec DOC_ROOT=»/var/www»
И .htaccess в некоторых сайтах перестал работать. Права проставлены верно, конфигурация виртуальных хостов одинаковая. В одном работает, в другом- нет. Не подскажете, где копать?
Проверьте пути до файлов, права, и главное владелец что бы был у файлов тот что указа в модуле виртуального хоста.
все проверил, все верно. Сайты работают, но с ошибками. Попробую директорию для suexec сменить.
может быть кто то подскажет, как бы еще и nginx так же от разных пользователей запускать?
Для nginx такого не видел, может реализуют в дальнейшем.
Здравствуйте!
Я начинающий юзер в linux (ламер)!
У меня на серваке стоит fedora 7 (условия хостера)
Работают сразу несколько сайтов.
Как поставить apache2-mpm-itk на федору?
Заранее всем спс за помощь)
Тут написано про центось, разница небольшая.http://mitka.us/articles/mpm-itk/
После того как выставил права 4770 на /var/www перестал пускать на сайты «forbidden ….»
Как эту проблемку можно решить?
Видел много постов где в конфиге прописано так «AssignUserId www-data site1» ,
но хочется оставить именно так как у Вас.
Надо выставить права 775 на /var/www, а на директории с сайтами выставить 770 и сменить им владельца на указанного в конфиге апача.
Спасибо, заработало)
Еще вопросик, у меня домашние папки лежат /var/www/HOME , с правами 775 на /var/www юзеры залогиненые по ftp смогут вылезти выше выше своей домашней директории, как этого избежать?
Настроить pure ftpd как описано здесь, на линуксе прекрасно работает
http://sudouser.com/ustanovka-i-nastrojka-pure-ftpd-v-svyazke-s-mysql-na-freebsd.html
[…] Stepanoff on 19 Янв 2009 at 18:52 # […]