января 18 2009 05:07 пп

Запуск виртуальных хостов Apache2 от разных пользователей

mobitv-failed-security-opens-gaping-hole.JPG

Допустим у вас есть 3 пользователя, и они имеют сайты на вашем сервере, но при стандартном веб сервере apache2 все они имеют привелегии пользователя www-data от которого запущен веб сервер. Допустим, пользователь user1 при помощи простого php скрипта может просмотреть файлы в директории пользователя user2, так же получить доступ к файлам конфигурации сайта и в итоге к паролям от баз данных. Есть несколько способов решения этой пролемы, такие как chroot или jail, или запуск виртуальных хостов от имени разных системных пользователей. Для этого нам потребуетс установить немного модифицированный apache, для операционных систем Debian и Ubuntu он уже включен в официальные репозитории, насчет остальных не знаю, подробнее вы сможете узнать на сайте разработчика по адресу http://mpm-itk.sesse.net В настройке нет ничего трудного и заумет это всего несколько минут.

И так, для начала заменим стандартный 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 от разных пользователей”

  1. XoRe on 19 Янв 2009 at 17:15 #

    Так же могу посоветовать в папке пользователя создать папки 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 — не мог получить доступ к модулям с нужными функциями.

  2. Stepanoff on 19 Янв 2009 at 18:52 #

    Спасибо за полезные советы, возьму на заметку

  3. MrSlim on 21 Янв 2009 at 06:03 #

    Очень полезная статейка, давно искал способ как такое сделать без плясок с бубном. Спасибо 🙂

  4. zheka_gl on 20 Фев 2009 at 21:42 #

    Полезная статья. Только после установки столкнулся с проблемой suexec DOC_ROOT=»/var/www»
    И .htaccess в некоторых сайтах перестал работать. Права проставлены верно, конфигурация виртуальных хостов одинаковая. В одном работает, в другом- нет. Не подскажете, где копать?

  5. Stepanoff on 20 Фев 2009 at 22:12 #

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

  6. zheka_gl on 21 Фев 2009 at 20:18 #

    все проверил, все верно. Сайты работают, но с ошибками. Попробую директорию для suexec сменить.

  7. andrejt on 03 Фев 2010 at 14:09 #

    может быть кто то подскажет, как бы еще и nginx так же от разных пользователей запускать?

  8. Stepanoff on 03 Фев 2010 at 14:11 #

    Для nginx такого не видел, может реализуют в дальнейшем.

  9. ungrep on 28 Дек 2010 at 11:27 #

    Здравствуйте!
    Я начинающий юзер в linux (ламер)!
    У меня на серваке стоит fedora 7 (условия хостера)
    Работают сразу несколько сайтов.

    Как поставить apache2-mpm-itk на федору?

    Заранее всем спс за помощь)

  10. Максим Степанов on 28 Дек 2010 at 11:32 #

    Тут написано про центось, разница небольшая. http://mitka.us/articles/mpm-itk/

  11. ant on 18 Мар 2013 at 20:51 #

    После того как выставил права 4770 на /var/www перестал пускать на сайты «forbidden ….»
    Как эту проблемку можно решить?
    Видел много постов где в конфиге прописано так «AssignUserId www-data site1» ,
    но хочется оставить именно так как у Вас.

  12. Максим Степанов on 18 Мар 2013 at 20:53 #

    Надо выставить права 775 на /var/www, а на директории с сайтами выставить 770 и сменить им владельца на указанного в конфиге апача.

  13. ant on 18 Мар 2013 at 21:06 #

    Спасибо, заработало)

    Еще вопросик, у меня домашние папки лежат /var/www/HOME , с правами 775 на /var/www юзеры залогиненые по ftp смогут вылезти выше выше своей домашней директории, как этого избежать?

  14. Максим Степанов on 18 Мар 2013 at 21:08 #

    Настроить pure ftpd как описано здесь, на линуксе прекрасно работает
    http://sudouser.com/ustanovka-i-nastrojka-pure-ftpd-v-svyazke-s-mysql-na-freebsd.html

  15. Запуск виртуальных хостов Apache2 от разных пользователей | OLDP Consult on 12 Фев 2014 at 03:17 #

    […] Stepanoff on 19 Янв 2009 at 18:52 # […]

Trackback URI | Comments RSS

Leave a Reply

You must be logged in to post a comment.


« | »



Server load average: 0.00, 0.01, 0.00
Server uptime: 358 days, 20:18
Your IP is: 54.162.236.133.