Ноя 30 2009

Apache. Установка и настройка mod_auth_mysql.

MySQL — один из самых популярных источников данных. Используют его практически во всех задачах. Авторизация пользователей тоже одна из задач, которые так любят водружать на плечи MySQL. Для того, что бы сервер мог авторизовать пользователей через базу MySQL нужно установить дополнительные модули. В портах FreeBSD есть два порта mod_auth_mysql — под Apache 1.3 и mod_auth_mysql под Apache 2.X. Поскольку у меня стоит Apache 2.2, то я буду рассказывать об установке пората /usr/ports/www/mod_auth_mysql2. Насколько я знаю, под Apache 1.3 установка отличается незначительно, только в настройках, отвечающих за загрузку модулей.

Итак, начнем c установки mod_auth_mysql2:

cd /usr/ports/mod_auth_mysql2
make install clean

Установка проходит без «дополнительных» вопросов. И после того, как она закончится, подправим httpd.conf
Для этого открываем /usr/local/etc/httpd.conf и находим такую строку:

#LoadModule auth_mysql_module  libexec/apache22/mod_auth_mysql.so

и расскоментируем ее(убираем решетку).
Теперь создадим базу и таблицу по которой будет авторизоваться пользователь. Если база есть, то можно пропустить процесс ее создания и процесс создания пользователя.
Создаем базу:

mysql -uroot -p
CREATE DATABASE apache

Создаем пользователя с правами чтения из базы. Писать в эту базу будем из командной строки от рута.

GRANT SELECT ON apache.* TO 'apache'@'localhost' IDENTIFIED BY 'apache-123';

Теперь создадим таблицы:

mysql -uroot -p apache </usr/local/share/doc/mod_auth_mysql/htpasswd.sql

С таблицами разобрались.
Первым делом добавим хост в базу mysql, для которого мы организовываем авторизацию:

INSERT INTO host_info SET host='hilik.org.ua', host_group=1;

Опредилили принадлежность хоста hilik.org.ua к группе 1.
Теперь добавим пользователей.
Добавим пользователя hilik с паролем hilik-123, который может авторизоваться для хостов из первой группы, для этого выполним такой запрос:

INSERT INTO user_info SET user_name='hilik', user_passwd=encrypt('hilik-123'), host_group=1;

Теперь остается создать .htaccess файл и поместить его в ту директорию, доступ к которой вы хотите ограничить.
Содержимое .htaccess такое:

 AuthName "Auth pls "
 AuthType Basic
 AuthMySQLHost localhost
 AuthMySQLDB apache
 AuthMySQLUserTable user_info
 AuthMySQLEnable On
 AuthMySQLUser apache
 AuthMySQLPassword apache-123
 AuthBasicAuthoritative Off
 AuthUserFile /dev/null
 require valid-user

Опции AuthBasicAuthoritative Off и AuthUserFile /dev/null нужны для того, что бы отключить авторизацию по файлу(htpasswd). Если мы не пропишем эти опции, то получим:

(9)Bad file descriptor: Could not open password file: (null)

Работать соответственно ничего не будет. А у нас настройка закончена, можно пользоваться. Осталось добавить, что система mod_auth_mysql достаточно гибок и позволяет указать другие поля таблицы для авторизации. То есть можно подогнать авторизацию под свою, текущую таблицу.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • By namesys, 17.01.2010 @ 15:59

    Лучше использовать /usr/ports/www/mod_auth_mysql_another, в нём например есть диретива AuthMySQLPwEncryption, через которую можно указать метод шифрования пароля, что добавляет удобств при интегрировании с уже существующей базой.

Other Links to this Post


Украинская Баннерная Сеть