본문 바로가기
Linux/TIP

[CentOS 8] phpMyAdmin 최신버전 설치와 보안설정

by aegypius 2021. 4. 12.
728x90
반응형

 


  새벽에 phpMyAdmin을 설치한 후로 db계정의 모든 암호가 변경되는 끔찍한 사건이 발생했다. db를 사용하는 모든 웹사이트들은 db와의 연결 오류가 발생하면서 작동 하지 않았다. 수차례의 시행착오를 거쳐서 mariadb를 안전모드에서 실행시킨 후 root계정의 암호를 원래의 암호로 변경할 수 있었다. root 계정을 복구 한 후 나머지 계정의 작업은 순조롭게 진행되었다. phpmyadmin을 설치 한 후 첫 화면에서 root로 로그인을 했었고... 첫 페이지에서 무슨 암호를 추가로 넣었었는데 그게 발단인 듯 하다. 정확하게 무엇이었는지(blow_fish는 아니었던거 같은데....) 기억이 나지 않지만 설치방법을 정리 하면서.....다시 점검해 볼 계획이다. 왜 db의 모든 계정의 암호가 순식간에 바뀌게 된 것인지를....
* 다시 phpmyadmin.net에 접속해보니 새벽에 설치했던 버전이 5.1이었다. 이번에는 Lastest Stable Version을 받아서 다시 설치해야겠다.......
* 이럴 때는 VPS의  shapshot이 간절하기도 하다.-_-;

  CentOS 7에서는 yum으로 설치가 가능하지만 CentOS 8에서는 방법을 찾지 못해서 수동으로 설치했다. 소스 코드를 컴파일하는 정도는 아니고 그냥 파일을 받아서 원하는 디렉토리에 넣고 설정파일을 조금 수정하면 작동한다. 이와 같은 방법으로 CentOS 7에서도 설치는 가능할 것이다.

  phpmyadmin.net에 접속하면 아래와 같은 화면이 열린다. 우측 상단의 Download 버튼을 클릭하면 zip으로 압축된 파일을 받을 수 있다. 서버에서 직접 다운받아서 압축을 풀 계획이기에 상단의 Download메뉴를 선택했다.

  상단 메뉴의 가장 우측에 있는 download 를 선택하고 화면을 조금 내려보면 아래와 같이 Lastest Stable Version을 볼 수 있다.  

  wget으로 직접 다운받아서 압축을 풀을 것이기에 아래와 같이 두 번째 줄의 phpMyAdmin-lastest-all-languages.tar.gz의 '링크주소'를 복사하면 PuTTY의 콘솔화면에서 바로 붙여넣을 수 있어서 편하다.

  phpMyAdmin은 어디에 두어도 상관없겠지만 CentOS 7 에서 yum으로 설치했을 때와 같은 디렉토리인 /usr/share의 하위에 설치하기로 했다. 아래와 같이 /usr/share에 phpmyadmin을 다운받아보자.

[root@centos8 share]# pwd
/usr/share
[root@centos8 share]# wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
--2021-04-11 14:40:22--  https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
Resolving www.phpmyadmin.net (www.phpmyadmin.net)... 2a02:6ea0:d300::8, 89.187.160.6
Connecting to www.phpmyadmin.net (www.phpmyadmin.net)|2a02:6ea0:d300::8|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://files.phpmyadmin.net/phpMyAdmin/5.1.0/phpMyAdmin-5.1.0-all-languages.tar.gz [following]
--2021-04-11 14:40:23--  https://files.phpmyadmin.net/phpMyAdmin/5.1.0/phpMyAdmin-5.1.0-all-languages.tar.gz
Resolving files.phpmyadmin.net (files.phpmyadmin.net)... 2a02:6ea0:d300::8, 89.187.160.8
Connecting to files.phpmyadmin.net (files.phpmyadmin.net)|2a02:6ea0:d300::8|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13687393 (13M) [application/octet-stream]
Saving to: ‘phpMyAdmin-latest-all-languages.tar.gz’

phpMyAdmin-latest-all-languages.t 100%[===========================================================>]  13.05M  37.1MB/s    in 0.4s

2021-04-11 14:40:24 (37.1 MB/s) - ‘phpMyAdmin-latest-all-languages.tar.gz’ saved [13687393/13687393]

