ApacheでMySQL認証

WebアプリでBasic認証を管理したくてmod_auth_mysqlをインストールした際の記録です。

準備

以下から最新版の「mod_auth_mysql-3.2.tar.gz」をダウンロード
http://prdownloads.sourceforge.net/mod-auth-mysql/

解凍

#tar zxvf mod_auth_mysql-3.2.tar.gz
#cd mod_auth_mysql-3.2

パッチの適用

オリジナルのWhere文を追加したりMD5ハッシュを使えたりする幸せな機能が利用可能なパッチをあてる
以下から「mod_auth_mysql-3.2.patch5」をダウンロード
http://download.softagency.net/mysql/Downloads/Contrib/

#wget http://download.softagency.net/mysql/Downloads/Contrib/mod_auth_mysql-3.2.patch5
#patch < mod_auth_mysql-3.2.patch5
patching file README
patching file USAGE
patching file mod_auth_mysql.c

コンパイル

の前にMakefileを編集
環境に合わせて1行目のAPXSとOPTSをへんこう僕の場合は以下のようになりました。

APXS = /usr/sbin/apxs
OPTS = -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient

今度こそコンパイル

make

できあがったmod_auth_mysql.soをApacheのモジュールが入っているディレクトリにコピー

#cp mod_auth_mysql.so /usr/lib/apache/

データベースの作成

Apacheを設定する前にDBの準備をしておきます。
mysqlにアクセスして

mysql>create db http_auth;
mysql>use http_auth
mysql> create table user (
mysql> username char(25),
mysql> passwd char(25),
mysql> groups char(25),
mysql> primary key (username)
mysql> );

アクセス可能なユーザーの追加やGrant文の発行も行っておきます

Apacheの設定

以下の文をhttpd.confに追加

LoadModule auth_mysql_module modules/mod_auth_mysql.so
AddModule mod_auth_mysql.c

あとDBへのアクセス設定をhttpd.confに書いておきます。

Auth_MySQL_Info

Apacheの再起動

が...
こんなログがはかれて警告が出る

[Wed Nov 1 18:20:29 2006] [warn] module mod_auth_mysql.c is already added, skipping

なので
AddModule mod_auth_mysql.c
の部分をコメントアウトしてみる

#AddModule mod_auth_mysql.c

今度は警告は出ないみたい
このまま運用して様子を見てみます〜

.htaccessの作成

こんな感じ

AuthName "Members Only !!"
AuthType Basic
Require valid-user
Auth_MySQL_DB http_auth
Auth_MySQL_Password_Table user
Auth_MySQL_Username_Field username
Auth_MySQL_Where 'groups="groupname" and delflag=0' ← 先ほどのパッチをあてるとこんなことが可能
Auth_MySQL_Encryption_Types MD5

これを使ってWebアプリ(PHP)で認証を管理するツールを作りました。