Виртуальные хосты Apache: безопасная настройка для Debian/Ubuntu

03.10.2016 в 10:09
25131
+210

Всем привет! Данная статья описывает правильную, безопасную настройку виртуальных хостов в Debian.

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

Давайте в качестве примера создадим виртуальный хост "site.com".

Шаг 0 – Создание файла конфигурации виртуального хоста

Скопируем стандартный файл конфигурации в качестве исходника:

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/site.com

Шаг 1 — Права пользователей

Для каждого хоста будет создан отдельный пользователь. Домашние директории при этом будут храниться по пути /var/www/папка_пользователя.

Создаём пользователя site.com с созданием домашней директории в /var/www/. Флаги:
-m — создание папки автоматически;
-U — создание одноименной группы, в которую пользователь будет помещён;
-s — указание шелла, в нашем случае — шелл будет отсутствовать.

useradd site.com -b /var/www/ -m -U -s /bin/false

Задаём пароль пользователя:

passwd site.com

Устанавливаем права на папку пользователя:

chmod 754 /var/www/site.com

Создаём папку для веб-сайта:

mkdir -p -m 754 /var/www/site.com/public_html/

Создаём папку для хранения сессий/загружаемых файлов/логов

mkdir -p -m 777 /var/www/site.com/tmp

Разрешаем удалять папку только владельцу:

chmod +t /var/www/site.com/tmp

Задаём владельца всех вложенных папок

chown -R site.com:site.com /var/www/site.com/

Шаг 2 — Запуск Apache от разных пользователей

Из коробки Apache работает от одного пользователя для всех хостов, то есть злоумышленник, получив доступ к одному сайту может прочитать файлы соседних проектов. Для исправления этого недостатка нужно установить модифицированную версию Apache под названием apache2-mpm-itk. После установки в конфигах виртуальных хостов можно будет указать от какого пользователя и группы должен работать apache для конкретного сайта.

apt-get install apache2-mpm-itk

Пользователь и группа задается строкой в конфиге:

AssignUserId www-data site.com

Здесь в качестве группы мы указываем www-data для того, чтобы из веба нельзя было править файлы нашего проекта, кроме тех, на которых стоят права o+w. При этом нужно запретить консоль у пользователя www-data:

usermod -s /bin/false www-data

Шаг 3 — Отдельный tmp для каждого сайта

Заданием отдельной временной папки для каждого сайта мы предотвращаем инклуд сессий с соседнего сайта. Для этого используем директивы upload_tmp_dir и session.save_path:

php_admin_value upload_tmp_dir "/var/www/site.com/tmp"
php_admin_value session.save_path "/var/www/site.com/tmp"

Шаг 4 — Запрет PHP выходить выше пользовательской домашней директории

Запрет выхода выше директории задаётся директивой open_basedir:

php_admin_value open_basedir "/var/www/site.com/:."

Шаг 5 — Хранение логов в папке пользователя

Файлы для хранения логов ошибок и доступа задаются следующими директивами:

ErrorLog /var/www/site.com/error_log
CustomLog /var/www/site.com/access_log combined

В результате на выходе получаем следующий конфиг:

<VirtualHost *:80>
    ServerName site.com
    ServerAlias www.site.com
    DocumentRoot /var/www/site.com/public_html

    ErrorLog /var/www/site.com/error_log
    CustomLog /var/www/site.com/access_log combined

    AssignUserId site.com site.com

    php_admin_value open_basedir "/var/www/site.com/:."
    php_admin_value upload_tmp_dir "/var/www/site.com/tmp"
    php_admin_value session.save_path "/var/www/site.com/tmp"
</VirtualHost>

Шаг 6 — Завершение настройки

После сохранения конфигурации нужно активировать виртуальный хост:

a2ensite site.com

А затем перечитать конфиги:

/etc/init.d/apache2 reload

Шаг 7 — Проверка работы

Создадим тестовую веб-страницу для виртуального хоста:

vi /var/www/site.com/public_html/index.html

И запишем в него следующий код:

<html>
    <head>
        <title>site.com</title>
    </head>
    <body>
        <h1>site.com</h1>
    </body>
</html>

После направления доменного имени на IP-адрес сервера при обращении к даному адресу в браузере будет открыта созданная нами веб-страничка. Виртуальный хост полностью настроен.

loader
03.10.2016 в 10:09
25131
+210
Комментарии
К этому посту больше нельзя оставлять новые комментарии
Логические задачи с собеседований