Настройка HTTP-авториазции (тип авторизации BASIC-AUTH) для WEB-серверов Apache и Nginx


Администрирование операционных систем на базе Linux (Debian/Ubuntu и Centos/RedHat)
apache auth_basic auth_basic_user_file authtype basic basic fastcgi htpasswd nginx password ubuntu web тип авторизации
 
 

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


(последние правки 3 недели, 5 дней)

Такой тип авторизации вы довольно часто можете видеть на разного рода активном оборудовании. В общем виде представляет собой окно для ввода логина и пароля которое генерируется браузером, а результат передается web-серверу который принимает решение о том разрешать доступ к системе или нет. Большинство web приложений имеет свои встроенные методы авторизации с поддержкой баз данных, групп пользователей и многое другое, но basic-авторизация все еще не сдает свои позиции и все еще активно используется. Сегодня мы обсудим как настроить BASIC-авторизацию на web-серверах Apache и Nginx и в каких случаях ее вообще стоит использовать.

Как я уже сказал basic-авторизация в современных web-проектах практически не используется и даже в роутерах на смену минималистическим интерфейсам приходят полноценные web 2.0 панели управления, но мы все еще активно используем HTTP-авторизацию в том случае когда нам необходимо скрыть сам факт использования определенного программного обеспечения, а лишать себя возможности простого web-доступа мы не хотим и например, мы хотим оставить простой доступ к web-приложению сомнительной лицензионной чистоты без использования VPN, но при этом скрыть факт его использования от посторонних.

Как мы все наверное знаем, в современном Web индексируется абсолютно все и даже закрытое при помощи robots.txt, а Google при правильно сформированным поисковым запросам может выдать нам адреса потенциально уязвимых web-приложений и это еще вершина адреса, так как сторонние поисковые боты занимаются поиском потенциально уязвимых web-приложений для применения к ним эксплойтов в автоматизированном режиме и если вы случайно забыли поставить свежий патч на какой-нибудь phpMyAdmin при наличии у него критических уязвимостей, то с высокой долей вероятности вас уже хакнули.

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

Боты постоянно сканируют WEB в поисках потенциально уязвимых приложений

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

Защита WEB-приложений на сервере под управлением APACHE

Прежде всего обратите внимание на то, что BASIC-авторизация оперирует специальным форматом файла хранящим логин и пароль пользователя в хэшированном виде:

fred:$apr1$nazEEKQM$cngsCXl95SjY0mDE4CC1E1

Естественно, что в уме хэш пароля вы посчитать не сможете и для этого в Ubuntu Linux существует специальная утилита которая автоматизирует создание .htpasswd-файлов (хотя на деле вы можете назвать этот файл как вам угодно и .htpasswd, это просто устоявшееся название).

# apt-get install apache2-utils

Использование файлов .htaccess

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

$ htpasswd -c /tmp/.htpasswd fred
New password: 
Re-type new password: 
Adding password for user fred

Самый простой способ использовать BASIC-авторизацию, это использовать .haccess файлы и это наверное единственный способ вообще задействовать HTTP-авторизацию на шаред-хостингах, для использования http-авторизации создайте файл следующего содержания:

Authtype Basic
AuthName "STOP!!!"
AuthUserFile /var/www/html/.htpasswd
Require valid-user

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

Получить доступ к файлу .htpasswd из web нельзя

Но, самое главное, что вы должны сделать для использования .htaccess-афйлов, это разрешить для корневого каталога вашего проекта переопределение параметров apache из этих самых .haccess-файлов:

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

За разрешение переопределения параметров отвечает параметр конфигурации: AllowOverride All

Вариант с использованием .htaccess-файлов и хранением файла с хэшем пароля в корне вашего web-проекта на самом деле не самая лучшая идея и разумнее хранить файл с логинами и хэшем пароля отдельно, например в каталоге /etc/apache2/ и внести блок basic-авторизации напрямую в конфигурационный файл.

Правка конфигурационного файла Apache для активации basic-авторизации

Как вы наверное поняли, файлы .hpasswd просто переопределяют некоторые параметры конфигурации web-сервера apache и соответственно эти блоки basic-авторизации мы можем просто вынести в конфигурационный файл.

<Directory /var/www/html/>
        AllowOverride All
        Authtype Basic
        AuthName "STOP!!!"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
</Directory>

Эффект получится аналогичный использованию .htaccess-файлов.

Базовая авторизация в браузере GoogleChrome

Защита WEB-приложений на сервере под управлением Nginx

В Nginx, как я уже неоднократно говорил и еще наверное раз 100 скажу, нет файлов .htaccess и все ваши опции запуска web-приложений необходимо описывать в конфигурационных файлах, поэтому и вариант добавления опций базовой авторизации будет только один.

server {
    listen         8001 default_server;
    server_name    185.173.92.119;
    root           /var/www/v1/;
    index          index.php;

  location ~* \.php$ {
    auth_basic           "STOP!!!";
    auth_basic_user_file /etc/nginx/.htpasswd;
    fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
  }
}

Как вы наверное поняли используется аналогичный подход как и в случае с Apache и за базовую авторизацию в Nginx отвечают два параметра:

auth_basic           "STOP!!!";
auth_basic_user_file /etc/nginx/.htpasswd;

Для применения изменений в конфигурации вам потребуется выполнить перезагрузку конфигурации Nginx при помощи команды:

# /etc/init.d/nginx reload

Надеюсь, что эта небольшая статья была вам полезна и вы поняли как можно просто и достаточно эффективно установить базовую авторизацию на ваши web-приложения.

Моя официальная страница на FaceBook
Мой микроблог в твиттер

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


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .