Если нужно ограничить доступ к определённому каталогу web-сайта по логину и паролю, причём эти данные нужно хранить в базе данных MySQL, можно использовать модуль web-сервера Apache mod_auth_mysql. В этой статье я покажу простой пример настройки данного модуля, но, я решил немного улучшить защиту, добавив дополнительно к логину и паролю ограничение доступа по IP-адресу, диапазону IP-адресов, а также будет осуществляться проверка на активность/заблокированность пользователя.
Создание таблицы пользователей, добавление функции:
Для начала нужно создать базу данных ползователей (или использовать существующую, в примере используется база test). Я не буду подробно описывать работу с базой данных MySQL, думаю, те кому нужен данный модуль авторизации — способны изучить документацию к базе данных. Итак, создаём таблицу с пользователями, ввести в консоли базы MySQL (mysql test):
Пароль будет храниться в зашифрованном виде. Я использовал функцию unix_md5_crypt() из модуля Crypt::PasswdMD5, язык программирования Perl. Структура таблицы простая: имя пользователя, пароль в зашифрованном виде, признак активности (1 или 0), неактивных аторизировать не будем, и ограничение по IP. Если поле ip_range будет пустым, то проверка IP-адреса не будет осуществляться. Ограничения по IP записываются в следующем формате: если ограничений несколько, они разделяются запятой (без пробелов), если нужно ограничить доступ с диапазона IP-адресов, то диапазон записывается через чёрточку (без пробелов). Пример: «192.168.0.1,10.0.0.0-10.255.255.255,172.16.0.1″. Проверить валидность данного поля можно следующим регулярным выражением:
Ограничения по IP осуществляются написанной мной хранимой функцией MySQL, ввести с консоли MySQL (mysql test):
Настройка web-сервера:
Настраиваем httpd.conf, нужно добавить модуль и ограничить доступ к каталогу (в случае с тестируемой системой, Fedora 13, был установлен пакет mod_auth_mysql, и модуль автоматически прописался файлом конфигурации /etc/httpd/conf.d/auth_mysql.conf):
Тут нужно скорректировать базу данных, если нужно (используется test), ну и ввести нужные имя пользователя с паролем (используется login и password).
Заключение:
Как видно из статьи, всё просто настраивается, даёт возможность гибко ограничивать доступ пользователей, изменяя данные в базе данных. Плюс мы получаем ограничение доступа блокированных пользователей, а так же получаем защиту от подбора паролей, открывая доступ только с определённых хостов.