認証DBにアクセスするライブラリを組み込む:仕事で使える魔法のLAMP(19)
前回に引き続き今回は、Apacheに同梱しているけど、インストール操作が必要なパッケージをインストールする方法を解説します(編集部)
認証用のユーザーデータの管理に使えるDBDとDBM
第14回から、Apache HTTP Server(以下Apache)をビルドする方法を解説しています。前回はldapモジュールのビルドを例に、Apacheのconfigureスクリプトだけでは設定できない項目があるということを解説しました。今回は引き続き、configureスクリプトだけでは設定できない項目について解説します。
Apacheはライブラリをいくつか同梱していますが、このライブラリにもconfigureスクリプトがあります。ldapを有効にするには、このライブラリのconfigureに引数を設定しなければならないのでした。
ライブラリのconfigureを設定するには、Apache本体のconfigureの引数として設定します。ライブラリのconfigureは、Apacheのconfigureから呼び出されます。このとき、Apacheのconfigureの引数がそのまま渡されるのです。存在しない引数は無視するので、Apacheのconfigure経由で設定できるのです。
このような方法で設定するものが他にもあります。今回は、その中でも特に重要なDBMとDBDについて解説します。どちらもデータベースに関連するもので、同梱ライブラリであるapr-utilの設定になります。
DBMもDBDもApacheで認証をするときに使うものであるという点も、前回解説した例と同じです。ユーザー名とパスワードを取り出す手段として、DBM、DBD、ldapの3つの方法が使えるのです。これに加えて、プレーンなテキストファイルを使う認証モジュールがありますが、こちらはApache単体だけでも利用できます。この4つがApacheの認証モジュールで使える、ユーザーデータのストレージということになります。
手軽に扱えるデータベースDBM
まずはDBMについてですが、これはApache固有の用語ではありません。もともとUNIXに備わっているデータベース機構で、古くから存在しているものです。UNIXではテキストファイルによるデータ管理が多いですが(例えばパスワードデータベースなど)、テキストでは処理性能の面で問題があるような状況でDBMを使うことが多いです。
DBMはキーと値のペアで格納するシンプルなデータベースで、ライブラリとしてアプリケーションに組み込んで利用します。データベースサーバは不要でデータファイルを直接書き換える形態なので、手軽に扱えます。
余談ですが、キーと値のペアというと、ここ数年盛り上がりを見せているKVS(Key Value Store)を思い出す方も多いかと思います。データの扱い方としてはDBMと同じですが、KVSは処理性能が高いことや可用性が高いという点でDBMとはかなり設計思想が異なります。それぞれ使いどころが違うということに注意してください。
Apacheで認証と言えば、HTTP接続時の認証です。HTTPアクセスのたびにパスワードを確認しなければなりません。ユーザーデータをテキストファイルにした場合、アクセスのたびに頭からユーザーを探すことになります。ユーザーがごく少数ならともかく、多数のユーザーを格納するにはかなり無理があるということはすぐに分かります。
そこでUNIXの伝統に従うと、テキストファイルの代わりにDBMを使うことになるのです。DBMは与えられたキーから少ないステップでデータを探せるような構造になっているので、多数のユーザーを格納しても高速に検索できるのです。
前回解説したldapもデータの検索という点ではテキストファイルより優れています。ただ、ldapでは企業システムとの連携という別の付加価値があります。これは次に解説するDBDも同様です。ごく単純なユーザーデータの格納であればDBMを使うことが多いでしょう。
ApacheにDBMを組み込む
古くから利用されているDBMですが、現在ではそのクローンや代替のソフトウェアがいくつかあります。Linux向けならGNUによる実装のGDBMや、オラクルのBerkeley DBといったところが有名です。
この2つを組み込んでみることにします。まず、次のようにビルドに必要な開発用パッケージをインストールしましょう。Berkeley DBのパッケージは“db4”という文字列がついた名前になっています。GDBMやBerkeley DBは、さまざまなソフトウェアが利用しているので、おそらくすでにインストールは済んでいて、開発用パッケージのみをインストールすることになるでしょう。
$ sudo yum install gdbm-devel db4-devel
configureスクリプトを実行するときのコマンドラインは次の通りになります。Apacheのモジュールとしてはmod_authn_dbmとmod_authz_dbmで、これは「--enable-mods-shared=all」と指定することで有効になります。
./configure \ --prefix=/opt/apache-httpd-2.2.19 \ --enable-mods-shared=all \ --with-mpm=prefork \ --with-gdbm \ --with-berkeley-db \ 2>&1 | tee configure_log.txt
特に問題なくビルドできるはずですが、インストールしたらlddコマンドできちんとリンクできているか確認しましょう。Apache本体のbin/httpdだけでなく、DBMファイルの作成やユーザーデータの編集に使うbin/htdbmコマンドも確認します。
$ ldd /opt/apache-httpd-2.2.19/bin/httpd $ ldd /opt/apache-httpd-2.2.19/bin/htdbm
GDBMとBerkeley DBの2種類をリンクしましたが、どちらを使うことになるのでしょうか? Apache本体なら、Apacheの設定ファイルで選択できます。htdbmコマンドでは「-T」という引数で指定します。
ユーザーデータベースを新規作成するには「-c」引数を使います。
$ /apache-httpd-2.2.19/bin/htdbm -c -Tdb userdb test Enter password : Re-type password : Database userdb created.
できたファイルをfileコマンドで確認します。fileコマンドはファイルの形式を解析するコマンドです。
$ file userdb userdb: Berkeley DB (Hash, version 8, native byte-order)
「-Tgdbm」を指定して同じようにデータベースファイルを作成してみましょう。ファイル形式がGDBMになることが確認できるはずです。なお、「-T」で何も指定しないとsdbmという形式になります。これはあらかじめapr-utilが内蔵しているDBMで、configureで「--with-gdbm」などを指定しなかった場合にも使えるようになっています。
RDBMSを利用できるDBD
DBDは各種リレーショナルデータベース管理システム(以下RDBMS)をユーザーデータの格納先として使えるようにするApache独自の機構です。正確に言うと、DBD自体は認証の機能とは切り離されています。DBDはDBの接続を管理するもので、どのデータベースであっても認証モジュールから共通に使えるようにするためのものです。
RDBMSに接続するためのクライアントライブラリは、RDBMSごとに違うものになります。DBDで各RDBMSへの接続を管理することで、認証モジュールをRDBMSごとに分ける必要が無くなります。また、現在のApacheでは認証だけですが、認証以外の用途でRDBMSを使うこともできるようになります。
これはldapのモジュールが、LDAPへの接続を管理するmod_ldapと、認証のmod_authnz_ldapに分かれていたのと同じような考え方です。DBDではmod_dbdと、mod_auth_dbdの2つに分かれます。
DBDにはldapと同じような利点があります。既存のデータベースに入ったユーザー情報を参照することもできますし、複数台のApacheから1つのデータベースを参照するようにもできます。
ビルドの手順はこれまで解説してきたものと同様ですので、ここでは省略します。次のようにしてapr-utilのconfigureスクリプトのヘルプを参照してください。使用するRDBMSによって、ビルド時に指定する引数が異なります。ヘルプを見ると、RDBMSことに異なる引数を調べることができます。
$ srclib/apr-util/configure --help
次回は、Apacheに付属している標準モジュール以外の、サードパーティーのApacheモジュールをビルドする方法を解説します。
- CMakeでMySQLをビルドしてみる
- MySQLのビルドに欠かせないCMakeを準備する
- いよいよMySQL編、ソースからビルドすべきか?
- PHPでセッションを利用するための設定
- クライアントがアクセスできる範囲を制限する
- エラーメッセージをどう扱うか?
- ファイルのアップロードを制限する
- リクエストデータを受け取る変数の扱い
- マジッククオート機能には頼らない
- 安全を考えてPHPの実行時設定を調整する
- Apacheの設定ファイルでPHPの設定を変える
- PHPの設定ファイルを作って配置してみる
- PHPスクリプトを実行できるようにする準備
- PHPエクステンション組み込みの仕上げ
- 単純なデータを管理するDBMを使えるようにする
- エクステンションの組み込み状況を確認する
- PHPでデータベースを使う準備をする
- XMLを処理できるようにする
- エクステンションを有効にしてビルドに挑戦!
- PHPテスト失敗の原因を追究する
- 早速PHPをビルド! そしてテスト!
- PHP編に突入! まずはソースをダウンロード
- 設定ファイルを作成してApacheを動作させる
- 設定ファイルや公開ドキュメントの配置を考える
- 1つのサーバに複数の仮想サーバ?
- Apacheの設定ファイルを記述する前に
- サードパーティのApacheモジュールをビルドする
- 認証DBにアクセスするライブラリを組み込む
- Apache同梱ソフトウェアに引数を渡してビルド
- OpenSSLをビルドしてApacheで利用する
- proxyやsslのモジュールを使ってみる
- ライブラリが足りなくてビルドできないときは?
- Apache HTTP Serverのビルドを始めよう
- configureでソフトウェア固有の設定を変更してみる
- configureの設定を変更してみる
- 配布パッケージの中身と、configureの役目を知る
- ダウンロードファイルが真正なものであるかを確認
- Makefileをいろいろ書き換えながらビルドしてみよう
- makeを使ってソフトウェアをビルドしてみよう
- ダイナミックリンクとスタティックリンク
- 「ビルド」という作業は何を指しているのか
- 公開鍵認証でsshを安全に使う
- sshを便利にする公開鍵暗号
- アクセス制限の設定とCentOSのアップデート
- サーバに接続して、一般ユーザーのアカウントを作る
- LAMP環境、自分で作りませんか?
Copyright © ITmedia, Inc. All Rights Reserved.