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

Вступление

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

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

Предпосылки

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

Установка пакета Apache Utilities

Чтобы создать файл, который будет хранить пароли, необходимые для доступа к нашему ограниченному контенту, мы будем использовать вызванную утилиту 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

Output

sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

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

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

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

Если у вас нет возможности изменять файл виртуального хоста (или если вы уже используете файлы .htaccess files for other purposes), you can restrict access using an.htaccess file. Apache uses.htaccess`, чтобы разрешить определенные параметры конфигурации в файле в каталоге содержимого. Недостаток заключается в том, что Apache имеет перечитывать эти файлы при каждом запросе, который включает в себя каталог, который может повлиять на производительность.

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

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

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

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

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

/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>

Аутентификация выполняется для каждого каталога. Чтобы настроить аутентификацию, вам нужно настроить таргетинг на каталог, который вы хотите ограничить <Directory ___>блоком. В нашем примере мы ограничим весь корневой каталог документа, но вы можете изменить этот список, чтобы использовать только целевой каталог в веб-пространстве:

/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

    <Directory "/var/www/html">
    </Directory>
</VirtualHost>

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

/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

    <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

Найдите <Directory>блок для /var/wwwкаталога, в котором содержится корень документа. Включите .htaccessобработку, изменив AllowOverrideдирективу внутри этого блока с «Нет» на «Все»:

файл /etc/apache2/apache2.conf
. . .

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

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

Сохраните и закройте файл. Перезапустите веб-сервер для защиты всех содержимого в каталоге или ниже каталога с .htaccessфайлом:

  • sudo service apache2 restart

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

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

Запрос пароля Apache2

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

Неавторизованная ошибка Apache2

Заключение

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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *