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

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


Введение

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

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

Предпосылки

Для выполнения этого руководства вам потребуется доступ к серверу Ubuntu 16.04.

Кроме того, вам потребуется следующее, прежде чем вы сможете начать:

  • Пользователь sudo на вашем сервере: вы можете создать пользователя с правами sudo, следуя руководству по первоначальной настройке сервера Ubuntu 16.04.
  • Веб-сервер Apache2: если вы еще не настроили его, раздел Apache подробной статьи Как установить стек Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 16.04. , может направить вас.
  • Сайт, защищенный с помощью SSL: то, как вы его настроите, зависит от того, есть ли у вас доменное имя для вашего сайта.
    • Если у вас есть доменное имя… самый простой способ защитить свой сайт — использовать Let’s Encrypt, который предоставляет бесплатные доверенные сертификаты. Чтобы настроить это, следуйте инструкциям Let’s Encrypt для Apache.
    • Если у вас нет домена... и вы используете эту конфигурацию только для тестирования или личного использования, вместо этого вы можете использовать самозаверяющий сертификат. Это обеспечивает тот же тип шифрования, но без проверки домена. Следуйте руководству по самоподписанному SSL для Apache, чтобы настроить его.

    Когда все это будет на месте, войдите на свой сервер как пользователь sudo и продолжите ниже.

    Шаг 1 — Установка пакета утилит Apache

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

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

    Шаг 2 — Создание файла паролей

    Теперь у нас есть доступ к команде 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$.0CAabqX$rb8lueIORA/p8UzGPYtGs/ another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

    Шаг 3 — Настройка аутентификации по паролю Apache

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

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

    Вариант 1. Настройка контроля доступа в определении виртуального хоста (предпочтительно)

    Первый вариант — отредактировать конфигурацию 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>
    

    Сохраните и закройте файл, когда закончите.

    Перед перезапуском веб-сервера вы можете проверить конфигурацию с помощью следующей команды:

    1. sudo apache2ctl configtest

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

    1. sudo systemctl restart apache2
    2. sudo systemctl status apache2

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

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

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

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

    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, и используйте systemctl status, чтобы проверить успешность перезапуска:

    1. sudo systemctl restart apache2
    2. sudo systemctl status apache2

    Шаг 4 — Подтверждение аутентификации по паролю

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

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

    Заключение

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

    • Для лучшего понимания работы с основным файлом конфигурации см. Как настроить веб-сервер Apache на Ubuntu или Debian VPS.
    • Узнайте больше о файлах виртуального хоста в разделе Как настроить виртуальные хосты Apache в Ubuntu 16.04.
    • Узнайте о переписывании URL-адресов, настройке страниц ошибок, таких как сообщение «Не авторизовано» выше, или о включении общих элементов на все ваши страницы с включением на стороне сервера в нашем руководстве «Как использовать файл .htaccess» .