[root@centos8 share]#

  여기서 phpMyAdmin-lastest-all-languages.tar.gz 의 압푹을 풀어보자.

[root@centos8 share]# tar -xvf *gz

  위와 같이 압푹을 풀면 새로 생성된 phpMyAdmin-5.1.0-all-languages 라는 디렉토리에 압축이 풀리게 된다. 디렉토리의 이름을 phpmyadmin으로 그나마 짧게 변경하자. 

[root@centos8 share]# mv phppMyAdmin-5.1.0-all-languages phpmyadmin

  이제 phpmyadmin 디렉토리에 위치한 config.sample.inc.php를 config.inc.php로 이름을 변경하고 에디터로 열어보자. 상단(대략 16번째 줄)에 blowfish항목이 나오는데

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

 여기에는 특수문자를 포함한 임의의 텍스트를 넣어도 되고 아래의 사이트에서 임의의 값을 얻어서 넣어도 된다. 아래와 같다.

$cfg['blowfish_secret'] = '#7:+56[3Az7kn9z1!15[-7-0PedyF8Kz'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

 

blowfish secret 코드를 생성해 주는 사이트

phpsolved.com/phpmyadmin-blowfish-secret-generator/?g=[insert_php]echo%20$code;[/insert_php]

www.question-defense.com/tools/phpmyadmin-blowfish-secret-generator

 

  이제 phpmyadmin을 위한 아파치의 가상호스트 설정파일을 추가해야 한다. 다른 가상호스트 파일들이 위치하고 있는 /etc/httpd/conf.d 에 생성해 주면 될 것이다. 

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
      Require all granted
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpmyadmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require all granted
     </RequireAny>

   </IfModule>

   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>

