Аутентификация в Apache2 используя MySQL как бекенд

Этот мануал рассказывает о том, как можно настроить MySQL бекендом для предоставления возможности аутентификации на сайте под управлением Apache.

Для этого потребуется использовать модуль для Apache2 — auth_mysql.
Предположим, что ваш сайт настроен и работает, и у вас есть полный доступ к базе данных. Осталось только сделать аутентификацию.

1. Необходимые пакеты

Нам потребуется пакет под названием libapache2-mod-auth-mysql.Если вы используете Debian Etch, вы можете собрать его сами ;) рассматривать это здесь не будем.

В других дистрибутивах — вроде ubuntu или debian lenny, просто выполните в терминале:

# apt-get install libapache2-mod-auth-mysql

2. Настройка системы

Нам потребуется создать базу данных для нашего хоста чтобы хранить в ней пользователей и группы. Делаем:

# mysql -u root -p

mysql >CREATE DATABASE httpauthdb;
mysql >GRANT USAGE ON . TO httpauth@localhost IDENTIFIED BY 'httpauthpassword';
mysql >GRANT ALL PRIVILEGES ON httpauthdb.* TO httpauth@localhost;

Далее создайте файл create_db.sql с содержимым:

CREATE TABLE groups (
gid int(10) unsigned NOT NULL auto_increment,
name varchar(50) NOT NULL default '',
PRIMARY KEY (gid),
UNIQUE KEY name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE usergroup (
uid int(10) unsigned NOT NULL default '0',
gid int(10) unsigned NOT NULL default '0',
PRIMARY KEY (uid,gid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE users (
uid int(10) unsigned NOT NULL auto_increment,
login varchar(40) NOT NULL default '',
pass varchar(60) NOT NULL default '',
firstname varchar(255) NOT NULL default '',
lastname varchar(255) NOT NULL default '',
email varchar(255) NOT NULL default '',
PRIMARY KEY (uid),
UNIQUE KEY login (login),
UNIQUE KEY email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

и выполните его в вашей БД используя команду:

# mysql -u root -p httpauth < create_db.sql

Теперь ваша БД готова и вам нужно создать несколько пользователей.

3. Создание пользователей

Для шифрования пароля используем алгоритм sha1. Для этого выполните следующую команду:
# echo 'password' | sha1sum
c8fed00eb2e87f1cee8e90ebbe870c190ac3848c

Таким образом, вы получите зашифрованный SHA1 пароль: c8fed00eb2e87f1cee8e90ebbe870c190ac3848c

Теперь создадим пользователя foobar с паролем ‘password’ и группу (внезапно!) ‘foobargroup’.

mysql> USE httpauthdb;
mysql> INSERT INTO users (login, pass, firstname, lastname, email) VALUES ('foobar', 'c8fed00eb2e87f1cee8e90ebbe870c190ac3848c', 'foo', 'bar', 'foobar@example.com');
mysql> INSERT INTO groups (name) VALUES ('foobargroup');
mysql> INSERT INTO usergroup (uid, gid) VALUES (uid, gid);

Здесь uid и gid нужно заменить на те которые были созданы в первых двух INSERTS’ах.

4. Настройка apache

Теперь нужно отредактировать конфигурацию вашего сайта для apache, добавив приведенные ниже данные между директивами Directory:

## mod auth_mysql
AuthBasicAuthoritative Off
AuthMYSQL on
AuthMySQL_Authoritative on
AuthMySQL_DB httpauthdb
Auth_MySQL_Host localhost
Auth_MySQL_User httpauth
Auth_MySQL_Password httpauthpassword
AuthMySQL_Password_Table users
AuthMySQL_Username_Field login
AuthMySQL_Password_Field pass
AuthMySQL_Empty_Passwords off
AuthMySQL_Encryption_Types SHA1Sum

Standard auth stuff

AuthType Basic
AuthName "restricted zone"

Require valid-user

Теперь перезапустив apache вы сможете аутентифицироваться на сайте как пользователь foobar с паролем password. :)

Автор: Mirivlad

Скромный труженик консоли и окошек.