このガイドでは、Debian 8(Jessie)サーバー上のApache2でmod_authn_dbdを使用して(MySQLデータベースのユーザーを使用して)Webディレクトリをパスワードで保護する方法について説明します。これは、mod_authによって提供されるプレーンテキストのパスワードファイルの代替であり、通常のSQL構文を使用して削除ユーザーを作成/変更できます。既存のMySQLユーザーテーブルに対して認証するようにmod_authn_dbdを構成することもできます。 apache mod_authn_dbdは、mod_auth_mysqlの代わりになります。
1予備メモ
ここでは、vhost構成ファイル/etc/apache2/sites-available/example.com.vhostとドキュメントルート/var/www/www.example.com/webでvhosthttp://www.example.comを使用しています。このチュートリアルでは、ディレクトリ/var/www/example.com/web/protecteddirをパスワードで保護したいと思います(http://www.example.com/protecteddir/に変換されます)。
Apacheがまだインストールされていない場合は、このチュートリアルを基本的なLAMPサーバーに使用できます。
2MySQLまたはMariaDBのインストール
ここでは、MySQLの代わりにMySQLフォークであるMariaDBを使用します。ただし、必要に応じてMySQLも機能します。 MariaDBをインストールするには、次のコマンドを実行します:
apt-get -y install mariadb-server mariadb-client
MySQLrootユーザーのパスワードを入力するように求められます:
MariaDB "root"ユーザーの新しいパスワード:<-yourrootsqlpassword
MariaDB "root"ユーザーのパスワードを繰り返します:<-yourrootsqlpassword
DBD MySQLモジュールをインストールします:
apt-get install libaprutil1-dbd-mysql
その後、mod_authn_dbdモジュールを有効にします:
a2enmod dbd
a2enmod authn_dbd
authn_socache
Apacheを再起動します:
service apache2 restart
3mod_authn_dbdの構成
mod_authn_dbdのドキュメントは、Apacheのドキュメントhttp://httpd.apache.org/docs/current/mod/mod_authn_dbd.htmlにあります。
これらの2つのファイルを読み取った後、examplecomdbというMySQLデータベースを作成します。このデータベースに、ユーザーとパスワードを含むmysql_authテーブルを作成します。これに加えて、MySQLユーザーexamplecom_adminを作成します。このユーザーはmod_auth_mysqlによって使用され、後でMySQLに接続します。
mysqladmin -u root -p create examplecomdb
mysql -u root -p
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost' IDENTIFIED BY 'examplecom_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost.localdomain' IDENTIFIED BY 'examplecom_admin_password';
FLUSH PRIVILEGES;
(examplecom_admin_passwordを任意のパスワードに置き換えます。)
USE examplecomdb;
create table mysql_auth (
username varchar(255) not null,
passwd varchar(255),
groups varchar(255),
primary key (username)
);
(もちろん、ユーザー資格情報を保持する既存のテーブルを使用することもできます。また、ユーザーがアクティブかどうかを定義するフィールドなど、テーブルに追加のフィールドを含めることもできます。)
次に、パスワードテストを使用してユーザーテストをmysql_authテーブルに挿入します。このユーザーはグループtestgroupに属しています。
パスワードはハッシュする必要があります。ここではSHA1ハッシュを使用します。ハッシュは、Linuxシェルでhtpasswdコマンドを使用して作成できます。
htpasswd -bns test test
結果は次のとおりです:
test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=
最初の部分はユーザー名「test」で、「:」で区切られ、ハッシュされたパスワードが続きます。ハッシュ化されたパスワード"{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M ="は、ユーザーデータベースに挿入するためにのみ必要です。 MySQLクエリは次のとおりです:
INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('test', '{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=', 'testgroup');
次に、MySQLシェルを終了します:
quit
vhostファイルに含まれるmod_authn_dbdの構成は、.htaccessファイル内に追加されない場合があります。したがって、vhostファイルを編集し、ファイルの最後に次の構成を追加します。
nano /etc/apache2/sites-available/example.com.vhost
[...] # mod_dbd configuration
DBDriver mysql
DBDParams "dbname=examplecomdb user=examplecom_admin pass=examplecom_admin_password"
DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300
<Directory "/var/www/example.com/web/protecteddir">
# mod_authn_core and mod_auth_basic configuration
# for mod_authn_dbd
AuthType Basic
AuthName "My Server"
# To cache credentials, put socache ahead of dbd here
AuthBasicProvider socache dbd
# Also required for caching: tell the cache to cache dbd lookups!
AuthnCacheProvideFor dbd
AuthnCacheContext my-server
# mod_authz_core configuration
Require valid-user
# mod_authn_dbd SQL query to authenticate a user
AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s"
</Directory>
Apacheをリロードします:
service apache2 reload
ユーザーがログインを許可されるかどうかを定義する追加のフィールド(たとえば、アクティブと呼ばれるフィールド)がMySQLテーブルにある場合は、次のようにSQLユーザークエリに追加できます。
[...] AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s and active = 'yes'" [...]
require valid-userディレクティブを使用すると、mysql_authテーブルにリストされている各ユーザーは、正しいパスワードを提供している限りログインできます。特定のユーザーのみにログインを許可する場合は、次のようなものを使用します
[...] require user jane joe [...]
代わりは。また、特定のグループのメンバーのみにログインを許可する場合は、次のようなものを使用します。
[...] require group testgroup [...]
それでおしまい!次に、http://www.example.com/protecteddir/にアクセスしてみてください。ユーザー名とパスワードの入力を求められるはずです:
4つのリンク
- Apache:http://httpd.apache.org/
- Debian:http://www.debian.org/
- mod_authn_dbd:http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html