목차

Apache Authentication with authn_dbd

본 문서의 원본은 http://linuxdata.kr/dokuwiki/doku.php?id=apache_authentication_with_authn_dbd 입니다.
작성자 — 이강우 2015/12/02 17:51

아파치는 내부 모듈로 인증관련 모듈을 포함하고 있다. 이 문서는 그중 authn_dbd를 이용하여 MySQL DB와 연동하여 SQL을 통한 인증을 할 수 있도록 셋팅하는 과정을 설명한다.

환경

OS : Debian 8 (jessie)

Debian 8(jessie)버전부터는 libapache2-mod-auth-mysql 모듈이 포함되어있지 않다.
일단 해당 모듈이 버그도 많고 개발도 중단되어서 더이상 포함시키지 않는다고 한다. 따라서 데비안 8 버전부터는 authn_dbd모듈을 이용하여야 한다.

Apache 2.4 버전에는 절대 mod-auth-mysql이용하지 말도록 한다.

설치

일단 필요한 패키지를 설치한다. 이 중 DB서버는 다른걸 사용하는경우에는 따로 패키지를 설치할 필요는 없다.

apt-get install apache2 apache2-utils
apt-get install libaprutil1-dbd-mysql
apt-get install mysql-server-5.6

DB & Table Setup

적당한 구조로 DB와 테이블을 추가한다.

CREATE TABLE `password` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `username` varchar(255) default NULL,
  `password` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

설정

apache 서버에 mysql을 이용할수 있도록 /etc/apache2/conf-available/dbd_mysql.conf 파일을 생성한다.

DBDriver mysql
DBDParams "host=127.0.0.1,port=3306,dbname=dbname_here,user=username_here,pass=password_here"
DBDMin  2
DBDKeep 4
DBDMax  10
DBDExptime 300

그리고 해당 모듈 설정을 활성화 해준다.

[user@host]$ a2enmod dbd
[user@host]$ a2enmod authn_dbd
[user@host]$ a2enconf dbd_mysql

그리고 인증이 필요한 디렉토리 설정을 아래와 같이 설정해주도록 한다.

<Directory /var/www/password-protected-site>
  AuthName "You Must Login"
  AuthType Basic
  AuthBasicProvider dbd
  AuthDBDUserPWQuery "SELECT encrypt(password) AS password FROM password WHERE username = %s"
  Require valid-user
</Directory>