WWW を検索 NOGNOG.COM を検索

WWW.NOGNOG.COM

Last modified: Sat, 16 Feb 2008 18:04:03 +0900
Home   うにっくすさんの覚え書き   プリングルズ   MIDI   ユーザー車検   「小沢昭一の小沢昭一的こころ」のススメ   Blog  

Apache2 - MySQL認証

 MySQLを使ったデータベース認証モジュールをAapche 2.2.x へ組み込みます
デフォルトのままではコンパイルに失敗するので、こちらのサイトを参考にパッチを作成して適用しています。
このページでは、既にMySQLがデフォルトディレクトリにインストールされている事を前提としています。

用意するもの


  • mod_auth_mysql-3.0.0.tar.gz

  • 公式サイト

  • ダウンロードサイト

  • コンパイルエラー修正パッチ

    コンパイル&インストール


      % tar zxvf mod_auth_mysql-3.0.0.tar.gz
      % cd mod_auth_mysql-3.0.0
      % patch -p0 < ../mod_auth_mysql.c.patch
      % su
      # /usr/local/apache2/bin/apxs -ci -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient -lz -lm mod_log_mysql.c (※)

      ※注意※
        今回、apxsオプションに「-cia」を与えて一気にインストールまでせずに、
        あえて「-ci」としてコンパイル&インストールまで行い、 アクティベーション(httpd.confにmod_auth_mysql.soを登録)は後ほど手動で行います。

        理由は、「apxs -cia」でDSOモジュールをActivate(httpd.confへの組み込み)すると、
        LoadModuleエントリの最後尾に登録されるものの、
        Apache標準モジュール「mod_auth_basic.so」より前に記載しないと、
        「500 Internal Server Error/以下エラーログ」を引き起こしてしまい、正常に動作しない事が分かりました。
        そこで今回は、この現象を回避するために手動で組み込みます。

      ※500 Internal Server Error/エラーログ
        [Sat Mar 31 16:54:33 2007] [error] Internal error: pcfg_openfile() called with NULL filename
        [Sat Mar 31 16:54:33 2007] [error] [client 192.168.0.4] (9)Bad file number: Could not open password file: (null)


    ロギング用データベース&テーブルの作成


      # mysqladmin create auth_db_name
      # mysql auth_db_name

        mysql> CREATE TABLE auth_passwd_table (
        mysql> id VARCHAR(255) BINARY,
        mysql> passwd VARCHAR(255) BINARY
        mysql> );
        mysql> GRANT ALL ON auth_db_name.* TO db_connect_account IDENTIFIED BY 'db_connect_passwd';
        mysql> GRANT ALL ON auth_db_name.* TO db_connect_account@localhost IDENTIFIED BY 'db_connect_passwd';
        mysql> FLUSH PRIVILEGES;
        mysql> EXIT

    コンフィグレーション


      # vi /usr/local/apache2/conf/httpd.conf

      LoadModule mysql_auth_module  modules/mod_auth_mysql.so ←mod_auth_basic.soの前に記述する。
      LoadModule auth_basic_module modules/mod_auth_basic.so
      LoadModule auth_digest_module modules/mod_auth_digest.so
      ・・・
      <Directory  /usr/local/apache2/htdocs>
          Options                   all
          AllowOverride             all
          Order                     allow,deny
          Allow from                all
          AuthMySQLHost             localhost
          AuthMySQLDB               auth_db_name
          AuthMySQLUserTable        auth_passwd_table
          AuthMySQLUser             db_connect_account
          AuthMySQLPassword         db_connect_passwd
          AuthMySQLNameField        id
          AuthMySQLPasswordField    passwd
          AuthMySQLPwEncryption     none
          AuthMySQLAuthoritative    On
          AuthMySQLNoPasswd         Off
          AuthType                  Basic
          AuthName                  "You are requested to input password"
          require                   valid-user
      </Directory>
      			

    id、passwd以外に有効期限や他のアクティブなフラグを認証条件に含ませたい場合は、
    httpd.confの「AuthMySQLUserCondition」パラメータを追加して

      AuthMySQLUserCondition "active=1 AND expire_date >= curdate()"

    という具合に、認証時に問合せるSQL構文を記述します。すると、

      SELECT passwd FROM auth_passwd_table WHERE id='testuser01' AND active=1 AND expire_date >= curdate()

    追加されたクエリが投げられ柔軟な認証設定が可能になります。

    起動


      # /usr/local/apache2/bin/apachectl start

    うにっくすさんの覚え書きについて

    Home >> うにっくすさんの覚え書き >> Apache2 - MySQL認証