웹사이트 검색

Ubuntu 18.04에서 phpMyAdmin을 설치하고 보호하는 방법


소개

많은 사용자가 MySQL과 같은 데이터베이스 관리 시스템의 기능을 필요로 하지만 MySQL 명령줄 클라이언트에서만 시스템과 상호 작용하는 것이 불편할 수 있습니다.

phpMyAdmin은 사용자가 웹 인터페이스를 통해 MySQL과 상호 작용할 수 있도록 만들어졌습니다. 이 가이드에서는 Ubuntu 18.04 시스템에서 데이터베이스를 안전하게 관리하는 데 사용할 수 있도록 phpMyAdmin을 설치하고 보호하는 방법에 대해 설명합니다.

전제 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • Ubuntu 18.04를 실행하는 서버. 이 서버에는 sudo 권한이 있는 루트가 아닌 관리 사용자와 UFW로 구성된 방화벽이 있어야 합니다. 이를 설정하려면 Ubuntu 18.04용 초기 서버 설정 가이드를 따르세요.
  • 서버에 설치된 LAMP 스택. 이를 설정하려면 Ubuntu 18.04에 LAMP 스택을 설치하는 방법에 대한 이 가이드를 따를 수 있습니다.

마지막으로 phpMyAdmin과 같은 소프트웨어를 사용할 때 다음과 같은 중요한 보안 고려 사항이 있습니다.

  • MySQL 설치와 직접 통신
  • MySQL 자격 증명을 사용하여 인증 처리
  • 임의의 SQL 쿼리 실행 및 결과 반환

이러한 이유와 자주 공격 대상이 되는 널리 배포된 PHP 응용 프로그램이기 때문에 일반 HTTP 연결을 통해 원격 시스템에서 phpMyAdmin을 실행해서는 안 됩니다. SSL/TLS 인증서로 구성된 기존 도메인이 없는 경우 Apache 가상 호스트 설정에 대한 이 가이드를 따를 수 있습니다.

이 단계를 마치면 이 가이드를 시작할 준비가 된 것입니다.

1단계 - phpMyAdmin 설치

시작하려면 기본 Ubuntu 리포지토리에서 phpMyAdmin을 설치합니다.

먼저 서버의 패키지 색인을 업데이트합니다.

  1. sudo apt update

그런 다음 apt를 사용하여 파일을 풀다운하고 시스템에 설치합니다.

  1. sudo apt install phpmyadmin php-mbstring php-gettext

설치를 올바르게 구성하기 위해 몇 가지 질문을 합니다.

경고: 프롬프트가 나타나면 "apache2\가 강조 표시되지만 선택되지는 않습니다. Apache를 선택하려면 SPACE, TAB, ENTER를 누르십시오. .

SPACE를 눌러 Apache를 선택하지 않으면 설치 프로그램이 설치 중에 필요한 파일을 이동하지 않습니다.

  • 서버 선택을 위해 apache2를 선택합니다.
  • dbconfig-common을 사용하여 데이터베이스를 설정할 것인지 묻는 메시지가 나타나면 를 선택합니다.
  • 그런 다음 phpMyAdmin에 대한 MySQL 애플리케이션 암호를 선택하고 확인하라는 메시지가 표시됩니다.

설치 프로세스는 phpMyAdmin Apache 구성 파일을 /etc/apache2/conf-enabled/ 디렉토리에 추가하고 여기서 자동으로 읽습니다. 해야 할 유일한 일은 다음을 입력하여 mbstring PHP 확장을 명시적으로 활성화하는 것입니다.

  1. sudo phpenmod mbstring

그런 다음 변경 사항을 인식하려면 Apache를 다시 시작하십시오.

  1. sudo systemctl restart apache2

이제 phpMyAdmin이 설치 및 구성되었습니다. 그러나 로그인하여 MySQL 데이터베이스와 상호 작용을 시작하기 전에 MySQL 사용자가 프로그램과 상호 작용하는 데 필요한 권한이 있는지 확인해야 합니다.

2단계 - 사용자 인증 및 권한 조정

phpMyAdmin을 서버에 설치하면 프로그램에 대한 특정 기본 프로세스를 수행하는 phpmyadmin이라는 데이터베이스 사용자가 자동으로 생성됩니다. 설치 중에 설정한 관리 암호를 사용하여 이 사용자로 로그인하는 대신 루트 MySQL 사용자 또는 phpMyAdmin 인터페이스를 통해 데이터베이스 관리 전용 사용자로 로그인하는 것이 좋습니다.

MySQL 루트 계정에 대한 암호 액세스 구성

MySQL 5.7(및 이후 버전)을 실행하는 Ubuntu 시스템에서 루트 MySQL 사용자는 기본적으로 비밀번호가 아닌 auth_socket 플러그인을 사용하여 인증하도록 설정됩니다. 이것은 많은 경우에 더 큰 보안과 유용성을 허용하지만 phpMyAdmin과 같은 외부 프로그램이 사용자에 액세스하도록 허용해야 하는 경우 상황을 복잡하게 만들 수도 있습니다.

루트 MySQL 사용자로 phpMyAdmin에 로그인하려면 인증 방법을 auth_socket에서 mysql_native_password로 아직 전환하지 않은 경우 전환해야 합니다. 이렇게 하려면 터미널에서 MySQL 프롬프트를 엽니다.

  1. sudo mysql

다음으로 다음 명령을 사용하여 각 MySQL 사용자 계정이 사용하는 인증 방법을 확인합니다.

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

이 예에서 루트 사용자는 실제로 auth_socket 플러그인을 사용하여 인증합니다. 암호로 인증하도록 루트 계정을 구성하려면 다음 ALTER USER 명령을 실행합니다. 암호를 원하는 강력한 암호로 변경해야 합니다.

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

