Как настроить аутентификацию по паролю с помощью Apache в Ubuntu 14.04
Введение
При настройке веб-сервера часто есть разделы сайта, к которым вы хотите ограничить доступ. Веб-приложения часто предоставляют свои собственные методы аутентификации и авторизации, но сам веб-сервер может использоваться для ограничения доступа, если они неадекватны или недоступны.
В этом руководстве мы покажем, как защитить паролем активы на веб-сервере Apache, работающем на Ubuntu 14.04.
Предпосылки
Для начала вам потребуется доступ к серверной среде Ubuntu 14.04. Вам понадобится пользователь без полномочий root с привилегиями sudo
для выполнения административных задач. Чтобы узнать, как создать такого пользователя, следуйте нашему руководству по первоначальной настройке сервера Ubuntu 14.04.
Установите пакет утилит Apache
Чтобы создать файл, в котором будут храниться пароли, необходимые для доступа к нашему контенту с ограниченным доступом, мы будем использовать утилиту под названием htpasswd
. Его можно найти в пакете apache2-utils
в репозиториях Ubuntu.
Обновите локальный кэш пакетов и установите пакет, введя эту команду. Мы воспользуемся этой возможностью, чтобы также захватить сервер Apache2, если он еще не установлен на сервере:
- sudo apt-get update
- sudo apt-get install apache2 apache2-utils
Создайте файл паролей
Теперь у нас есть доступ к команде htpasswd
. Мы можем использовать это для создания файла паролей, который Apache может использовать для аутентификации пользователей. Для этой цели мы создадим скрытый файл с именем .htpasswd
в нашем каталоге конфигурации /etc/apache2
.
При первом использовании этой утилиты нам нужно добавить параметр -c
для создания указанного файла. Мы указываем имя пользователя (в данном примере sammy
) в конце команды для создания новой записи в файле:
- sudo htpasswd -c /etc/apache2/.htpasswd sammy
Вам будет предложено ввести и подтвердить пароль для пользователя.
Оставьте аргумент -c
для любых дополнительных пользователей, которых вы хотите добавить:
- sudo htpasswd /etc/apache2/.htpasswd another_user
Если мы просмотрим содержимое файла, мы увидим имя пользователя и зашифрованный пароль для каждой записи:
- cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Настроить аутентификацию по паролю Apache
Теперь, когда у нас есть файл с нашими пользователями и паролями в формате, который может прочитать Apache, нам нужно настроить Apache для проверки этого файла перед обслуживанием нашего защищенного контента. Мы можем сделать это двумя разными способами.
Первый вариант — отредактировать конфигурацию Apache и добавить нашу защиту паролем в файл виртуального хоста. Как правило, это повышает производительность, поскольку позволяет избежать затрат на чтение распределенных файлов конфигурации. Если у вас есть этот вариант, этот метод рекомендуется.
Если у вас нет возможности изменить файл виртуального хоста (или если вы уже используете файлы .htaccess для других целей), вы можете ограничить доступ с помощью файла
.htaccess. Apache использует файлы
.htaccess\\, чтобы разрешить установку определенных элементов конфигурации в файле в каталоге содержимого. Недостатком является то, что Apache должен повторно читать эти файлы при каждом запросе, который включает каталог, что может повлиять на производительность.
Выберите вариант, который лучше всего соответствует вашим потребностям ниже.
Настройка контроля доступа в определении виртуального хоста
Начните с открытия файла виртуального хоста, к которому вы хотите добавить ограничение. В нашем примере мы будем использовать файл 000-default.conf
, который содержит виртуальный хост по умолчанию, установленный через пакет apache Ubuntu:
- 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>
Аутентификация выполняется для каждого каталога. Чтобы настроить аутентификацию, вам нужно указать каталог, который вы хотите ограничить, с помощью блока
. В нашем примере мы ограничим весь корень документа, но вы можете изменить этот список, чтобы указать только конкретный каталог в веб-пространстве:
<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
, чтобы указать Apache на созданный нами файл паролей. Наконец, нам потребуется valid-user
для доступа к этому ресурсу, что означает, что любой, кто может подтвердить свою личность с помощью пароля, будет допущен в:
<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>
Сохраните и закройте файл, когда закончите. Перезапустите Apache, чтобы применить политику паролей:
- sudo service apache2 restart
Указанный вами каталог теперь должен быть защищен паролем.
Настройка контроля доступа с помощью файлов .htaccess
Если вы хотите настроить защиту паролем с помощью файлов .htaccess
, вам следует начать с редактирования основного файла конфигурации Apache, чтобы разрешить файлы .htaccess
:
- sudo nano /etc/apache2/apache2.conf
Найдите блок
для каталога /var/www
, в котором находится корень документа. Включите обработку .htaccess
, изменив директиву AllowOverride
в этом блоке с \None на \All:
. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .
Сохраните и закройте файл, когда закончите.
Затем нам нужно добавить файл .htaccess
в каталог, который мы хотим ограничить. В нашей демонстрации мы ограничим весь корень документа (весь веб-сайт), который находится в /var/www/html
, но вы можете поместить этот файл в любой каталог, доступ к которому вы хотите ограничить. :
- sudo nano /var/www/html/.htaccess
В этом файле укажите, что мы хотим настроить аутентификацию Basic
. Для AuthName
выберите имя области, которое будет отображаться пользователю при запросе учетных данных. Используйте директиву AuthUserFile
, чтобы указать Apache на созданный нами файл паролей. Наконец, нам потребуется valid-user
для доступа к этому ресурсу, что означает, что любой, кто может подтвердить свою личность с помощью пароля, будет допущен в:
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Сохраните и закройте файл. Перезапустите веб-сервер, чтобы защитить паролем весь контент в каталоге или ниже с файлом .htaccess
:
- sudo service apache2 restart
Подтвердите аутентификацию пароля
Чтобы убедиться, что ваш контент защищен, попробуйте получить доступ к контенту с ограниченным доступом в веб-браузере. Вам должно быть представлено приглашение имени пользователя и пароля, которое выглядит следующим образом:
Если вы введете правильные учетные данные, вам будет разрешен доступ к содержимому. Если вы введете неверные учетные данные или нажмете «Отмена», вы увидите страницу с ошибкой «Неавторизованный доступ»:
Заключение
Теперь у вас должно быть все необходимое для настройки базовой аутентификации для вашего сайта. Имейте в виду, что защита паролем должна сочетаться с шифрованием SSL, чтобы ваши учетные данные не отправлялись на сервер в виде простого текста. Чтобы узнать, как создать самозаверяющий сертификат SSL для использования с Apache, следуйте этому руководству.