Ubuntu 14.04 서버에서 Nginx를 사용하여 phpMyAdmin을 설치하고 보호하는 방법

Ubuntu 14.04 서버에서 Nginx를 사용하여 phpMyAdmin을 설치하고 보호하는 방법

2022-06-01 last update

8 minutes reading Ubuntu MySQL LEMP Nginx

소개


대부분의 웹 사이트와 응용 프로그램은 MySQL과 같은 관계 데이터베이스 관리 시스템을 필요로 한다.그러나 모든 사용자가 명령줄에서 데이터를 관리할 수 있는 것은 아니다.
이 문제를 해결하기 위해 phpMyAdmin이라는 프로젝트를 만들어서 웹 기반의 관리 인터페이스 형식으로 다른 선택을 제공합니다.이 가이드에서는 Ubuntu 14.04 서버에서 phpMyAdmin 설정을 설치하고 보호하는 방법을 보여 줍니다.우리는 Nginx 웹 서버에 이 설정을 구축할 것입니다. Nginx 웹 서버는 좋은 성능 프로필을 가지고 있어서 다른 웹 서버보다 재부팅을 잘 처리할 수 있습니다.

선결 조건


우리가 시작하기 전에 해결해야 할 몇 가지 수요가 있다.
이 시스템을 구축하기 위한 튼튼한 기반을 확보하기 위해서 저희 initial server setup guide for Ubuntu 14.04 를 실행해야 합니다.이외에도 sudo 관리 명령에 접근할 수 있는 비루트 사용자를 설정하는 과정을 안내합니다.
이 안내서를 읽으려면 두 번째 필수 조건은 Ubuntu 14.04 서버에 LEMP(Linux, Nginx, MySQL 및 PHP) 스택을 설치하는 것입니다.이것은 우리가 phpMyAdmin 인터페이스를 서비스하는 플랫폼(MySQL도 우리가 관리하고자 하는 데이터베이스 관리 소프트웨어)이다.서버에 LEMP가 설치되어 있지 않은 경우 자습서installing LEMP on Ubuntu 14.04를 따르십시오.
서버가 이 안내서를 따라 정상적으로 실행 중일 때, 이 페이지의 나머지 부분을 계속할 수 있습니다.

1단계 - phpMyAdmin 설치


우리의 LEMP 플랫폼이 있으면 우리는 즉시 phpMyAdmin 소프트웨어를 설치할 수 있다.이것은 Ubuntu의 기본 저장소에서 사용할 수 있기 때문에 설치 과정이 간단합니다.
우선, 서버의 로컬 패키지 인덱스를 업데이트하여 사용할 수 있는 패키지에 대한 새로운 참조를 확보합니다.그런 다음 apt 패키지 도구를 사용하여 소프트웨어를 저장소에서 분리하여 시스템에 설치할 수 있습니다.
sudo apt-get update
sudo apt-get install phpmyadmin
설치 과정에서 정보를 입력하라는 메시지가 표시됩니다.소프트웨어가 자동으로 어떤 웹 서버를 설정하기를 원하는지 물어볼 것입니다.우리가 사용하고 있는 웹 서버 Nginx는 사용할 수 있는 옵션 중 하나가 아니기 때문에, 탭 키를 누르면 이 알림을 돌릴 수 있습니다.
다음 알림은 phpmyadmin에서 사용할 데이터베이스를 설정하고 싶은지 물어볼 것입니다.계속하려면 [예]를 선택합니다.
이러한 변경을 허용하려면 MySQL 설치 중에 구성된 데이터베이스 관리 암호를 입력해야 합니다.이후 phpMyAdmin의 데이터를 저장할 새 데이터베이스를 선택하고 비밀번호를 확인하도록 요구합니다.
설치가 완료되었습니다.Nginx 웹 서버가 phpMyAdmin 파일을 정확하게 찾고 서비스할 수 있도록 다음 내용을 입력하여 설치 파일에서 Nginx 문서 루트 디렉터리에 대한 기호 링크를 만듭니다.
sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html
우리가 해결해야 할 마지막 문제는 phpMyAdmin이 의존하는 dbconfig-common PHP 모듈을 사용하는 것이다.이것은 phpMyAdmin과 함께 설치되어 있기 때문에 PHP 프로세서를 열고 다시 시작하기만 하면 됩니다.
sudo php5enmod mcrypt
sudo service php5-fpm restart
이로써 phpMyAdmin 설치가 실행됩니다.이 인터페이스에 액세스하려면 웹 브라우저에서 서버의 도메인 이름 또는 공용 IP 주소로 이동한 후 mcrypt:
http://server_domain_or_IP/phpmyadmin

