ApacheでMySQL認証
WebアプリでBasic認証を管理したくてmod_auth_mysqlをインストールした際の記録です。
パッチの適用
オリジナルの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
データベースの作成
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)で認証を管理するツールを作りました。