웹사이트 검색

CentOS 7 서버에서 Apache로 phpMyAdmin을 설치하고 보호하는 방법


소개

MySQL 및 MariaDB와 같은 관계형 데이터베이스 관리 시스템은 웹 사이트 및 애플리케이션의 상당 부분에 필요합니다. 그러나 모든 사용자가 명령줄에서 데이터를 관리하는 것을 편안하게 느끼는 것은 아닙니다.

이 문제를 해결하기 위해 웹 기반 관리 인터페이스의 형태로 대안을 제공하기 위해 phpMyAdmin이라는 프로젝트가 만들어졌습니다. 이 가이드에서는 CentOS 7 서버에서 phpMyAdmin 구성을 설치하고 보호하는 방법을 보여줍니다. 우리는 세계에서 가장 인기 있는 웹 서버인 Apache 웹 서버 위에 이 설정을 구축할 것입니다.

전제 조건

시작하기 전에 해결해야 할 몇 가지 요구 사항이 있습니다.

이 시스템을 구축할 견고한 기반이 있는지 확인하려면 CentOS 7용 초기 서버 설정 가이드를 실행해야 합니다. 무엇보다도 sudo 관리 명령에 대한 액세스.

이 가이드를 시작하기 위해 충족해야 하는 두 번째 전제 조건은 CentOS 7 서버에 LAMP(Linux, Apache, MariaDB 및 PHP) 스택을 설치하는 것입니다. 이것은 우리가 phpMyAdmin 인터페이스를 제공하는 데 사용할 플랫폼입니다(MariaDB는 우리가 관리하려는 데이터베이스 관리 소프트웨어이기도 합니다). 아직 서버에 LAMP를 설치하지 않은 경우 CentOS 7에 LAMP 설치에 대한 자습서를 따르십시오.

이 가이드를 따른 후 서버가 제대로 작동하는 상태이면 이 페이지의 나머지 부분을 계속 진행할 수 있습니다.

1단계 - phpMyAdmin 설치

LAMP 플랫폼이 이미 설치되어 있으므로 phpMyAdmin 소프트웨어 설치를 바로 시작할 수 있습니다. 불행히도 phpMyAdmin은 CentOS 7의 기본 저장소에서 사용할 수 없습니다.

필요한 패키지를 얻으려면 시스템에 저장소를 추가해야 합니다. EPEL 저장소(Extra Packages for Enterprise Linux)에는 우리가 찾고 있는 phpMyAdmin 패키지를 포함하여 많은 추가 패키지가 포함되어 있습니다.

EPEL 리포지토리는 epel-release라는 특수 패키지를 설치하여 서버에서 사용할 수 있습니다. 이렇게 하면 리포지토리 목록이 재구성되고 EPEL 패키지에 대한 액세스 권한이 부여됩니다.

설치하려면 다음을 입력하십시오.

sudo yum install epel-release

이제 EPEL 저장소가 구성되었으므로 다음을 입력하여 yum 패키징 시스템을 사용하여 phpMyAdmin 패키지를 설치할 수 있습니다.

sudo yum install phpmyadmin

이제 설치가 완료됩니다. 설치에는 이미 배치된 Apache 구성 파일이 포함되어 있습니다. 설치에 맞게 올바르게 작동하려면 이 부분을 약간 수정해야 합니다.

지금 텍스트 편집기에서 파일을 열어 몇 가지 사항을 변경할 수 있습니다.

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

내부에는 디렉터리에 대한 액세스 정책을 설명하는 일부 조건부 논리가 포함된 일부 디렉터리 블록이 표시됩니다. 두 개의 고유한 디렉토리가 정의되어 있으며 이 디렉토리 내에서 Apache 2.2 및 Apache 2.4(우리가 실행 중인) 모두에 유효한 구성이 있습니다.

현재 이 설정은 서버 자체에서 설정되지 않은 연결에 대한 액세스를 거부하도록 구성되어 있습니다. 서버에서 원격으로 작업 중이므로 연결의 IP 주소를 지정하기 위해 일부 줄을 수정해야 합니다.

홈 연결의 IP 주소를 참조하도록 Require ip 127.0.0.1 또는 Allow from 127.0.0.1로 표시된 줄을 변경합니다. 홈 연결의 IP 주소를 찾는 데 도움이 필요한 경우 다음 섹션을 확인하십시오. 파일에는 변경해야 하는 네 개의 위치가 있어야 합니다.

. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .

완료되면 Apache 웹 서버를 다시 시작하여 다음을 입력하여 수정 사항을 구현합니다.

sudo systemctl restart httpd.service

