본 문서의 원본은 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와 테이블을 추가한다.
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>