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

Вступление

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

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

Предпосылки

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

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

  • * Пользователь + sudo + на вашем сервере *: Вы можете создать пользователя с привилегиями + sudo +, следуя https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu- 16-04 [Руководство по первоначальной настройке Ubuntu 16.04].

  • * Веб-сервер Apache2 *: если вы еще не настроили его, обратитесь к разделу Apache углубленной статьи https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache. -mysql-php-lamp-stack-on-ubuntu-16-04 [Как установить стек Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 16.04
    ], может помочь вам.

  • * Сайт защищен с помощью SSL *: как вы это настроите, зависит от того, есть ли у вас доменное имя для вашего сайта.

  • * Если у вас есть доменное имя …​ * Самый простой способ защитить ваш сайт - это Let Let Encrypt, который предоставляет бесплатные доверенные сертификаты. Следуйте инструкциям Let’s Encrypt для Apache, чтобы настроить это. ,

  • * Если у вас нет домена …​ * и вы просто используете эту конфигурацию для тестирования или личного использования, вы можете использовать вместо этого самозаверяющий сертификат. Это обеспечивает тот же тип шифрования, но без проверки домена. Следуйте self-подписанного руководства по SSL для Apache, чтобы настроить.

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

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

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

sudo apt-get update
sudo apt-get install apache2-utils

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

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

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

sudo htpasswd -c /etc/apache2/.htpasswd

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

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

sudo htpasswd /etc/apache2/.htpasswd

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

cat /etc/apache2/.htpasswd
Outputsammy:$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:

sudo nano /etc/apache2/sites-enabled/

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

/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



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




 </Directory>
</VirtualHost>

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

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

sudo apache2ctl configtest

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

sudo systemctl restart apache2
sudo systemctl status apache2

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

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

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

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

sudo nano /etc/apache2/apache2.conf

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

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

. . .

<Directory /var/www/>
 Options Indexes FollowSymLinks
 AllowOverride
 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 + и используйте + systemctl status +, чтобы проверить успешность перезапуска:

sudo systemctl restart apache2
sudo systemctl status apache2

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

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

изображение: https: //assets.digitalocean.com/articles/apache_password_1404/password_prompt.png [запрос пароля Apache2]

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

изображение: https: //assets.digitalocean.com/articles/apache_password_1404/unauthorized_error.png [Несанкционированная ошибка Apache2]

Заключение

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

  • Для лучшего понимания основного конфигурационного файла см. Https://www.digitalocean.com/community/tutorials/how-to-configure-the-apache-web-server-on-an-ubuntu-or-debian. -vps [Как настроить веб-сервер Apache в Ubuntu или Debian VPS
    ]

  • Узнайте больше о файлах виртуального хоста в Как настроить Apache Virtual Хосты на Ubuntu 16.04

  • Узнайте о перезаписи URL-адресов, настройке страниц ошибок, таких как сообщение «Несанкционировано» выше, или о включении общих элементов на все ваши страницы с помощью Server Side. Включено в наше руководство https://www.digitalocean.com/community/tutorials/how-to-use. -the-htaccess-file [Как использовать файл .htaccess].

Related