그런 다음 FLUSH PRIVILEGES를 실행하여 권한 부여 테이블을 다시 로드하고 새 변경 사항을 적용하도록 서버에 지시합니다.

  1. FLUSH PRIVILEGES;

루트가 더 이상 auth_socket 플러그인을 사용하여 인증하지 않는지 확인하려면 각 사용자가 사용하는 인증 방법을 다시 확인하십시오.

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

이 출력은 루트 사용자가 암호를 사용하여 인증함을 나타냅니다. 이제 여기에서 설정한 비밀번호를 사용하여 루트 사용자로 phpMyAdmin 인터페이스에 로그인할 수 있습니다.

전용 MySQL 사용자를 위한 암호 액세스 구성

또는 일부는 전용 사용자로 phpMyAdmin에 연결하는 것이 워크플로우에 더 적합하다는 것을 알 수 있습니다. 이렇게 하려면 MySQL 셸을 다시 한 번 엽니다.

  1. sudo mysql

참고: 이전 섹션에서 설명한 대로 암호 인증을 활성화한 경우 MySQL 셸에 액세스하려면 다른 명령을 사용해야 합니다. 다음은 일반 사용자 권한으로 MySQL 클라이언트를 실행하며 인증을 통해서만 데이터베이스 내에서 관리자 권한을 얻습니다.

  1. mysql -u root -p

거기에서 새 사용자를 만들고 강력한 암호를 지정하십시오.

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

그런 다음 새 사용자에게 적절한 권한을 부여하십시오. 예를 들어 다음 명령을 사용하여 데이터베이스 내의 모든 테이블에 대한 사용자 권한과 사용자 권한을 추가, 변경 및 제거할 수 있는 권한을 부여할 수 있습니다.

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

그런 다음 MySQL 셸을 종료합니다.

  1. exit

이제 /phpmyadmin 다음에 서버의 도메인 이름 또는 공용 IP 주소를 방문하여 웹 인터페이스에 액세스할 수 있습니다.

http://your_domain_or_IP/phpmyadmin

루트로 또는 방금 구성한 새 사용자 이름과 암호를 사용하여 인터페이스에 로그인합니다.

로그인하면 phpMyAdmin 사용자 인터페이스로 이동합니다.

이제 phpMyAdmin에 연결하고 상호 작용할 수 있으므로 공격자로부터 시스템을 보호하기 위해 시스템 보안을 강화하기만 하면 됩니다.

3단계 - phpMyAdmin 인스턴스 보안

편재성 때문에 phpMyAdmin은 공격자에게 인기 있는 대상이며 무단 액세스를 방지하기 위해 각별히 주의해야 합니다. 이를 수행하는 가장 쉬운 방법 중 하나는 Apache의 내장 .htaccess 인증 및 권한 부여 기능을 사용하여 전체 애플리케이션 앞에 게이트웨이를 배치하는 것입니다.

이렇게 하려면 먼저 Apache 구성 파일을 편집하여 .htaccess 파일 재정의 사용을 활성화해야 합니다.

선호하는 텍스트 편집기를 사용하여 Apache 구성 디렉토리에 있는 링크된 파일을 편집하십시오. 이 예에서는 nano를 사용합니다.

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

다음과 같이 구성 파일의 섹션 내에 AllowOverride All 지시문을 추가합니다.

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

이 줄을 추가했으면 파일을 저장하고 닫습니다. nano를 사용하여 파일을 편집한 경우 CTRL + X, Y를 누른 다음 ENTER를 눌러 편집하십시오. .

변경 사항을 구현하려면 Apache를 다시 시작하십시오.

  1. sudo systemctl restart apache2

애플리케이션에 대해 .htaccess 사용을 활성화했으므로 실제로 일부 보안을 구현하려면 .htaccess 파일을 생성해야 합니다.

이 작업이 성공하려면 응용 프로그램 디렉터리 내에 파일을 만들어야 합니다. 다음을 입력하여 필요한 파일을 만들고 루트 권한으로 텍스트 편집기에서 열 수 있습니다.

  1. sudo nano /usr/share/phpmyadmin/.htaccess

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

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

각 행의 의미는 다음과 같습니다.

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

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

비밀번호 파일로 선택한 위치는 /etc/phpmyadmin/.htpasswd입니다. 이제 이 파일을 만들고 htpasswd 유틸리티를 사용하여 초기 사용자에게 전달할 수 있습니다.

  1. sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

만들고 있는 사용자의 암호를 선택하고 확인하라는 메시지가 표시됩니다. 그러면 입력한 해시 비밀번호로 파일이 생성됩니다.

추가 사용자를 입력하려면 다음과 같이 -c 플래그 없이 입력해야 합니다.

  1. sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

이제 phpMyAdmin 하위 디렉터리에 액세스하면 방금 구성한 추가 계정 이름과 암호를 입력하라는 메시지가 표시됩니다.

https://domain_name_or_IP/phpmyadmin

Apache 인증을 입력하면 일반 phpMyAdmin 인증 페이지로 이동하여 MySQL 자격 증명을 입력합니다. 이 설정은 phpMyAdmin이 과거에 취약점으로 인해 어려움을 겪었기 때문에 바람직한 추가 보안 계층을 추가합니다.

결론

이제 phpMyAdmin이 구성되어 Ubuntu 18.04 서버에서 사용할 준비가 되었습니다. 이 인터페이스를 사용하여 데이터베이스, 사용자, 테이블 등을 쉽게 생성하고 구조 및 데이터 삭제 및 수정과 같은 일반적인 작업을 수행할 수 있습니다.