FreeBSD/ApacheのBasic認証でPostgreSQLを参照

FreeBSD/ApacheのBasic認証でPostgreSQLを参照

dokuwiki.fl8.jp転載済

ソースコードの展開

tarコマンドやgzipコマンドを使って、入手したソースコードを展開する。

$ tar -xvzf mod_auth_pgsql-0.9.11.tar.gz 

生成されたディレクトリへの移動

$ cd mod_auth_pgsql-0.9.11 

INSTALLの参照

 インストール手順の確認のため、INSTALLファイルの内容を確認しておく。

$ less INSTALL 

configureの実行

INSTALLファイルのインストール手順に従って、configureを実行する。
以下の例は、Apacheが/usr/local/apache、PostgreSQLが/usr/local/pgsqlに
インストールされているものとする。

$ ./configure \ 
  --with-apxs=/usr/local/apache/bin/apxs \ 
  --with-pgsql=/usr/local/pgsql 

モジュールのコンパイル

以下のコマンドでコンパイルを行う。

$ /usr/local/apache/bin/apxs \ 
  -I/usr/local/pgsql/include \ 
  -L/usr/local/pgsql/lib -lpq \ 
  -o mod_auth_pgsql.so -c mod_auth_pgsql.c auth_pgsql_shared_stub.c 

モジュールのインストール

コンパイルしたモジュールをインストールする。この作業のみ、rootユーザーでなくては行えない。 
# /usr/local/apache/bin/apxs \ 
  -i -a -n auth_pgsql mod_auth_pgsql.so 

確認

一般ユーザーに戻り、Apacheの設定ファイル(httpd.conf)の内容を確認する。
以下のような行が自動的に追加されているはずである。

LoadModule auth_pgsql_module libexec/mod_auth_pgsql.so 

Apacheの再起動

インストール直後は正常に再起動するが、サーバリブート後は、以下エラーが発生する。

Cannot load /usr/local/apache/libexec/mod_auth_pgsql.so into server: Shared object "libpq.so.3" not found 

以下のようにシンボリックリンクを張ることで正常に起動する。

ln -s /usr/local/pgsql/lib/libpq.so.3 /usr/lib/libpq.so.3 

httpd.conf(.htaccess)の設定

インストールできたら、httpd.conf(または .htaccess)の設定を行おう。
本来ならデータベースを先に用意するべきだが、説明の都合上こちらを先にする。

これらのファイルの設定は、前回説明したようにディレクトリ別のセキュリティ設定に用いられる。
ここでは、httpd.confに/usr/local/apache/htdocsで公開されているコンテンツへのアクセス制限を設定する方法を紹介する。

<Directory "/usr/local/apache/htdocs/"> 
Auth_PG_host 127.0.0.1 
Auth_PG_port 5432 
Auth_PG_database test 
Auth_PG_user postgres 
Auth_PG_pwd pg_password 
Auth_PG_pwd_table user_data 
Auth_PG_uid_field user_name 
Auth_PG_pwd_field passwd 
AuthName "Please Enter Your Password" 
Authtype Basic 
<Limit POST GET> 
require valid-user 
</Limit> 
<Directory> 

これは、ごく単純なデータベース認証を設定した例である。簡単に説明すると、

Auth_PG_host 127.0.0.1 

はデータベースがローカルホスト(127.0.0.1)にインストールされていること、

Auth_PG_port 5432 

でポートが5432であることを指定している。次に、

Auth_PG_database test 

はデータベース名が「test」で、

Auth_PG_user postgres 
Auth_PG_pwd pg_password 

データベースへのアクセスには、ユーザー「postgres」とパスワード「pg_password」を用いる。

Auth_PG_pwd_table user_data 
Auth_PG_uid_field user_name 
Auth_PG_pwd_field passwd 

この3行では、テーブル名が「user_data」であり、その「user_name」フィールドをユーザー名、passwdフィールドを
パスワードとして扱うことを指定している。 この場合、user_dataテーブルに含まれるデータに一致すれば、アクセス権を持つユーザーとして認証する。
このように、mod_auth_pgsqlではユーザー名とパスワードを含むテーブル名やフィールド名は自由に決定できる。

パスワードを平文で格納した場合は、Auth_PG_encrypted off を追加する。

PHPをインストールしているなら、以下のようなソースを用意する。

# vi index.php 

------------------------------------------------------------ 

<html> 
<head> 
<title>mod_auth_pgsql test page</title> 
</head> 
<body> 
<?php 
print "REMOTE_USER = " . "$REMOTE_USER" . "<br>"; 
?> 
mod_auth_pgsql test page... 
</body> 
</html> 

------------------------------------------------------------ 
(認証されたユーザ名が環境変数 REMOTE_USER にセットされる)