웹서비스를 안전하게 설정하기 위해서 우리는 .htaccess 파일을 홈페이지 디렉토리에 만들고, 접근할 수 있는 사용자를 설정함으로써 가능해진다. 물론 apache 웹서버가 .htaccess 파일과 .htpasswd 파일을 찾느라 느려질 수 있으나 phpMyAdmin과 같은 아무나 볼 수 있어서 입력해 로그인 시도를 할 수 있는 관리 페이지 웹사이트들이 이렇게 보호하는 것이 좋다.

1. Authentication 도구 설치

다음과 같은 명령으로 필요한 소프트웨어 패키지를 설치한다.

$ sudo apt-get install apache2-utils

설치가 되면 다음으로 인증을 위한 파일 2개를 만든다.

 

2. Apache2 서버 설정 파일 확인 및 수정

Apache 2 서버 설정 파일에 웹서비스를 정의할 수 있다.

$ sudo emacs -nw /etc/apache2/apache2.conf

가상 웹서비스 별로 다음과 같이 설정이 있으며, AllowOverride 설정이 All로 되어 있으면 된다.

filename : /etc/apache2/apache2.conf <Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php AllowOverride All . . .

또한 "/etc/apache2/conf-available" 디렉토리에 별도의 설정 파일을 두어 가상 웹서비스를 설정할 수 있으므로 이 디렉토리도 확인해야 한다.

$ sudo service apache2 restart

웹서버의 설정을 변경했으므로 다시 시작한다.

 

3. 파일 .htaccess 생성

디렉토리 (웹사이트)에 접근 제한 설정 파일을 하나 만든다. 다음은 기본 웹사이트인 "/var/www/html" 에 생성한다.

filename : /var/www/html/.htaccess AuthUserFile /etc/apache2/.htpasswd AuthName "Please Eneter Password" AuthType Basic Require valid-user

파일의 내용을 잠깐 살펴 보면, 중요한 것은 사용자인증(".htpasswd") 정보가 있는 파일의 위치이다 

AuthUserFile : 웹서비스에 접근할 사용자와 암호가 저장된 파일의 위치 AuthName : 팝업 윈도우에 표시될 메시지

이 파일을 하나 만들어 두면 복수개의 웹사이트를 운영할 때 복사해서 사용하면 편하다.  예를 들어 phpMyAdmin 사이트를 보호하고 싶다면, 위의 파일을 다음과 같이 복사하면 된다.

$ sudo cp /var/www/html/.htaccess /usr/share/phpmyadmin

물론 보안을 위해서 각 웹서비스 별로 독립적인 .htpasswd 파일을 생성해서 다른 디렉토리에 두어도 된다.

 

4. 파일 .htpasswd 생성

웹서비스에 접근할 사용자와 사용자 암호를 입력하여 .htpasswd 파일을 생성한다.

$ sudo htpasswd -c /etc/apache2/.htpasswd {username}

{username}은 로그인하려는 사용자의 아이디를 입력하면, 암호 입력을 요구 받는다. 암호 재확인 입력하면 사용자 등록이 되고, /etc/apache2 디렉토리에 .htpasswd 파일이 생성된다.

$ sudo cat /etc/apache2/.htpasswd

생성된 파일을 읽어 보면 사용자 아이디와 암호화된 패스워드를 볼 수 있다.

 

참고 : How To Install and Secure phpMyAdmin on Ubuntu 14.04 중에 "Create the .htpasswd file for Authentication" 부분 일부 (link)

 

번호 제목 글쓴이 날짜 조회 수
73 [ChatGPT] nginx 에서 jetty 서버로 프록시중 "org.eclipse.jetty.http.BadMessageException: 400: Invalid SNI" 오류 황제낙엽 2024.11.12 1291
72 [phind] jetty 와 tomcat 의 차이점 (성능, 사용성, 선호도) 황제낙엽 2024.10.31 1438
71 jsp 에서 <script> 로 import 한 js 내의 한글이 깨진다 file 황제낙엽 2024.07.14 1481
70 Nginx: 413 – Request Entity Too Large file 황제낙엽 2024.02.17 1187
69 nginx 설치, 실행, SSL 설정, 프록시 설정 황제낙엽 2024.02.04 962
68 [bard] Nginx로 서브 도메인에 따라 내부의 포트만 다르게 실행중인 웹서버들을 라우팅 황제낙엽 2024.02.01 962
67 [Bing] "Apache"와 "Nginx" 의 차이점 황제낙엽 2024.01.31 1055
66 Nginx 에 대하여 황제낙엽 2024.01.18 892
65 "org.apache.tomcat.util.net.SecureNioChannel.getSslEngine()" is null 황제낙엽 2023.06.22 2956
64 windows tomcat 에 Let's Encrypt(SSL) 적용 황제낙엽 2023.06.21 1093
63 AutoSet PHP 버전 업그레이드 (7.2.10 to 7.4.32) 황제낙엽 2022.10.09 1542
62 401 - Unauthorized: Access is denied due to invalid credentials 황제낙엽 2021.08.27 1387
61 iis error - Service Unavailable / HTTP Error 503. The service is unavailable. 황제낙엽 2020.09.23 1739
60 [Bitnami WAMP] 설치후 PHP 설정 황제낙엽 2020.07.23 1631
59 Autoset의 대안 Bitnami WAMP file 황제낙엽 2020.04.01 1034
58 HTTP 오류 403.14 - Forbidden file 황제낙엽 2020.03.04 964
57 바인딩 편집 (사이트 바인딩) file 황제낙엽 2020.03.04 1021
56 웹사이트에서 여러 도메인을 사용하는 방법 황제낙엽 2020.03.04 1387
55 32비트 응용 프로그램 사용 (ASP, C#) file 황제낙엽 2019.10.31 3056
54 [Tomcat 7] org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15 황제낙엽 2019.10.16 1231