FreeBSD/ApacheのBasic認証でPostgreSQLを参照 の変更点
*FreeBSD/ApacheのBasic認証でPostgreSQLを参照 [#hfaa0dc2]
[[dokuwiki.fl8.jp転載済>http://dokuwiki.fl8.jp/doku.php/02_freebsd/04_database/02_posgresql/apache%E3%81%AEbasic%E8%AA%8D%E8%A8%BC%E3%81%A7postgresql%E3%82%92%E5%8F%82%E7%85%A7]]
#contents
**ソースコードの展開 [#k3bca735]
tarコマンドやgzipコマンドを使って、入手したソースコードを展開する。
$ tar -xvzf mod_auth_pgsql-0.9.11.tar.gz
**生成されたディレクトリへの移動 [#p0b484c7]
$ cd mod_auth_pgsql-0.9.11
**INSTALLの参照 [#k35b77cd]
インストール手順の確認のため、INSTALLファイルの内容を確認しておく。
$ less INSTALL
**configureの実行 [#e376f679]
INSTALLファイルのインストール手順に従って、configureを実行する。 ~
以下の例は、Apacheが/usr/local/apache、PostgreSQLが/usr/local/pgsqlに ~
インストールされているものとする。
$ ./configure \
--with-apxs=/usr/local/apache/bin/apxs \
--with-pgsql=/usr/local/pgsql
**モジュールのコンパイル [#r0d241de]
以下のコマンドでコンパイルを行う。
$ /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
**モジュールのインストール [#pb484b80]
コンパイルしたモジュールをインストールする。この作業のみ、rootユーザーでなくては行えない。
# /usr/local/apache/bin/apxs \
-i -a -n auth_pgsql mod_auth_pgsql.so
**確認 [#mfeaa46b]
一般ユーザーに戻り、Apacheの設定ファイル(httpd.conf)の内容を確認する。 ~
以下のような行が自動的に追加されているはずである。
LoadModule auth_pgsql_module libexec/mod_auth_pgsql.so
**Apacheの再起動 [#t22db8b1]
インストール直後は正常に再起動するが、サーバリブート後は、以下エラーが発生する。 ~
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)の設定 [#i958043a]
インストールできたら、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 にセットされる)