2011-05-02 apache
ApacheとDB使ったBasic認証の記事は見つかるんだけど、Digest認証は見つからなかったので、メモがてら残しておく。
centOS 5.5
PostgreSQL 8.1.23
Apache 2.2.3
yumでサクッとインストールしたので省略。あ、pg_config が必要になるので、postgresql-devel もインストールした。
# yum install postgresql-server # yum install postgresql-devel
Apacheはソースコンパイルしていれた。mod_dbd と mod_authn_dbd が必須なのでこんな感じのオプションを指定。
# cd /usr/local/src/ # wget http://...../httpd-2.2.3.tar.gz # tar -xzvf httpd-2.2.3.tar.gz # cd httpd-2.2.3 # ./configure --prefix=/usr/local/apache …(略) --enable-dbd --enable-authn-dbd --with-pgsql=/usr/lib/pgsql # make # make install
ApacheからPostgreSQLのモジュールを呼び出せるよう、共有ライブラリの設定を変更。
# vi /etc/ld.so.conf /usr/lib/pgsql ← 一番下に追記
で、ldconfig を再起動。
# /sbin/ldconfig
digest認証に使うユーザテーブルを作る。
CREATE TABLE userdata ( userid varchar(64) NOT NULL, relm varchar(64) NOT NULL, password varchar(64) NOT NULL, primary key (userid,relm) );
で、認証用データとしてこんな値を入れておく(userid:test, relm:aaa, password:test)
password の値は暗号化されたものをいれる。htdigestコマンド使えば作成可能。この辺も参照。
INSERT INTO userdata (userid,relm,password) VALUES ('test','aaa','6c39e707fdc9510e4560b840751c8ac1');
httpd.confにDB経由Digest認証設定を書く。http://xxxxxx/aaa/ にアクセスされたらDigest認証させることを想定。
# vim /usr/local/apache/conf/httpd.conf ### mod_dbd config DBDriver pgsql DBDParams "host=localhost dbname=testdb user=dbuser password=dbuser" DBDMin 4 DBDKeep 8 DBDMax 20 DBDExptime 300 ### /aaa digest auth setting <Directory "/var/docroot/aaa"> AuthType Digest AuthName "aaa" # ←userdata.relmを指定 AuthDigestProvider dbd Require valid-user AuthDBDUserRealmQuery "SELECT password FROM userdata WHERE userid=%s AND relm=%s" </Directory>
見て分かるように、httpd.confに認証用のSQLを直接書いている。%sにuseridとrelm がバインドされる( ※SQLインジェクション対策は考慮されてるっぽい)
で、Apache起動、http://xxxxxx/aaa/ にアクセスして認証ダイアログが出てきたらOK。