로그인하려면 유효한 MySQL 사용자의 사용자 이름/암호 쌍을 사용합니다./phpmyadmin 사용자 및 MySQL 관리 암호는 시작 시 유용합니다.그런 다음 관리 인터페이스에 액세스할 수 있습니다.

주변을 클릭하여 인터페이스를 익히십시오.다음 절에서, 우리는 새로운 인터페이스를 보호하는 조치를 취할 것이다.

2단계 - phpMyAdmin 인스턴스 보호


서버에 설치된 phpMyAdmin 인스턴스를 완전히 사용할 수 있어야 합니다.그러나 웹 인터페이스를 설치함으로써 우리는 MySQL 시스템을 외부 세계에 폭로했다.
인증 화면이 포함되어 있어도 상당히 큰 문제다.phpMyAdmin의 유행과 대량의 데이터 접근으로 인해 이런 설치는 공격자의 흔한 목표이다.
우리는 설치가 공격받고 파괴될 기회를 줄이기 위해 두 가지 간단한 전략을 실시할 것이다.우리는 일부 자동 로봇 폭력 시도를 피하기 위해 인터페이스의 위치를 root 에서 다른 위치로 변경할 것이다.phpMyAdmin 로그인 화면에 들어가기 전에 통과해야 하는 추가 웹 서버급 인증 게이트웨이를 만들 것입니다.

응용 프로그램 액세스 위치 변경


Nginx 웹 서버에서 phpMyAdmin 파일을 검색하고 서비스하기 위해서, 우리는 앞의 단계에서 phpMyAdmin 디렉터리에서 문서 루트 디렉터리까지의 기호 링크를 만들었습니다.
phpMyAdmin 인터페이스에 액세스할 수 있는 URL을 변경하려면 기호 링크의 이름을 바꾸십시오.Nginx 문서 루트 디렉토리로 이동하여 우리가 무엇을 하는지 자세히 알아보십시오.
cd /usr/share/nginx/html
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50 phpmyadmin -> /usr/share/phpmyadmin
보시다시피 이 디렉터리에는 /phpmyadmin 라는 기호 링크가 있습니다.이 링크의 이름을 원하는 이름으로 변경할 수 있습니다.이것은 브라우저에서 phpMyAdmin에 접근할 수 있는 위치를 변경합니다. 이것은 하드코딩 로봇 프로그램에서 접근점을 숨기는 데 도움이 됩니다.
위치의 용도를 표시하지 않는 이름을 선택하십시오.이 안내서에서는 액세스 위치 phpmyadmin 를 명명합니다.이렇게 하려면 링크의 이름을 바꾸기만 하면 됩니다.
sudo mv phpmyadmin nothingtosee
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50 nothingtosee -> /usr/share/phpmyadmin
현재 phpMyAdmin이 설치된 이전 위치로 이동하면 404 오류가 발생합니다.
http://server_domain_or_IP/phpmyadmin

하지만 phpMyAdmin 인터페이스는 우리가 선택한 새 위치에서 사용할 수 있습니다.
http://server_domain_or_IP/nothingtosee

웹 서버 인증 문 설정