이제 phpMyAdmin 설치가 작동합니다. 인터페이스에 액세스하려면 웹 브라우저에서 서버의 도메인 이름 또는 공용 IP 주소로 이동한 다음 /phpMyAdmin으로 이동합니다.

http://server_domain_or_IP/phpMyAdmin

로그인하려면 유효한 MariaDB 사용자의 사용자 이름/암호 쌍을 사용하십시오. root 사용자와 MariaDB 관리 암호는 시작하기에 좋은 선택입니다. 그러면 관리 인터페이스에 액세스할 수 있습니다.

IP 주소 찾기

위의 단계를 완료하려면 데이터베이스에 액세스하는 데 사용하는 컴퓨터의 IP 주소를 알아야 합니다. 권한이 없는 사람이 서버에 연결할 수 없도록 하는 보안 예방 조치입니다.

참고: 이것은 VPS의 IP 주소가 아닌 집이나 직장 컴퓨터의 IP 주소입니다.

웹 브라우저에서 다음 사이트 중 하나를 방문하여 더 큰 웹이 귀하의 IP 주소를 보는 방법을 확인할 수 있습니다.

  • 내 IP 주소는 무엇입니까?
  • 내 IP는 무엇입니까?
  • 내 IP 주소

몇 가지 다른 사이트를 비교하고 모두 동일한 가치를 제공하는지 확인하십시오. 위의 구성 파일에서 이 값을 사용하십시오.

2단계 — phpMyAdmin 인스턴스 보안

서버에 설치된 phpMyAdmin 인스턴스는 이 시점에서 완전히 사용할 수 있어야 합니다. 그러나 웹 인터페이스를 설치함으로써 우리는 MySQL 시스템을 외부 세계에 노출시켰습니다.

포함된 인증 화면으로도 상당히 문제가 됩니다. 액세스를 제공하는 대량의 데이터와 결합된 phpMyAdmin의 인기로 인해 이와 같은 설치는 공격자의 일반적인 대상입니다.

설치 대상이 되어 손상될 가능성을 줄이기 위해 두 가지 간단한 전략을 구현할 것입니다. 일부 자동화된 봇 무차별 암호 대입 시도를 회피하기 위해 인터페이스 위치를 /phpMyAdmin에서 다른 것으로 변경할 것입니다. 또한 phpMyAdmin 로그인 화면에 도달하기 전에 통과해야 하는 추가 웹 서버 수준 인증 게이트웨이를 생성합니다.

애플리케이션의 액세스 위치 변경

Apache 웹 서버가 phpMyAdmin과 함께 작동하기 위해 phpMyAdmin Apache 구성 파일은 별칭을 사용하여 파일의 디렉토리 위치를 가리킵니다.

phpMyAdmin 인터페이스에 액세스할 수 있는 URL을 변경하려면 별칭의 이름을 바꾸면 됩니다. 지금 phpMyAdmin Apache 구성 파일을 엽니다.

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

파일 상단에 다음과 같은 두 줄이 표시됩니다.

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

이 두 줄은 별칭입니다. 즉, /phpMyAdmin 또는 /phpmyadmin이 뒤에 오는 사이트의 도메인 이름 또는 IP 주소에 액세스하면 콘텐츠가 제공됩니다. /usr/share/phpMyAdmin에서.

이러한 특정 별칭은 봇과 악의적인 사용자의 표적이 되기 때문에 비활성화하려고 합니다. 대신, 우리는 우리 자신의 별칭을 결정해야 합니다. 기억하기 쉽지만 추측하기 쉽지 않아야 합니다. URL 위치의 용도를 나타내면 안 됩니다. 우리의 경우에는 /nothingtosee로 하겠습니다.

의도한 변경 사항을 적용하려면 기존 줄을 제거하거나 주석 처리하고 다음을 추가해야 합니다.

# Alias /phpMyAdmin /usr/share/phpMyAdmin
# Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /nothingtosee /usr/share/phpMyAdmin

완료되면 파일을 저장하고 닫습니다.

변경 사항을 구현하려면 웹 서비스를 다시 시작하십시오.

sudo systemctl restart httpd.service

이제 phpMyAdmin 설치의 이전 위치로 이동하면 404 오류가 발생합니다.

http://server_domain_or_IP/phpMyAdmin

그러나 phpMyAdmin 인터페이스는 선택한 새 위치에서 사용할 수 있습니다.

http://server_domain_or_IP/nothingtosee

웹 서버 인증 게이트 설정

설치를 위해 원했던 다음 기능은 사용자가 phpMyAdmin 로그인 화면을 보기 전에 통과해야 하는 인증 프롬프트였습니다.