</Directory>

  가장 첫 번째 줄의 '/usr/share/phpmyadmin'과 두 곳의 <Directory> 구분의 '/usr/share/phpmyadmin/' 은 실제로 phpmyadmin이 설치된 디렉토리로 지정해야 한다.

  첫 번째 줄의 Alias는 가급적이면 변경하는 것이 좋다. 기본값인 /phpmyadmin을 사용한다면 외부에서의 수많은 스크립트의 공격(접속시도)을 당하게 될 것이다. (phpmyadmin의 기본 접속 주소는 "도메인/phpmyadmin이다)

  Alias 구문은 아래와 같이 두 개 이상 설정할 수 있으며, 대소문자를 구분하기 때문에 적절히 사용하는 것이 좋다.

Alias /mywebDB /usr/share/phpmyadmin
Alias /phpDB /usr/share/phpmyadmin

  위와 같이 설정했다면 '도메인/mywebDB' 나 '도메인/phpDB'로 접근했을 때에만 phpmyadmin이 열린다.

  로그인하게 되면 화면의 하단에에 아래와 같은 알림메시지가 보인다.

  첫 번째

  • "phpMyAdmin 설정 스토리지가 완전히 설정되지 않아, 일부 확장 기능들이 비활성화 된 상태입니다. 원인을 확인하려면 여기를 클릭하세요. 대신 데이터베이스 작업 탭을 사용하여 설정할 수도 있습니다."

  이는 phpmyadmin이라는 이름의 데이터베이스를 생성하고 설정하라는 메시지이다. 일부 확장기능이 비활성화 되어 있다고 하는데 사용상의 불편함이 없다면 그냥 써도 무방하다. 이를 없애고 싶다면...

  phpmyadmin을 설치한 디렉토리(/usr/share/phpmyadmin)의 하위에 'sql' 이라는 디렉토리가 있다. 이곳의 create_table.sql을 이용해서 phpmyadmin이라는 이름의 db를 생성하자. 아래와 같다.

[root@centos8 sql]# pwd
/usr/share/phpmyadmin/sql
[root@centos8 sql]# ll
total 28
-rw-r--r-- 1 root root 10949 Feb 24 15:05 create_tables.sql
-rw-r--r-- 1 root root  1665 Feb 24 15:05 upgrade_column_info_4_3_0+.sql
-rw-r--r-- 1 root root   671 Feb 24 15:05 upgrade_tables_4_7_0+.sql
-rw-r--r-- 1 root root  5691 Feb 24 15:05 upgrade_tables_mysql_4_1_2+.sql
[root@centos8 sql]# mysql < create_tables.sql -uroot -p
Enter password:
[root@centos8 sql]#

  두 번째

  • $cfg[]TempDir''(/usr/share/phpmyadmin/tmp/)에 액세스할 수 없음. phpMyAdmin은 템플릿을 캐시할 수 없으며 이로 인해 속도가 느려질 것이다.

  phpmyadmin을 설치한디렉토리의 하위에 tmp디렉토리를 하나 생성하자. 만약에 만들었는데도 메세지가 사라지지 않는다면 tmp 디렉토리의 소유권을 apache 계정에게 넘겨주자. 

  이제 오류메시지들이 모두 사라졌다.


phpMyAdmin의 보안설정

 phpmyadmin을 사용하기 위해서 웹에서 접속을 하면, 아래와 같이 id와 비밀번호를 사용해서 정식 사용자인지 확인하는 단계를 추가로 만들 수 있다. 이러한 인증과정을 거쳐야지만 익숙한 phpmyadmin의 접속화면이 열린다. 아래와 같다. 이때 필요한 로그인 정보는 별도로 생성해야 한다. 만들어보자.

  위의 인증과정은 .htaccess를 이용해서 구현한 것이므로 phpmyadmin을 위해 설정한 아파치의 가상호스트 설정파일을 아래와 같이 수정하자.

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin/>
   AddDefaultCharset UTF-8
# 아래의 한 줄이 추가되었다.   
   AllowOverride All

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
      Require all granted
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpmyadmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require all granted
     </RequireAny>

   </IfModule>

   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>

</Directory>

  사용자 인증을 위한 사용자이름과 비밀번호를 저장할 파일은 아래와 같이 만들 수 있다.

# htpasswd -c /usr/share/phpmyadmin/.htpasswd phpadmin

  파일의 저장 위치는 phpmyadmin이 설치된 /usr/share/phpmyadmin으로 설정했지만 어디에 두어도 상관없다. 편한 곳에 만들어두자. 파일의 속성은 히든으로 했다. 위의 인증파일을 만들 때에 두 번의 비밀번호를 입력했을 것이다. 로그인 할 때의 사용자 이름은 phpadmin이며, 암호는 만들 때 입력했던 암호로 지정된다.

  마지막으로 phpmyadmin이 설치된 디렉토리(/usr/share/phpmyadmin)에 .htaccess파일을 만들자. 내용은 아래와같다.

AuthType basic
AuthName "Authentication Required"
AuthUserFile /usr/share/phpmyadmin/.htpasswd
Require valid-user

  이제 아파치 웹서비스를 재시작해보자.

  .htpasswd에 여러개의 계정과 비밀번호를 저장할 수 있다. 나는 .htpasspd는 아래와 같이 3개의 계정을 등록했지만...  id와 비밀번호가 너무 많은 것도 정신없는 것은 사실이다..

pius:$apr1$2ghnppGf$HouxcqhHh5r2uX7Uisqwp1
harepius:$apr1$H13Xkwi3$qNMy2bGbRv3XOOiprk9kX0
phreun:$apr1$3Rm2MU3J$7WvqNMex2QDi95J9Do/qT0

* 설치하고 보니....phpmyadmin 의 lastest stable version 또한 5.1 이었다. -_-;

참고 : How to Install and Secure phpMyAdmin on CentOS 8 | Atlantic.Net

 

How to Install and Secure phpMyAdmin on CentOS 8 | Atlantic.Net

phpMyAdmin is an open-source software tool used for managing MySQL/MariaDB databases. Learn how to install and secure phpMyAdmin on CentOS 8.

www.atlantic.net


만약...'phpMyAdmin 설정 스토리지가 완전히 설정되지 않아,.....' 메시지가 사라지지 않는다면 최근에 다시 정리한 아래의 글을 참고하자.

2022.08.03 - [Linux/TIP] - [CentOS] phpMyAdmin 최신버전 설치와 설정 [최종]

 

[CentOS] phpMyAdmin 최신버전 설치와 설정 [최종]

대략 2년 전에 phpmyadmin에 대한 글을 두 번이나 정리했었다. 이번에 새로운 VPS에 서버를 구축하면서 다시한 번 정리해야 할 필요성을 느꼈다. 크게 두 가지 이유 때문인데, 첫 째는 root로 로그인

aegypius.tistory.com

 

728x90
반응형

댓글