갈루아의 반서재

우분투 18.04 Nginx 기반으로 작동하는 phpMyAdmin 을 구성해보자. phpMyAdmin 은 오픈 소소 소프트웨어로 GUI 를 통한 MySQL 데이터베이스를 관리하는데 도움을 준다. 


Install phpMyAdmin


패키지 업데이트와 phpMyAdmin 설치를 동시에 진행하자. 아래를 보면 2개의 명령문이 && 로 결합되었음을 알 수 있다. 앞 부분은 최신 버전으로 패키지를 업데이트하는 부분이고, 뒷 부분은 phpMyAdmin 을 설치하는 부분이다. y 와 엔터를 눌러서 계속 진행한다. 

1
~$ sudo apt update && sudo apt install phpmyadmin
cs


물론 아래 화면은 사용자 환경에 따라 상이할 수 있다. Yes 를 선택하고 엔터를 눌러서 데이터베이스를 설치하고 구성한다. 

MySQL 어플리케이션 암호는 phpMyAdmin 가 내부적으로 MySQL 과 통신하기 위해 사용하는 것으로, 비워두고 엔터를 치면 자동으로 생성된다.

해당 암호가 현재 보안 수준에 미달하는 경우에는 아래와 같은 창이 뜨기도 한다. 

다음으로 웹서버를 고르는 화면이 뜬다. 보는바와 같이 Nginx 를 위한 옵션은 없음을 알 수 있다. TAB 을 누르고 엔터를 눌러 웹서버를 선택하지 않고 넘어간다. 

phpMyAdmin 설치가 끝났다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
~$ sudo apt install phpmyadmin
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  www-browser
The following NEW packages will be installed:
  phpmyadmin
0 upgraded, 1 newly installed, 0 to remove and 61 not upgraded.
Need to get 0 B/3861 kB of archives.
After this operation, 25.0 MB of additional disk space will be used.
Preconfiguring packages ...
Determining localhost credentials from /etc/mysql/debian.cnf: succeeded.
Selecting previously unselected package phpmyadmin.
(Reading database ... 113184 files and directories currently installed.)
Preparing to unpack .../phpmyadmin_4%3a4.6.6-5_all.deb ...
Unpacking phpmyadmin (4:4.6.6-5) ...
Setting up phpmyadmin (4:4.6.6-5) ...
Determining localhost credentials from /etc/mysql/debian.cnf: succeeded.
dbconfig-common: writing config to /etc/dbconfig-common/phpmyadmin.conf
 
Creating config file /etc/dbconfig-common/phpmyadmin.conf with new version
 
Creating config file /etc/phpmyadmin/config-db.php with new version
checking privileges on database phpmyadmin for phpmyadmin@localhost: user creation needed.
granting access to database phpmyadmin for phpmyadmin@localhost: success.
verifying access for phpmyadmin@localhost: success.
creating database phpmyadmin: success.
verifying database phpmyadmin exists: success.
populating database via sql...  done.
dbconfig-common: flushing administrative password
Processing triggers for man-db (2.8.3-2) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
cs



2. Create Symbolic Link


Ngnix 가 phpMyAdmin 을 제대로 서비스하기 위해서는, phpMyAdmin 디렉토리 /usr/share/phpmyadmin 으로부터 Nginx 도큐먼트 루트 디렉토리로 심볼릭 링크를 생성해야 한다. 

우분투 18.04 에서 Nginx 도큐먼트 루트 디렉토리의 기본 위치는 /var/www/html 이지만 설치 환경에 따라 상이할 수는 있다. 

루트 디렉토리를 확인했으면 심볼릭 링크를 다음과 같이 걸어보자.  루트 디렉토리가 /var/www/html 라고 가정하면 다음과 같이 하면 된다. 

1
~$ sudo ln -/usr/share/phpmyadmin /var/www/html/phpmyadmin
cs

 

3. Test phpMyAdmin


다음과 같은 형식으로 이제 phpMyAdmin 웹 인터페이스에 접근할 수 있을 것이다. 

http://yourdomain/phpmyadmin/ 

http://111.222.33.44/phpmyadmin/ 

로그인을 해보자. 만약 다음과 같이 에러 메시지가 나오면 물론 암호가 틀려도 아래와 같은 메시지가 나옴에 주의하자. 

 mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)

암호가 틀린 경우가 아니라면 phpMyAdmin 을 위한 슈퍼유저 계정을 생성해야 한다. 다음 링크를 참고해서 진행하자. 
https://devanswers.co/installing-phpmyadmin-nginx-ubuntu-18-04/


5. Obscure phpMyAdmin URL


봇을 비롯해 해커들은 지속적으로 phpMyAdmin 로그인 페이지를 가지고 있는 웹서버를 스캔하고 있다. 따라서 URL을 변경할 필요가 있다. 그럼 여기서 example.com/phpmyadmin 을 example.com/pma_hidden 으로 변경해보자. 