다행스럽게도 Apache를 포함한 대부분의 웹 서버는 이 기능을 기본적으로 제공합니다. 인증 파일을 사용하려면 Apache 구성 파일을 수정하기만 하면 됩니다.

텍스트 편집기에서 phpMyAdmin Apache 구성 파일을 다시 엽니다.

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

/usr/share/phpMyAdmin 디렉토리 블록 내에서 내부 블록 외부에 재정의 지시문을 추가해야 합니다. 다음과 같이 표시됩니다.

. . .
<Directory /usr/share/phpMyAdmin/>
   AllowOverride All
   <IfModule mod_authz_core.c>
   . . .
</Directory>
. . .

이렇게 하면 phpMyAdmin 디렉토리 자체 에 있는 .htaccess라는 파일에 추가 구성 세부 정보를 지정할 수 있습니다. 이 파일을 사용하여 암호 인증을 설정합니다.

완료되면 파일을 저장하고 닫습니다.

이 변경 사항을 구현하려면 웹 서비스를 다시 시작하십시오.

sudo systemctl restart httpd.service

.htaccess 파일 생성

구성에 재정의 지시문이 있으므로 Apache는 /usr/share/phpMyAdmin 디렉토리 내에서 .htaccess라는 파일을 찾습니다. 하나를 찾으면 포함된 지시문을 사용하여 이전 구성 데이터를 보완합니다.

다음 단계는 해당 디렉토리 내에 .htaccess 파일을 만드는 것입니다. 지금 텍스트 편집기를 사용하십시오.

sudo nano /usr/share/phpMyAdmin/.htaccess

이 파일에 다음 정보를 입력해야 합니다.

AuthType Basic
AuthName "Admin Login"
AuthUserFile /etc/httpd/pma_pass
Require valid-user

각 행의 의미를 살펴보겠습니다.

  • AuthType Basic: 이 행은 구현 중인 인증 유형을 지정합니다. 이 유형은 암호 파일을 사용하여 암호 인증을 구현합니다.
  • AuthName: 인증 대화 상자에 대한 메시지를 설정합니다. 권한이 없는 사용자가 보호 대상에 대한 지식을 얻지 못하도록 이 일반 정보를 유지해야 합니다.
  • AuthUserFile: 인증에 사용될 실제 암호 파일의 위치를 설정합니다. 이것은 제공되는 디렉터리 외부에 있어야 합니다. 잠시 후 이 파일을 생성하겠습니다.
  • 유효 사용자 필요: 인증된 사용자만 이 리소스에 액세스할 수 있도록 지정합니다. 이것은 승인되지 않은 사용자가 들어오는 것을 실제로 막는 것입니다.

이 정보 입력을 마치면 파일을 저장하고 닫습니다.

인증을 위한 비밀번호 파일 생성

.htaccess 파일에서 AuthUserFile 지시문을 사용하여 암호 파일의 위치를 지정했으므로 이제 암호 파일을 만들고 채워야 합니다.

이는 htpasswd라는 Apache 유틸리티를 사용하여 수행할 수 있습니다. 파일을 생성할 위치와 인증 세부 정보를 입력할 사용자 이름을 전달하여 명령을 호출합니다.

sudo htpasswd -c /etc/httpd/pma_pass username

-c 플래그는 이것이 초기 파일을 생성함을 나타냅니다. 디렉토리 위치는 파일에 사용될 경로와 파일 이름입니다. 사용자 이름은 추가하려는 첫 번째 사용자입니다. 사용자의 암호를 입력하고 확인하라는 메시지가 표시됩니다.

인증할 사용자를 추가하려면 -c 플래그 없이 새 사용자 이름으로 동일한 명령을 다시 호출할 수 있습니다.

sudo htpasswd /etc/httpd/pma_pass seconduser

비밀번호 파일이 생성되면 인증 게이트웨이가 구현되었으며 이제 다음에 사이트를 방문할 때 비밀번호 프롬프트가 표시됩니다.

http://server_domain_or_IP/nothingtosee

자격 증명을 입력하면 일반 phpMyAdmin 로그인 페이지로 이동합니다. 이 추가된 보호 계층은 추가된 보안 이점 외에도 인증 시도로부터 MySQL 로그를 깨끗하게 유지하는 데 도움이 됩니다.

결론

이제 상당히 안전한 웹 인터페이스에서 MySQL 데이터베이스를 관리할 수 있습니다. 이 UI는 MySQL 명령 프롬프트에서 사용할 수 있는 대부분의 기능을 제공합니다. 데이터베이스와 스키마를 보고, 쿼리를 실행하고, 새로운 데이터 세트와 구조를 생성할 수 있습니다.