Гид по технологиям

Защита веб-директорий Apache с mod_authn_dbd и MySQL на Debian 8

• 5 min read • Серверы • Обновлено 28 Nov 2025
Защита директорий Apache с mod_authn_dbd
Защита директорий Apache с mod_authn_dbd

Для кого эта инструкция

Администраторы Linux/Apache и разработчики, которые хотят управлять учётными записями через SQL вместо плоских htpasswd-файлов. Требуется базовое знание командной строки и прав root.

Ключевая цель

Показать безопасный и повторяемый способ аутентификации пользователей Apache с хранением учётных записей в MySQL/MariaDB, используя модуль mod_authn_dbd.


1 Предварительная заметка

В примере используется виртуальный хост http://www.example.com с конфигурацией в /etc/apache2/sites-available/example.com.vhost и корнем документов /var/www/www.example.com/web. В этой инструкции мы защитим каталог /var/www/example.com/web/protecteddir (URL: http://www.example.com/protecteddir/).

Если на сервере ещё не установлен стек LAMP, эта инструкция покроет только часть, связанную с Apache и базой данных. Остальное настраивайте по своему стандарту.

Важно: конфигурация mod_authn_dbd должна быть включена в файл виртуального хоста, а не в .htaccess.


2 Установка MySQL / MariaDB

Я использую MariaDB (форк MySQL), но вы можете использовать MySQL без изменений в логике.

Установите сервер и клиент:

apt-get -y install mariadb-server mariadb-client

Вас попросят задать пароль для root-пользователя MariaDB:

New password for the MariaDB “root” user: <– yourrootsqlpassword Repeat password for the MariaDB “root” user: <– yourrootsqlpassword

Установите DBD-модуль для MySQL (APR-util DBD):

apt-get install libaprutil1-dbd-mysql

Включите модули Apache, необходимые для работы mod_authn_dbd:

a2enmod dbd  
a2enmod authn_dbd  
authn_socache

Перезапустите Apache:

service apache2 restart

Примечание: если вы используете другую версию ОС или Apache, команды управления сервисом могут отличаться (systemctl вместо service).


3 Конфигурация mod_authn_dbd и создание таблицы пользователей

Официальная документация: http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html

  1. Создайте базу данных и пользователя, который будет использовать Apache для подключения:
mysqladmin -u root -p create examplecomdb
mysql -u root -p
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost' IDENTIFIED BY 'examplecom_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost.localdomain' IDENTIFIED BY 'examplecom_admin_password';
FLUSH PRIVILEGES;

(Замените examplecom_admin_password на надёжный пароль.)

  1. Создайте таблицу для хранения учётных записей:
USE examplecomdb;

create table mysql_auth (
  username varchar(255) not null,
  passwd varchar(255),
  groups varchar(255),
  primary key (username)
);

Вы можете расширить таблицу дополнительными полями, например active для включения/отключения учётной записи.

  1. Добавьте тестового пользователя. Пароль нужно хранить в виде хеша. Для SHA1 можно использовать htpasswd:
htpasswd -bns test  test

Результат будет выглядеть так:

test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

Вставьте хеш в базу:

INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('test', '{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=', 'testgroup');

Затем выйдите из MySQL-консоли:

quit
  1. Добавьте конфигурацию mod_authn_dbd в файл виртуального хоста. Откройте конфигурацию:
nano /etc/apache2/sites-available/example.com.vhost

И в конце файла добавьте (пример):

[...]
 # mod_dbd configuration
DBDriver mysql
DBDParams "dbname=examplecomdb user=examplecom_admin pass=examplecom_admin_password"

DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300


 # mod_authn_core and mod_auth_basic configuration
 # for mod_authn_dbd
 AuthType Basic
 AuthName "My Server"

 # To cache credentials, put socache ahead of dbd here
 AuthBasicProvider socache dbd

 # Also required for caching: tell the cache to cache dbd lookups!
 AuthnCacheProvideFor dbd
 AuthnCacheContext my-server

 # mod_authz_core configuration
 Require valid-user

 # mod_authn_dbd SQL query to authenticate a user
 AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s"

