Настройка аутентификации Apache в Ubuntu 16.04

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

Данное руководство поможет настроить аутентификацию Apache на сервере Ubuntu 16.04.

Требования

1: Установка apache2-utils

Чтобы создать файл для хранения паролей, понадобится утилита htpasswd. Она входит в пакет apache2-utils, который можно найти в репозитории Ubuntu.

Обновите список пакетов и установите этот пакет с помощью следующей команды:

sudo apt-get update
sudo apt-get install apache2-utils

2: Создание файла паролей

Теперь на сервере есть команда htpasswd, которая позволяет создать файл паролей, с помощью которого Apache будет выполнять аутентификацию пользователей. Создайте скрытый файл .htpasswd в каталоге /etc/apache2.

При первом запуске утилите нужен флаг -c, который создаёт необходимый файл. Укажите имя пользователя в конце команды, чтобы создать новую запись в файле:

sudo htpasswd -c /etc/apache2/.htpasswd 8host

При этом будет запрошен пароль текущего пользователя.

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

sudo htpasswd /etc/apache2/.htpasswd user_1

Просмотрите содержимое файла; в нём должны храниться имена пользователей и их зашифрованные пароли.

cat /etc/apache2/.htpasswd
8host:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
user_1:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

3: Настройка аутентификации Apache

Итак, файл паролей готов. Теперь нужно настроить Apache, чтобы веб-сервер проверял этот файл перед обслуживанием закрытого контента. Это можно сделать двумя способами: добавить информацию о файле паролей в виртуальный хост или создать файлы .htaccess в каталогах, содержимое которых нужно защитить. Обычно удобнее использовать виртуальный хост. Но если обычные пользователи системы должны иметь возможность самостоятельно управлять доступом, лучше добавить файлы .htaccess.

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

Настройка аутентификации через виртуальный хост

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

Откройте файл виртуального хоста сайта, доступ к которому нужно ограничить.

Примечание: В данном руководстве используется стандартный файл 000-default.conf, который поставляется вместе с apache.

sudo nano /etc/apache2/sites-enabled/000-default.conf

Этот файл выглядит так (закомментированные строки опущены для удобства):

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Авторизация в Apache настраивается по каталогам. Для этого найдите раздел каталога, к которому нужно ограничить доступ, в блоке <Directory ___>. В данном примере показано, как ограничить доступ к document root (при необходимости укажите другой каталог):

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html">
</Directory>
</VirtualHost>

В блоке этого каталога нужно указать тип аутентификации, в данном случае – Basic. В параметре AuthName укажите имя для заблокированных данных, которое будет отображаться при запросе. С помощью директивы AuthUserFile укажите созданный ранее файл паролей. Установите значение valid-user для директивы Require, чтобы разрешить доступ к контенту только тем зарегистрированным пользователям.

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>

Сохраните и закройте файл.

Проверьте файл на наличие ошибок:

sudo apache2ctl configtest

Команда должна вернуть:

Syntax OK

После этого можно перезапустить веб-сервер. Система systemctl не отображает вывода некоторых команд управления, потому нужно запросить состояние сервера после его перезапуска:

sudo systemctl restart apache2
sudo systemctl status apache2

Теперь пользователь должен предоставить пароль, чтобы просматривать каталог.

Настройка аутентификации с помощью .htaccess

Apache может управлять аутентификацией каталогов с помощью файлов .htaccess. При этом Apache перечитывает каждый такой файл, что, конечно, негативно сказывается на производительности.

Чтобы включить поддержку аутентификации .htaccess, откройте конфигурационный файл Apache:

sudo nano /etc/apache2/apache2.conf

Найдите блок <Directory> для каталога /var/www (document root по умолчанию). Чтобы включить обработку файлов .htaccess, нужно изменить значение директивы AllowOverride с None на All.

. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .

Сохраните и закройте файл.

Затем нужно добавить файл .htaccess в каталог, доступ к которому нужно ограничить. Далее в примере показано, как закрыть доступ к каталогу document root, /var/www/html (то есть ко всему сайту). Чтобы ограничить доступ к другому каталогу, внесите в код соответствующие поправки.

sudo nano /var/www/html/.htaccess

В этом файле нужно указать тип авторизации, в данном случае это Basic. В директиве AuthName укажите название данных или фразу, которые будут отображаться при запросе. В директиве AuthUserFile укажите созданный ранее файл паролей для Apache. Для директивы Require укажите значение valid-user, чтобы открыть доступ к контенту только тем пользователям, которые могут пройти аутентификацию.

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

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

sudo systemctl restart apache2
sudo systemctl status apache2

4: Тестирование аутентификации

Чтобы убедиться, что все каталоги защищены паролем, попробуйте получить доступ к закрытому контенту в веб-браузере. На экране должна появиться форма авторизации, предлагающая ввести имя пользователя и пароль:

Authentication Required
The server requires a username and password. The server says:
Restricted server.
User Name:
Password:

Введите валидные учётные данные, чтобы получить доступ к контенту. Если вы предоставите неправильные учётные данные, сервер вернёт ошибку «Unauthorized».

Заключение

Теперь контент сайта защищён с помощью пароля. Защиту паролем рекомендуется комбинировать с шифрованием SSL, в противном случае учетные данные будут передаваться  на сервер в виде простого текста, а это очень серьёзная уязвимость для безопасности.

Больше информации о настройке Apache можно получить здесь.

Создать виртуальный хост вам поможет мануал «Настройка виртуальных хостов Apache в Ubuntu 16.04».

Чтобы узнать больше о файлах .htaccess, читайте руководство «Использование файла .htaccess».

Tags: , ,

Добавить комментарий