Настройка аутентификации Apache в Ubuntu 16.04
Ubuntu | Комментировать запись
Почти на каждом сайте есть разделы, доступ к которым необходимо заблокировать. Обычно веб-приложения предоставляют собственные средства аутентификации, но если такой вариант по какой-либо причине не подходит, для ограничения доступа можно использовать сам веб-сервер.
Данное руководство поможет настроить аутентификацию Apache на сервере Ubuntu 16.04.
Требования
- Предварительно настроенный сервер Ubuntu 16.04.
- Пользователь с доступом к команде sudo (все инструкции можно найти здесь).
- Веб-сервер Apache2 (чтобы установить его, следуйте соответствующему разделу этого мануала).
- Защита SSL. Если у вас есть доменное имя, вы можете получить бесплатный SSL-сертификат от Let’s Encrypt. Если у вас нет зарегистрированного домена, вы можете создать самоподписанный сертификат.
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: .htaccess, Apache, Ubuntu 16.04