서버 운영/APM 서버 구축

우분투 20.04에서 phpMyAdmin 설치 03 - 보안강화 작업

씨실과 날실 2021. 3. 17. 09:00

[관련 게시물]

 

 

 

SSL 인증

지난번 글에서도 적었지만 사실 phpMyAdmin을 통한 DB 관리는 보안상 그다지 권장할만한 일은 아닙니다.

그럼에도 불구하고 phpMyAdmin을 통해 DB를 관리해야 한다면 보안 강화를 위한 추가 조치를 취해주는 것이 좋습니다.

그러기 위해서는 SSL/TLS 인증서를 설치하여 https:// 프로토콜을 통한 접속 환경을 구성하고 http://으로 접속하더라도  https://로 리다이렉트되어 연결되도록 구성해주는 것입니다.

이에 대한 자세한 내용은 아래 링크를 참고하시기 바랍니다.

 


 

phpMyAdmin은 SSL을 사용하여 원격 DB 서버에 연결할 수 있도록 하는 구성 지시문을 구비해놓고 있습니다.

SSL 관련 구성 지시문은 다음과 같은 것들이 있습니다.

phpMyAdmin의 SSL 관련 구성 지시문

 $cfg['Servers'][$i]['ssl']

$cfg['Servers'][$i]['ssl_key']

$cfg['Servers'][$i]['ssl_cert']

$cfg['Servers'][$i]['ssl_ca']

$cfg['Servers'][$i]['ssl_ca_path']

$cfg['Servers'][$i]['ssl_ciphers']

$cfg['Servers'][$i]['ssl_verify']

 

$cfg['Servers'][$i]['ssl']  지시문의 값 유형은 boolean이고 기본값은 false입니다.

$cfg['Servers'][$i]['ssl_verify'] 지시문의 값 유형은 boolean이고 기본값은 true입니다.

나머지 SSL 관련 지시문들의 값 유형은 string이고 기본값은 NULL입니다.

 

$cfg['Servers'][$i]['ssl'] = true;
$cfg['Servers'][$i]['ssl_key'] = '/etc/ssl/ssc/virtualhost01.net.key';
$cfg['Servers'][$i]['ssl_cert'] = '/etc/ssl/ssc/virtualhost01.net.key.crt';

config.inc.php 파일 하단에 위 SSL 관련 구성 지시문 예시를 참고로 자신의 서버 환경에 맞춰 추가, 수정해주시면 되빈다.

 

SSL 관련 구성 지시문에 대한 보다 자세한 설명은 위 섹션의 설명을 참고하시기 바랍합니다.

 

공식문서에서는 $cfg['Servers'][$i]['ssl_key'] 지시문의 사용 예시에 pem 포맷의 인증서 파일이 사용되었습니다.

SSL인증서는 개인키, 서버인증서, 루트인증서, 체인인증서 및  SSL 발급 요청시 생성하는 CSR 등 여러가지로 구성되어 있으며 이들 파일에 주로 사용되는 포맷은 .der, pfx, p12와 같은 바이너리 파일과  pem 포맷의 텍스트 파일입니다.

pem 포맷이 가장 광범위하고 거의 대부분의 시스템에 호환되는 산업 표준 포맷입니다.

 

phpMyAdmin 주소 접속 시 로그인 인증

phpMyAdmin은 웹을 통해 접속하므로 공격에 취약합니다. 따라서 보안 강화 조치를 할 필요가 있는데 다양한 보안 강화 조치들 중 phpMyAdmin 경로에 접속할 경우 로그인 계정과 암호를 묻도록 하는 방법이 있습니다.

 

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

터미널에서 위 명령을 실행하여 파일 편집 화면을 불러옵니다.

 

  GNU nano 4.8       /etc/apache2/conf-available/phpmyadmin.conf                
# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    AllowOverride All

    <IfModule mod_php5.c>

AllowOverride All 지시어를 위와 같은 위치에 추가해줍니다.

AllowOverride 지시어는 .htaccess 파일에서 허용할 지시어 유형을 설정하는 구문입니다.

보다 자세한 내용은 위 링크를 참고하시기 바랍니다.

구문을 추가하고 파일을 저장해줍니다.

 

study@study-VirtualBox:~$ sudo systemctl restart apache2

파일을 저장한 다음 위 명령을 실행하여 Apache2 서버를 재시작해줍니다.

 

study@study-VirtualBox:~$ sudo nano /usr/share/phpmyadmin/.htaccess

터미널에 위 명령을 실행하여 .htaccess 파일을 생성하고 이 파일에 아래와 같은 구문을 입력해줍니다.

 

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /usr/share/phpmyadmin/.htpasswd
Require valid-user

위 구문들의 의미는 다음과 같습니다.

보충 내용

AuthType Basic

인증 유형을 설정합니다. 유형은 None | Basic  |Digest | Form 네 가지가 있습니다.

이중 여기에 사용된 Basic은 지정된 사용자 아이디 및 규칙 존재 여부를 확인합니다.

이 유형은 암호 파일을 사용하여 암호 인증을 구현합니다.

 

AuthName "Restricted Files"

디렉터리에 대한 권한 영역의 이름을 설정합니다. 이렇게 설정된 이름은 인증 대화 상자의 메시지로 출력됩니다.

여기에 사용된 "Restricted Files"은 권한 있는 사용자만 해당 디렉터리 안의 파일들을 사용할 수 있다고 알리는 문구입니다.

 

AuthUserFile /usr/share/phpmyadmin/.htpasswd

사용자 인증에 사용할 사용자명와 암호 목록이 저장된 파일의 경로를 설정합니다.

 

Require valid-user

인증된 사용자에게 권한이 있는지 확인하는 지시문입니다.

유효한 모든 사용자에게만 해당 리소스에 대한 액세스 권한을 부여하도록 지정합니다.

 

구문을 입력하고 파일을 저장해줍니다.

 

study@study-VirtualBox:~$ sudo htpasswd -c /usr/share/phpmyadmin/.htpasswd study
New password: 
Re-type new password: 
Adding password for user study
study@study-VirtualBox:~$ 

위 명령을 사용하여 .htpasswd 파일에 접근을 허용할 사용자의 계정명과 암호를 입력해줍니다.

위에서는 study라는 상요자를 phpMyAdmin에 접속할 사용자로 설정해주었습니다.

 

 

$ sudo htpasswd /etc/phpmyadmin/.htpasswd 추가할 사용자명

만약 phpMyAdmin 접속을 허용할 또다른 사용자를 추가하려면 위 명령을 실행해주시면 됩니다.

 

 

https://your_domain_or_IP/phpmyadmin

이제 웹브라우저에 위와 같은 형식의 주소를 입력하여 접속하면 사용자명과 암호를 묻는 창이 뜹니다.

제대로 입력하면 그제서야 phpMyAdmin 화면으로 들어갈 수 있습니다.

 


 

이것으로 phpMyAdmin 보안 강화 작업이 마무리되었습니다.

여기에 사용된 방법을 응용하면 다른 곳에서도 적용할 수 있습니다. 

물론 이외에도 다양한 보안 강화 조치가 있습니다.