GNU/Linux >> Linux の 問題 >  >> Debian

Apacheでmod_authn_dbdとMySQLを使用してディレクトリをパスワードで保護する方法(Debian 8)

このガイドでは、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/にアクセスしてみてください。ユーザー名とパスワードの入力を求められるはずです:

  • Apache:http://httpd.apache.org/
  • Debian:http://www.debian.org/
  • mod_authn_dbd:http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html

Debian
  1. Ubuntu18.04でApacheを使用してphpMyAdminをインストールして保護する方法

  2. Debian9でApacheを使用してphpMyAdminをインストールして保護する方法

  3. Debian9でユーザーを作成および削除する方法

  1. Debian9LinuxにZabbixをインストールして設定する方法

  2. Debian9でユーザーを追加および削除する方法

  3. Ubuntu 15.10にApache、MySQL、SSLを使用してDrupal8をインストールする方法

  1. Debian9でApacheを使用してDrupalをインストールおよび構成する方法

  2. ApacheでAutomadCMSをインストールし、Debian10で暗号化する方法

  3. ElkArteフォーラムをApacheでインストールし、Debian10で暗号化する方法