웹사이트 검색

Apache에서 mod_authn_dbd 및 MySQL을 사용하여 디렉토리를 암호로 보호하는 방법(Debian 8)


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 데비안 8(제시)
  • 데비안 6(스퀴즈)

이 페이지에서

  1. 1 서문
  2. 2 MySQL 또는 MariaDB 설치
  3. 3 mod_authn_dbd 구성하기\n
  4. 4개의 링크

이 안내서는 Debian 8(Jessie) 서버의 Apache2에서 mod_authn_dbd를 사용하여 웹 디렉토리(MySQL 데이터베이스의 사용자 포함)를 암호로 보호하는 방법을 설명합니다. mod_auth에서 제공하는 일반 텍스트 암호 파일의 대안이며 일반 SQL 구문을 사용하여 삭제 사용자를 생성/수정할 수 있습니다. 기존 MySQL 사용자 테이블에 대해 인증하도록 mod_authn_dbd를 구성할 수도 있습니다. apache mod_authn_dbd는 mod_auth_mysql을 대체합니다.

1 서문

여기에서 가상 호스트 http://www.example.com을 가상 호스트 구성 파일 /etc/apache2/sites-available/example.com.vhost 및 문서 루트 /var/www/www.example.com/web과 함께 사용합니다. 이 튜토리얼에서 /var/www/example.com/web/protecteddir 디렉토리를 비밀번호로 보호하고 싶습니다(http://www.example.com/protecteddir/로 번역됨).

Apache가 아직 설치되지 않은 경우 기본 LAMP 서버에 대해 이 가이드를 사용할 수 있습니다.

2 MySQL 또는 MariaDB 설치

여기서는 MySQL 대신 MySQL 포크인 MariaDB를 사용하겠습니다. 그러나 원하는 경우 MySQL도 잘 작동합니다. MariaDB를 설치하려면 다음을 실행합니다.

apt-get -y install mariadb-server mariadb-client

MySQL 루트 사용자의 비밀번호를 입력하라는 메시지가 표시됩니다.

MariaDB "root" 사용자의 새 비밀번호: <-- yourrootsqlpassword
MariaDB "root" 사용자의 비밀번호 반복: <-- yourrootsqlpassword

DBD MySQL 모듈을 설치합니다.

 apt-get install libaprutil1-dbd-mysql

그런 다음 mod_authn_dbd 모듈을 활성화합니다.

a2enmod dbd
a2enmod authn_dbd
authn_socache

아파치를 다시 시작합니다.

service apache2 restart

3 mod_authn_dbd 구성하기

http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html의 Apache 설명서에서 mod_authn_dbd에 대한 설명서를 찾을 수 있습니다.

이 두 파일을 읽은 후 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)
);

(물론 사용자 자격 증명이 있는 기존 테이블을 사용할 수도 있고, 예를 들어 사용자가 활성인지 여부를 정의하는 필드와 같은 추가 필드를 테이블에 포함할 수도 있습니다.)

이제 비밀번호 test를 사용하여 사용자 테스트를 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>

아파치를 다시 로드합니다.

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 링크

  • 아파치: http://httpd.apache.org/
  • 데비안: http://www.debian.org/
  • mod_authn_dbd: http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html