tarコマンドやgzipコマンドを使って、入手したソースコードを展開する。
$ tar -xvzf mod_auth_pgsql-0.9.11.tar.gz
$ cd mod_auth_pgsql-0.9.11
インストール手順の確認のため、INSTALLファイルの内容を確認しておく。
$ less INSTALL
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
インストール直後は正常に再起動するが、サーバリブート後は、以下エラーが発生する。
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に/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 にセットされる)