우리가 설치하고자 하는 다음 기능은 인증 알림입니다. 사용자가 phpMyAdmin이 화면에 로그인하기 전에 이 알림을 통과해야 합니다.
다행히도 Nginx를 포함한 대부분의 웹 서버는 이 기능을 기본 방식으로 제공한다.자세한 정보가 있는 Nginx 구성 파일만 수정하면 됩니다.
이 작업을 수행하기 전에 인증 자격 증명을 저장하는 암호 파일을 만듭니다.Nginx는 함수를 사용하여 암호를 암호화해야 합니다.서버에 이미 설치되어 있어야 하는 OpenSSL 키트에는 이 기능이 포함되어 있습니다.
암호화 암호를 만들려면 다음을 입력합니다.
openssl passwd
암호를 입력하고 확인하라는 메시지가 표시됩니다.그런 다음 암호의 암호화 버전이 다음과 같이 표시됩니다.
O5az.RSPzd.HE
생성할 인증 파일에 붙여넣어야 하기 때문에 이 값을 복사합니다.
이제 인증 파일을 만듭니다.이 파일/nothingtosee을 호출하여 Nginx 구성 디렉토리에 배치합니다.
sudo nano /etc/nginx/pma_pass
이 파일에서 사용할 사용자 이름과 사칭 (:), 그리고 crypt() 유틸리티에서 받은 암호의 암호화 버전만 지정하면 됩니다.
사용자 이름pma_pass을 지정하지만 다른 사용자 이름을 선택해야 합니다.이 안내서의 파일은 다음과 같습니다.
demo:O5az.RSPzd.HE
완료되면 파일을 저장하고 닫습니다.
이제 Nginx 프로필을 수정하려고 합니다.이 파일을 시작하려면 텍스트 편집기에서 엽니다.
sudo nano /etc/nginx/sites-available/default
이 파일에서 우리는 새로운 위치 부분을 추가해야 한다.이것은 우리가 phpMyAdmin 인터페이스를 위해 선택한 위치에 대한 것입니다. (이 안내서에서 선택했습니다 openssl passwd.demo 블록 내에 있지만 다른 블록 외부에서 단면을 생성합니다.우리의 예제에서 우리는 새로운 위치 블록을 /nothingtosee 블록 아래에 놓을 것이다.
server {
    . . .

    location / {
        try_files $uri $uri/ =404;
    }

    location /nothingtosee {
    }

    . . .
}
이 블록에서 server라는 명령의 값을 인증 메시지로 설정해야 합니다. 알림 문자가 사용자에게 표시됩니다.우리는 인증되지 않은 사용자에게 우리가 무엇을 보호하고 있는지 밝히고 싶지 않기 때문에 구체적인 세부 사항을 제공하지 않는다.예제에서는 Admin Login만 사용합니다.
그리고 웹 서버가 만든 인증 파일을 가리키는 명령을 location / 사용해야 합니다.Nginx는 사용자에게 인증 세부 정보를 알려주고 입력한 값이 지정된 파일에서 찾은 값과 일치하는지 확인합니다.
완료되면 다음과 같이 파일이 표시됩니다.
server {
    . . .

    location / {
        try_files $uri $uri/ =404;
    }

    location /nothingtosee {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/pma_pass;
    }

    . . .
}
완료되면 파일을 저장하고 닫습니다.
새 인증 문을 실행하려면 웹 서버를 다시 시작해야 합니다.
sudo service nginx restart
현재 웹 브라우저의 phpMyAdmin 위치에 접근하면 (phpMyAdmin을 사용하고 있다면 캐시를 지우거나 다른 브라우저 세션을 사용해야 할 수도 있습니다) auth_basic 파일에 추가된 사용자 이름과 비밀번호를 입력하라는 메시지를 보내야 합니다.
http://server_domain_or_IP/nothingtosee

자격 증명을 입력하면 정상적인 phpMyAdmin 로그인 페이지로 이동합니다.보안 이점 외에도 이 추가 보호층은 MySQL 로그가 인증 시도를 깨끗하게 유지하는 데 도움을 줄 것입니다.

결론


현재, 당신은 상당히 안전한 웹 인터페이스에서 MySQL 데이터베이스를 관리할 수 있습니다.이 UI는 MySQL 명령 프롬프트에서 사용할 수 있는 대부분의 기능을 공개합니다.데이터베이스와 구조를 보거나 조회를 실행하고 새로운 데이터 집합과 구조를 만들 수 있습니다.