zaLinux.ru

Как настроить аутентификацию по паролю с Apache в Debian, Ubuntu и производных


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

В этом руководстве вы узнаете, как защитить паролем ресурсы на веб-сервере Apache, работающем в Debian или Ubuntu, чтобы обеспечить вашему серверу дополнительную безопасность. Данная инструкция также применима к производным этих дистрибутивов, в том числе к Linux Mint и Kali Linux.

Если вы хотите настроить базовую аутентификацию на Apache в Windows, то смотрите статью «Как защитить папку Apache паролем в Windows».

Предполагается, что вы уже установили веб-сервер Apache, если нет, то смотрите инструкции:

Также крайне желательно, чтобы вы использовали HTTPS протокол, который делает невозможным перехвату логина и пароль.

Также нам потребуются инструменты из пакета apache2-utils:

sudo apt update
sudo apt install apache2-utils

Чем различаются HTTP Basic и Digest аутентификации

HTTP Basic и Digest аутентификации предназначены для контроля доступа на уровне веб-сервера. Если при попытке открыть веб-страницу или войти в настройки роутера вы видите такое окно:

Для конечного пользователя Basic и Digest выглядят одинаково. С технической точки зрения они различаются тем, что при Basic аутентификации пароль передаётся в открытом виде, а при Digest пароль зашифрован. Но официальная документация Apache рекомендует не полагаться на шифрование Digest, поскольку оно слишком слабое, а вместо этого использовать Basic аутентификацию в паре с HTTPS, чтобы невозможно было перехватить логин и пароль.

Как включить HTTP Basic аутентификацию в Apache (Kali Linux, Ubuntu, Debian, Linux Mint)

Для начала нужно включить поддержку файлов .htaccess, чтобы веб-сервер использовал настройки из этих файлов — по умолчанию это отключено.

Откройте файл /etc/apache2/apache2.conf

sudo gedit /etc/apache2/apache2.conf

Найдите группу строк:

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>

и замените её на:

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride All
	Require all granted
</Directory>

Сохраните и закройте файл.

Перезапустим веб-сервер.

sudo systemctl restart apache2.service

Создайте папку, где будут защищённые паролем файлы:

sudo mkdir /var/www/html/basic-protected

С помощью утилиты htpasswd мы создадим файл с именем пользователя и хешем пароля. Если указана опция -c, то старый файл будет удалён, а новый создан. Утилита htpasswd присутствует и в Apache для Windows, но нужно указать полный путь до неё.

Общий вид команды:

sudo htpasswd -c -B /ПУТЬ/ДО/ФАЙЛА/.htpasswd ПОЛЬЗОВАТЕЛЬ

Пример:

sudo htpasswd -c -B /etc/apache2/.htpasswd mial

Опция -B означает использовать для шифрования пароля bcrypt. В настоящее время это считается очень безопасным. Для наших тестов это безразлично, но для реальной защиты папки или сайта паролем рекомендуется выполнять показанные выше команды с опцией -B. В дополнении к этой опции вы можете использовать флаг -C со значением от 4 до 17. Он устанавливает время вычисления, используемое для алгоритма bcrypt (чем выше, тем безопаснее, но медленнее). Значением по умолчанию является 5.


Если файл .htpasswd уже существует, то для добавления ещё одного пользователя, без удаления старых, используйте эту же команду, но без опции -c:

sudo htpasswd -B /etc/apache2/.htpasswd user1

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


Конечно же файл .htpasswd рекомендуется хранить в директориях, не доступных для постороннего доступа (например, /etc/apache2/.htpasswd). Особенно не нужно его хранить в папках веб-сервера вместе с файлами сайтов. Но иногда веб-мастер в силу простоты или невозможности сохранить файл где-либо ещё (на виртуальных хостингах, например) хранит этот файл прямо вместе с файлами сайтов.

Посмотрим содержимое файла .htpasswd:

cat /etc/apache2/.htpasswd

У меня это:

mial:$2y$05$xq4u60Y/nruX65hCk9kY1.n8sZ/E3/blHLXSL4GIdMsb2NPEFO2xG
user1:$2y$05$Z1Rb4AhtksDLgMt.weXo..28NGNDbs5nTIyViMyUG1tXbWVQrlxDy

Теперь создадим файл .htaccess:

sudo gedit /var/www/html/basic-protected/.htaccess

И скопируем в него:

AuthName "For registered members only"
AuthType Basic
Require valid-user
AuthUserFile /etc/apache2/.htpasswd

Откройте в веб-браузере адрес http://localhost/basic-protected/ - вы должны увидеть форму для ввода имени пользователя и пароля.

Опция -B означает использовать для шифрования пароля bcrypt. В настоящее время это считается очень безопасным. Для наших тестов это безразлично, но для реальной защиты папки или сайта паролем рекомендуется выполнять показанные выше команды с опцией -B. В дополнении к этой опции вы можете использовать флаг -C со значением от 4 до 17. Он устанавливает время вычисления, используемое для алгоритма bcrypt (чем выше, тем безопаснее, но медленнее). Значением по умолчанию является 5.


Как включить HTTP Digest аутентификацию в Apache (Kali Linux, Ubuntu, Debian, Linux Mint)

По умолчанию модуль Digest аутентификации отключён, включим его:

sudo a2enmod auth_digest

Если вы ещё этого не сделали, включите поддержку файлов .htaccess, чтобы веб-сервер использовал настройки из этих файлов — по умолчанию это отключено.

Откройте файл /etc/apache2/apache2.conf:

sudo gedit /etc/apache2/apache2.conf

Найдите группу строк:

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>

и замените её на:

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride All
	Require all granted
</Directory>

Сохраните и закройте файл.

Перезапустим веб-сервер.

sudo systemctl restart apache2.service

Создайте папку, где будут защищённые паролем файлы:

sudo mkdir /var/www/html/digest-protected

Для генерации паролей нужно использовать команду htdigest. Если указать опцию -c, то будет создан новый файл, а старый удалён.

Общий формат команды:

sudo htdigest -c /etc/apache2/.digest_pw REALM ПОЛЬЗОВАТЕЛЬ

REALM — это область применения. Она соответствует директиве AuthName в файле .htaccess. То есть можно для одного пользователя установить разные пароли, изменяя значения REALM. В разных директивах можно менять значение AuthName в файле .htaccess и в зависимости от этого значения будет подходить тот или иной пароль.

Примеры команд:

sudo htdigest -c /etc/apache2/.digest_pw USERS mial
sudo htdigest /etc/apache2/.digest_pw USERS user1

Посмотрим содержимое файла .htpasswd:

cat /etc/apache2/.digest_pw

Пример содержимого файла:

mial:USERS:48e54f80673b884a8d6f23f48aa2ade3
user1:USERS:8033e1980bcfb694719ae72793c792ec

Теперь создадим .htaccess:

sudo gedit /var/www/html/digest-protected/.htaccess

И скопируем в него следующее:

AuthName "USERS"
AuthType Digest
Require valid-user
AuthUserFile /etc/apache2/.digest_pw
AuthDigestDomain /

Отроем в веб-браузере адрес http://localhost/digest-protected/ и убедимся, что теперь для доступа к странице необходим пароль.

Аутентификация Basic и Digest в настоящее время считаются слабыми. Если вам нужно использовать какую-то из них, то рекомендуется Basic в паре с HTTPS, чтобы невозможно было перехватить пароль, поскольку хотя Digest и не пересылает пароль в открытом виде, он очень быстр для брут-форса.


Рекомендуемые статьи:

Оставить комментарий

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