Перезагрузите Apache:

service apache2 reload
  1. Уточнения по запросу SQL
  • Если в таблице есть поле active, ограничьте запрос:
AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s and active = 'yes'"
  • Чтобы разрешить только конкретных пользователей, используйте:
require user jane joe
  • Чтобы разрешить только группы:
require group testgroup

4 Проверка доступа и скриншоты

Откройте в браузере: http://www.example.com/protecteddir/ — появится диалог для ввода имени и пароля. При успешной аутентификации вы попадёте в защищённую директорию.

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

Успешный вход в защищённую директорию.


Полезные советы по безопасности и надёжности

  • Используйте современный хеш паролей. SHA1 устарел для хранения паролей — рассмотрите более стойкие алгоритмы (bcrypt/argon2) и соответствующие инструменты для генерации хешей. Если используете htpasswd, изучите его опции по генерации разных хешей.
  • Доступ к базе данных для Apache ограничьте только нужными привилегиями (SELECT минимально; INSERT/UPDATE/DELETE нужны, только если вы планируете управлять записями из приложения).
  • Храните пароли подключения к БД (DBDParams) вне публичного доступа и с правами только для root.
  • Настройте TLS для сайта, чтобы учётные данные передавались по HTTPS.
  • Логи: не храните хеши и пароли в общих логах. Проверьте политику логирования Apache и MySQL.

Отладка — что делать, если не работает

  • Ошибка 500 после изменений: проверьте синтаксис конфигурации Apache: apachectl configtest или apache2ctl -t.
  • Не удаётся подключиться к MySQL: проверьте DBDParams и права пользователя examplecom_admin. Попробуйте подключиться от имени этого пользователя вручную.
  • Пароли не совпадают: убедитесь, что в таблице хранится хеш в формате, который ожидает mod_authn_dbd ({SHA}…, {MD5}…, префикс зависит от схемы).
  • Кэш аутентификации: если вы включили socache, очистите кэш при проверке изменений или перезагрузите Apache.

Критерии приёмки

  • При переходе на URL защищённой директории появляется окно Basic Auth.
  • Ввод корректных учётных данных (существующий пользователь и правильный пароль) даёт доступ.
  • Некорректные данные или неактивный пользователь — доступ запрещён.
  • Конфигурация не использует .htaccess и находится в файле виртуального хоста.

Чек-листы по ролям

Администратор:

  • Установить MariaDB/MySQL и libaprutil1-dbd-mysql.
  • Создать базу, таблицу и пользователя БД с минимальными правами.
  • Включить модули Apache и перезагрузить службу.

DevOps:

  • Добавить конфигурацию в vhost и настроить AuthDBDUserPWQuery.
  • Настроить caching (socache) при необходимости.
  • Настроить мониторинг ошибок и логов.

Разработчик приложения:

  • Обеспечить админ-интерфейс для управления пользователями (если требуется).
  • Обрабатывать группы и поля active при создании пользователей.

Мини-методология (шаги)

  1. Установить MariaDB/MySQL и DBD-модуль.
  2. Создать БД и таблицу mysql_auth.
  3. Создать пользователя БД для Apache.
  4. Добавить хешированные пароли в таблицу.
  5. Включить модули Apache и добавить конфигурацию в vhost.
  6. Перезагрузить Apache и проверить доступ.

Краткий глоссарий (1 строка каждый)

  • mod_authn_dbd — модуль Apache для аутентификации через базу данных через механизм DBD.
  • DBD — абстракция драйвера базы данных в Apache для подключения к SQL.
  • socache — механизм кэширования аутентификационных данных в Apache.
  • vhost — виртуальный хост Apache (файл конфигурации сайта).
  • htpasswd — утилита для создания/хеширования паролей для HTTP Basic Auth.

Ссылки


Конец — краткое резюме

Приведённая конфигурация переводит хранение пользователей из файлов в базу данных и даёт гибкость SQL-запросов для аутентификации и авторизации. Используйте сильные хеши паролей, ограничьте привилегии БД и применяйте HTTPS для защиты учётных данных в пути.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро