Поиск по сайту:

Как настроить аутентификацию по паролю с помощью Apache в Ubuntu 14.04


Введение

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

В этом руководстве мы покажем, как защитить паролем активы на веб-сервере Apache, работающем на Ubuntu 14.04.

Предпосылки

Для начала вам потребуется доступ к серверной среде Ubuntu 14.04. Вам понадобится пользователь без полномочий root с привилегиями sudo для выполнения административных задач. Чтобы узнать, как создать такого пользователя, следуйте нашему руководству по первоначальной настройке сервера Ubuntu 14.04.

Установите пакет утилит Apache

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

Обновите локальный кэш пакетов и установите пакет, введя эту команду. Мы воспользуемся этой возможностью, чтобы также захватить сервер Apache2, если он еще не установлен на сервере:

  1. sudo apt-get update
  2. sudo apt-get install apache2 apache2-utils

Создайте файл паролей

Теперь у нас есть доступ к команде htpasswd. Мы можем использовать это для создания файла паролей, который Apache может использовать для аутентификации пользователей. Для этой цели мы создадим скрытый файл с именем .htpasswd в нашем каталоге конфигурации /etc/apache2.

При первом использовании этой утилиты нам нужно добавить параметр -c для создания указанного файла. Мы указываем имя пользователя (в данном примере sammy) в конце команды для создания новой записи в файле:

  1. sudo htpasswd -c /etc/apache2/.htpasswd sammy

Вам будет предложено ввести и подтвердить пароль для пользователя.

Оставьте аргумент -c для любых дополнительных пользователей, которых вы хотите добавить:

  1. sudo htpasswd /etc/apache2/.htpasswd another_user

Если мы просмотрим содержимое файла, мы увидим имя пользователя и зашифрованный пароль для каждой записи:

  1. cat /etc/apache2/.htpasswd
Output
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz. another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Настроить аутентификацию по паролю Apache

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

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

Если у вас нет возможности изменить файл виртуального хоста (или если вы уже используете файлы .htaccess для других целей), вы можете ограничить доступ с помощью файла .htaccess. Apache использует файлы .htaccess\\, чтобы разрешить установку определенных элементов конфигурации в файле в каталоге содержимого. Недостатком является то, что Apache должен повторно читать эти файлы при каждом запросе, который включает каталог, что может повлиять на производительность.

Выберите вариант, который лучше всего соответствует вашим потребностям ниже.

Настройка контроля доступа в определении виртуального хоста

Начните с открытия файла виртуального хоста, к которому вы хотите добавить ограничение. В нашем примере мы будем использовать файл 000-default.conf, который содержит виртуальный хост по умолчанию, установленный через пакет apache Ubuntu:

  1. 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, чтобы применить политику паролей:

  1. sudo service apache2 restart

Указанный вами каталог теперь должен быть защищен паролем.

Настройка контроля доступа с помощью файлов .htaccess

Если вы хотите настроить защиту паролем с помощью файлов .htaccess, вам следует начать с редактирования основного файла конфигурации Apache, чтобы разрешить файлы .htaccess:

  1. 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, но вы можете поместить этот файл в любой каталог, доступ к которому вы хотите ограничить. :

  1. 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:

  1. sudo service apache2 restart

Подтвердите аутентификацию пароля

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

Если вы введете правильные учетные данные, вам будет разрешен доступ к содержимому. Если вы введете неверные учетные данные или нажмете «Отмена», вы увидите страницу с ошибкой «Неавторизованный доступ»:

Заключение

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