앞서 2단계에서 우리는 도큐먼트 루트 /var/www/html/phpmyadmin 에 대한 심볼릭 링크를 생성했다. 지금 필요한 것은 위의 심볼릭 링크의 이름을 변경해주는 것이다. 앞서 언급한 pma_hidden 으로 말이다. 다음과 같다. 

1
2
~$ sudo mv /var/www/html/phpmyadmin /var/www/html/pma_hidden
 
cs


이제 http://yourdomain/pma_hidden/ 으로 phpMyAdmin 에 접근할 수 있다.


6. Secure phpMyAdmin


보안을 강화하기 위해 Nginx 에 인증 절차를 도입하자. 먼저 강력한 패스워드를 생성한 뒤 보관하자. 다음 링크를 이용하면 좋다. 

PassGen.co - generate a strong password

다음으로 Nginx 와 Apache 에 모두 작동하는 .htpasswd 파일을 생성해주는 apache2-utils 를 설치한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
~$ sudo apt install apache2-utils
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libapr1 libaprutil1
The following NEW packages will be installed:
  apache2-utils libapr1 libaprutil1
0 upgraded, 3 newly installed, 0 to remove and 61 not upgraded.
Need to get 259 kB of archives.
After this operation, 863 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 libapr1 amd64 1.6.3-2 [90.9 kB]
Get:2 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 libaprutil1 amd64 1.6.1-2 [84.4 kB]
Get:3 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 apache2-utils amd64 2.4.29-1ubuntu4.4 [83.5 kB]
Fetched 259 kB in 0s (10.0 MB/s)
Selecting previously unselected package libapr1:amd64.
(Reading database ... 114869 files and directories currently installed.)
Preparing to unpack .../libapr1_1.6.3-2_amd64.deb ...
Unpacking libapr1:amd64 (1.6.3-2) ...
Selecting previously unselected package libaprutil1:amd64.
Preparing to unpack .../libaprutil1_1.6.1-2_amd64.deb ...
Unpacking libaprutil1:amd64 (1.6.1-2) ...
Selecting previously unselected package apache2-utils.
Preparing to unpack .../apache2-utils_2.4.29-1ubuntu4.4_amd64.deb ...
Unpacking apache2-utils (2.4.29-1ubuntu4.4) ...
Setting up libapr1:amd64 (1.6.3-2) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Setting up libaprutil1:amd64 (1.6.1-2) ...
Processing triggers for man-db (2.8.3-2) ...
Setting up apache2-utils (2.4.29-1ubuntu4.4) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
cs


설치가 완료되면 .htpasswd 파일을 생성할 수 있다. 아래 username 은 원하는 것으로 변경해도 좋다. 

1
2
3
4
5
6
 
~$ sudo htpasswd -/etc/nginx/.htpasswd username
New password:
Re-type new password:
Adding password for user username
 
cs


이제 사용자 이름과 암호가 포함된 .htpasswd 파일이 생성되었을 것이다. 확인해보자. 

1
2
3
4
 
~$ cat /etc/nginx/.htpasswd
username:$adhkdijsidjd878dhkdjkdhksddgYn.
 
cs


이제 Nginx 에 2개의 지시문을 넣도록 하자. 환경설정 파일의 위치는 환경에 따라 상이할 수 있다. 일반적으로는 /etc/nginx/sites-available/default 에 위치해 있다. 만약 다수의 도메인 환경으로 구성했다면, 설정 파일은 /etc/nginx/sites-available/example.com 에 있을 수도 있다. 여기서는 /etc/nginx/sites-available/example.com 에 해당 파일이 있다고 가정하자. 파일을 열어 편집하자. 

1
~$ sudo nano /etc/nginx/sites-available/example.com
cs


location 블록으로 이동하여 새로운 블록에 아래 내용을 붙여넣자. 위에서 수정한 경로이름인 pma_hidden 으로 말이다. 

1
2
3
4
5
6
 
       location /pma_hidden {
               auth_basic "Restricted Access";
               auth_basic_user_file /etc/nginx/.htpasswd;
        }
 
cs


파일을 저장하고 나온다 (CTRL + X  입력하고 Y 누른 뒤 엔터).

Nginx 환경설정 파일이 문제없는지 검증한다.

1
2
3
4
5
 
~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
 
cs


문제가 없으면 Nginx 서비스를 재시작한다. 

1
2
3
 
~$ sudo service nginx reload
 
cs


이제 http://yourdomain/pma_hidden/  페이지를 로딩하면, 다음 인증창을 만날 수 있다.



[원문출처] https://devanswers.co/installing-phpmyadmin-nginx-ubuntu-18-04/