2005/02/06
Apache-2.0.54-r8

Basic認証の設定(DB認証)

Basic認証の設定(ファイル認証)」では,ファイルでユーザー名とパスワードを を管理する方法を説明しました。このページでは,データベースを用いて,ユーザー名とパスワードを管理する方法を 説明します。

データベースでユーザー情報を管理するメリットとしては

  • ユーザー情報を操作できるアプリケーションを作成する等して,管理を簡素化できる
  • データベースで認証を行える他のサービスと連携し,データを一元管理できる

等があげられます。
反対に,データベースの情報を盗まれると,被害が大きくなってしまいます。
その為セキュリティには十分注意する必要があります。

mod_auth_pgsql のインストール

mod_auth_pgsqlをインストールします。
root $ emerge mod_auth_pgsql
インストールされたmod_auth_pgsqlのバージョンは 2.0.2-r1 でした。

テーブルの作成

Basic認証をPostgreSQLと連携して行うために、PostgreSQL側の準備をします。
mod_auth_pgsqlはグループを使用する等、細かな設定ができますが、ここでは最低限のテーブルと
カラムを作成します。テーブル web_userは以下の2つのカラムから成ります。

テーブル:web_user
user_id passwd
接続時のユーザー名を記録します。 接続時のパスワードを記録します。
パスワードは暗号化して記録します。
Postgresqlに接続できるユーザーでpsqlを起動します。
例ではgsideと言うデータベースに接続しています。
postgres $ psql gside
以下のSQL文でテーブルを作成します。
gside=# create table web_user (
gside=# user_id varchar(20) NOT NULL,
gside=# passwd varchar(20) NOT NULL
gside=# );

今回mod_auth_pgsqlでは、nobodyユーザーでPostgreSQLに接続するよう設定します。
このため、nobodyユーザーの作成と、web_userテーブルのSELECT権限の
追加を行います。
nobody ユーザーにはデータベース作成権限とユーザー作成権限は与えません。

postgres $ createuser nobody
Shall the new user be allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER

psqlから以下のSQL文で権限の追加を行います。

gside=# grant select on web_user to nobody;

認証ディレクトリの指定

/var/www/localhost/htdocs/Gentoo以下のコンテンツに対して認証を設定します。
/etc/apache2/conf/apache2.confに以下の記述を追加します。

<Directory "/var/www/localhost/htdocs/Gentoo">
<Limit GET POST>
# PostgreSQLのあるアドレス。この場合はローカルホスト
Auth_PG_host 127.0.0.1

# PostgreSQLに接続するポート番号
Auth_PG_port 5432

# ユーザー情報が格納されたデータベース名
Auth_PG_database gside

# ユーザー情報が格納されたテーブル名
Auth_PG_pwd_table web_user

# ユーザーIDが格納されたカラム名
Auth_PG_uid_field user_id

# パスワードが格納されたカラム名
Auth_PG_pwd_field passwd

# データベースに接続するユーザー名
Auth_PG_user nobody

# 認可領域の名前
AuthName "Please Enter Your Password"

# Basic認証を用いる場合は、Basicと指定する。
Authtype Basic

# 認証された全てのユーザーが利用可能
Require valid-user
</Limit>
</Directory>

起動オプションの変更を行います。/etc/conf.d/apache2を編集します。
APACHE2_OPTS="-D AUTH_PGSQL"

Apacheの再起動を行います。
root $ /etc/init.d/apache2 restart

暗号化パスワードの生成

mod_auth_pgsqlは、何も指定しないとCRYPT方式で暗号化されたパスワードを採用します。
そこでCRYPT方式の暗号化パスワードを生成する方法を説明します。
暗号化するパスワードを hogehoge とすると、
$ perl -e 'print crypt("hogehoge", "xx");'
とすると、暗号化されたパスワードが生成されます。"xx"の部分は自由に英数字2文字を
設定します。

psqlからユーザーとパスワードを追加するSQL文を実行します。

gside=# Insert Into web_user (
gside=# (user_id,passwd)
gside=# Values ('hoge','xxHLAO.FfWdak');
Index
Basic認証の設定(ファイル認証)
Basic認証の設定(DB認証)
ApacheでのSSLの設定
SSIの設定と利用