Apache 웹서버에 Http Authentication 적용하기
작성시 참고한 자료 : How To Set Up Password Authentication with Apache on Ubuntu 14.04
일단 Http Authentication 개념을 알아보자.
0. 개념
HTTP 기본 인증 (HTTP basic authentication)
웹 클라이언트로부터 취득한 사용자 이름과 패스워드를 사용하여 웹 서버가 사용자를 인증하는 HTTP 기반의 인증 방법. 이 방법은 이름과 패스워드가 인터넷상에서 암호화되지 않은 텍스트로 전송되기 때문에 보안성이 없다.
출처 : 네이버 지식백과 (HTTP 기본 인증 (IT용어사전, 한국정보통신기술협회))
쉽게 설명하면, Http Authentication를 적용한 후 웹사이트에 접속하면 ID랑 PASSWORD 입력하라고 창이 뜬다.
1. 우분투에 apache2 랑 apache2-utils 를 설치한다.
$sudo apt-get update
$sudo apt-get install apache2 apache2-utils
2. 유저 패스워드 파일을 만든다.
아래와 같이 쓰면 .htpasswd 파일에 id와 password가 등록된다.
$sudo htpasswd -c /etc/apache2/.htpasswd testuser1
참고로 유저를 추가하려면 아래와 같이 쓰면 된다. (.htpasswd 파일에 로우 추가됨)
$sudo htpasswd /etc/apache2/.htpasswd testuser2
파일 읽었을 때 ($cat /etc/apache2/.htpasswd) 내용이 아래와 같이 나오면 된다.
testuser1:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
testuser2:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
3. 아파치 설정 세팅
sites-enabled 설정을 수정한다.
$sudo vi /etc/apache2/sites-enabled/000-default.conf
기존 내용이 아래와 같다면,
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
아래와 같이 수정하면 된다.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory “/var/www/html”>
AuthType Basic
AuthName “Restricted Content”
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
4. 접근 설정 세팅
4-1. /etc/apache2/apache2.conf 를 아래와 같이 수정한다.
(AllowOverride 뒤의 단어를 “All”로 고치는게 포인트다.)
$sudo vi /etc/apache2/apache2.conf
(전략)
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
(후략)
4-2. /var/www/html/.htaccess 를 아래와 같이 수정한다.
기존 내용이 있다면 아래 쪽에 붙여넣자.
$sudo vi /var/www/html/.htaccess
AuthType Basic
AuthName “Restricted Content”
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
5. 다 됐으면 아파치 재기동(리부팅)한다.
$sudo service apache2 restart
웹사이트 재접속하면 적용되어 있을 것이다.