웹사이트 검색

Debian 10의 소스에서 phpMyAdmin을 설치하는 방법


소개

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

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

전제 조건

이 가이드를 시작하기 전에 다음이 필요합니다.

  • Debian 10 서버에 대한 액세스. 이 서버에는 sudo 권한이 있는 루트가 아닌 사용자와 ufw로 구성된 방화벽이 있어야 합니다. 이를 설정하려면 Debian 10용 초기 서버 설정 가이드를 따르십시오.
  • Debian 10 서버에 설치된 LAMP(Linux, Apache, MariaDB 및 PHP) 스택. 이를 설정하려면 Debian 10에 LAMP 스택 설치 가이드를 따르세요.

참고: MariaDB는 커뮤니티에서 개발한 MySQL 포크이며 두 프로그램이 밀접하게 관련되어 있지만 완전히 상호 교환할 수는 없습니다. phpMyAdmin은 MySQL 데이터베이스 관리를 위해 특별히 설계되었으며 다양한 대화 상자에서 MySQL을 참조하지만 MariaDB 설치는 phpMyAdmin과 올바르게 작동합니다.

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

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

이러한 이유와 자주 공격 대상이 되는 널리 배포된 PHP 응용 프로그램이기 때문에 일반 HTTP 연결을 통해 원격 시스템에서 phpMyAdmin을 실행해서는 안 됩니다.

SSL/TLS 인증서로 구성된 기존 도메인이 없는 경우 Apache 가상 호스트 설정에 대한 이 가이드를 따를 수 있습니다.

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

1단계 - phpMyAdmin 및 권장 패키지 설치

phpMyAdmin을 설치 및 구성하기 전에 공식 문서에서는 서버에 몇 가지 PHP 확장을 설치하여 특정 기능을 활성화하고 성능을 향상할 것을 권장합니다.

필수 LAMP 스택 자습서를 따랐다면 이러한 모듈 중 일부가 php 패키지와 함께 설치되었을 것입니다. 그러나 다음 패키지도 설치하는 것이 좋습니다.

  • php-mbstring: 비 ASCII 문자열을 관리하고 문자열을 다른 인코딩으로 변환하는 데 사용되는 PHP 확장
  • php-zip: phpMyAdmin에 .zip 파일 업로드를 지원하는 PHP 모듈
  • php-gd: 또 다른 PHP 모듈, GD 그래픽 라이브러리 지원 가능

먼저 최근에 수행하지 않은 경우 서버의 패키지 색인을 업데이트하십시오.

  1. sudo apt update

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

  1. sudo apt install php-mbstring php-zip php-gd

다음으로 phpMyAdmin을 설치할 수 있습니다. 이 글을 쓰는 시점에서 phpMyAdmin은 기본 데비안 리포지토리에서 사용할 수 없으므로 phpMyAdmin 사이트에서 서버로 소스 코드를 다운로드해야 합니다.

이를 위해 phpMyAdmin 다운로드 페이지로 이동하고 최신 안정 릴리스에 대한 다운로드 링크가 있는 테이블까지 아래로 스크롤한 다음 tar.gz로 끝나는 다운로드 링크를 복사합니다. 이 링크는 tarball이라는 아카이브 파일을 가리키며 압축을 풀면 시스템에 여러 파일이 생성됩니다. 이 글을 쓰는 시점에서 최신 릴리스는 버전 4.9.7입니다.

참고: 이 다운로드 페이지에는 모든 언어영어 레이블이 지정된 다운로드 링크가 있음을 알 수 있습니다. 모든 언어 링크는 72개의 사용 가능한 언어 중 하나를 선택할 수 있는 phpMyAdmin 버전을 다운로드하는 반면 영어 링크는 영어로만 phpMyAdmin을 사용할 수 있도록 합니다. .

이 가이드에서는 all-languages 패키지를 사용하여 phpMyAdmin 설치 방법을 설명하지만 phpMyAdmin을 영어로 사용하려는 경우 english 패키지를 설치할 수 있습니다. 다음 명령에서 필요에 따라 링크와 파일 이름을 바꾸십시오.

다음 wget 명령의 링크를 방금 복사한 다운로드 링크로 바꾼 다음 ENTER를 누릅니다. 그러면 명령이 실행되고 서버에 tarball이 다운로드됩니다.

  1. wget https://files.phpmyadmin.net/phpMyAdmin/4.9.7/phpMyAdmin-4.9.7-all-languages.tar.gz

그런 다음 타르볼을 추출합니다.

  1. tar xvf phpMyAdmin-4.9.7-all-languages.tar.gz

이렇게 하면 서버에 phpMyAdmin-4.9.7-all-languages라는 상위 디렉토리 아래에 여러 개의 새 파일과 디렉토리가 생성됩니다.

그런 다음 다음 명령을 실행합니다. 이렇게 하면 phpMyAdmin-4.9.7-all-languages 디렉토리와 모든 하위 디렉토리가 /usr/share/ 로 이동합니다. 디렉토리, phpMyAdmin이 기본적으로 구성 파일을 찾을 것으로 예상하는 위치. 또한 디렉토리 이름을 phpmyadmin으로 변경합니다.

  1. sudo mv phpMyAdmin-4.9.7-all-languages/ /usr/share/phpmyadmin

이것으로 phpMyAdmin을 설치했지만 웹 브라우저를 통해 phpMyAdmin에 액세스하려면 여러 구성을 변경해야 합니다.

2단계 - phpMyAdmin 수동 구성

패키지 관리자와 함께 phpMyAdmin을 설치할 때 우분투 환경에서와 마찬가지로 phpMyAdmin은 기본적으로 프로그램을 설정하기 위해 여러 작업을 자동으로 수행하는 "Zero Configuration\ 모드로 설정됩니다. 이 가이드의 소스에서 설치했기 때문에 해당 단계를 수동으로 수행합니다.

시작하려면 phpMyAdmin이 임시 파일을 저장할 새 디렉토리를 만드십시오.

  1. sudo mkdir -p /var/lib/phpmyadmin/tmp

www-data — Apache와 같은 웹 서버가 우분투 및 데비안 시스템의 일반 작업에 기본적으로 사용하는 Linux 사용자 프로필을 이 디렉터리의 소유자로 설정합니다.

  1. sudo chown -R www-data:www-data /var/lib/phpmyadmin

이전에 추출한 파일에는 기본 구성 파일로 사용할 수 있는 샘플 구성 파일이 포함되어 있습니다. 이 파일의 복사본을 만들어 /usr/share/phpmyadmin 디렉토리에 보관하고 이름을 config.inc.php로 바꿉니다.

  1. sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

원하는 텍스트 편집기를 사용하여 이 파일을 엽니다. 여기서는 nano를 사용합니다.

  1. sudo nano /usr/share/phpmyadmin/config.inc.php

phpMyAdmin은 기본적으로 쿠키 인증 방법을 사용하여 임시 쿠키의 고급 암호화 표준(AES) 알고리즘을 사용하여 유효한 MariaDB 사용자로 phpMyAdmin에 로그인할 수 있습니다.

역사적으로 phpMyAdmin은 이러한 목적으로 대신 Blowfish 암호를 사용했으며 이는 여전히 구성 파일에 반영되어 있습니다. $cfg[blowfish_secret]로 시작하는 줄까지 아래로 스크롤합니다. 다음과 같이 표시됩니다.

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

작은따옴표 사이에 임의의 32자 문자열을 입력합니다. 이것은 기억해야 하는 암호가 아니라 AES 알고리즘에 의해 내부적으로 사용됩니다.

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

참고: 여기에 입력하는 암호가 32자보다 짧으면 암호화된 쿠키의 보안 수준이 떨어집니다. 그러나 32자보다 긴 문자열을 입력해도 문제가 발생하지 않습니다.

진정한 무작위 문자열을 생성하려면 pwgen 프로그램을 설치하고 사용할 수 있습니다.

  1. sudo apt install pwgen

기본적으로 pwgen은 덜 안전하지만 쉽게 발음할 수 있는 암호를 만듭니다. 그러나 -s 플래그를 포함하면 다음 명령과 같이 완전히 임의의 암기하기 어려운 비밀번호를 생성할 수 있습니다. 이 명령에 대한 마지막 두 인수에 유의하십시오. 1pwgen에 생성해야 하는 문자열 수를 알려줍니다.

  1. pwgen -s 32 1

그런 다음 /* 저장소로 조작하는 데 사용되는 사용자 */를 읽는 주석까지 아래로 스크롤합니다. 이 섹션에는 phpMyAdmin 내에서 특정 관리 작업을 수행하는 pma라는 MariaDB 데이터베이스 사용자를 정의하는 몇 가지 지시문이 포함되어 있습니다. 공식 문서에 따르면 이 특수 사용자 계정은 한 명의 사용자만 phpMyAdmin에 액세스하는 경우에는 필요하지 않지만 다중 사용자 시나리오에서는 권장됩니다.

앞의 슬래시를 제거하여 controlusercontrolpass 지시문의 주석 처리를 제거하십시오. 그런 다음 선택한 보안 암호를 가리키도록 controlpass 지시문을 업데이트합니다. 이렇게 하지 않으면 기본 암호가 그대로 유지되고 알 수 없는 사용자가 phpMyAdmin 인터페이스를 통해 데이터베이스에 쉽게 액세스할 수 있습니다.

이러한 변경을 수행한 후 파일의 이 섹션은 다음과 같이 표시됩니다.

. . .
/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'password';
. . .

이 섹션 아래에는 /* 저장소 데이터베이스 및 테이블 */이라는 주석이 앞에 있는 다른 섹션이 있습니다. 이 섹션에는 관리 pma 데이터베이스 사용자가 사용하는 phpMyAdmin 구성 저장소, 데이터베이스 및 여러 테이블을 정의하는 여러 지시문이 포함되어 있습니다. 이 테이블은 책갈피, 주석, PDF 생성 등을 포함하여 phpMyAdmin의 여러 기능을 활성화합니다.

다음과 같이 각 줄의 시작 부분에서 슬래시를 제거하여 이 섹션의 각 줄의 주석 처리를 제거합니다.

. . .
/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
. . .

이 테이블은 아직 존재하지 않지만 곧 만들 것입니다.

마지막으로 파일 맨 아래로 스크롤하여 다음 줄을 추가합니다. 이렇게 하면 앞에서 만든 /var/lib/phpmyadmin/tmp 디렉토리를 임시 디렉토리로 사용하도록 phpMyAdmin이 구성됩니다. phpMyAdmin은 이 임시 디렉토리를 템플릿 캐시로 사용하여 더 빠른 페이지 로딩을 허용합니다.

. . .
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';

이 줄을 추가한 후 파일을 저장하고 닫습니다. nano를 사용한 경우 CTRL + X, Y, ENTER를 차례로 누르면 됩니다.

다음으로 phpMyAdmin 스토리지 데이터베이스와 테이블을 생성해야 합니다. 이전 단계에서 phpMyAdmin을 설치하면 create_tables.sql이라는 파일이 함께 제공됩니다. 이 SQL 파일에는 phpMyAdmin이 올바르게 작동하는 데 필요한 구성 저장소 데이터베이스 및 테이블을 만드는 데 필요한 모든 명령이 포함되어 있습니다.

다음 명령을 실행하여 create_tables.sql 파일을 사용하여 구성 저장소 데이터베이스 및 테이블을 생성합니다.

  1. sudo mariadb < /usr/share/phpmyadmin/sql/create_tables.sql

그런 다음 관리 pma 사용자를 생성해야 합니다. MariaDB 프롬프트를 엽니다.

  1. sudo mariadb

프롬프트에서 다음 명령을 실행하여 pma 사용자를 생성하고 적절한 권한을 부여합니다. config.inc.php 파일에서 정의한 비밀번호와 일치하도록 password를 변경해야 합니다.

  1. GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'password';

아직 생성하지 않은 경우 phpMyAdmin을 통해 데이터베이스를 관리할 목적으로 일반 MariaDB 사용자도 생성해야 합니다. pma 사용자가 아닌 다른 계정을 사용하여 로그인하는 것이 좋습니다. 이 명령을 사용하여 데이터베이스 내의 모든 테이블에 대한 권한과 사용자 권한을 추가, 변경 및 제거할 수 있는 권한을 가진 사용자를 생성할 수 있습니다. 이 사용자에게 어떤 권한을 할당하든 간에 강력한 암호도 지정해야 합니다.

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

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

  1. exit

이제 phpMyAdmin이 서버에 완전히 설치 및 구성되었습니다. 그러나 Apache 서버는 아직 애플리케이션을 제공하는 방법을 모릅니다. 이를 해결하기 위해 Apache 구성 파일을 생성합니다.

3단계 - phpMyAdmin을 제공하도록 Apache 구성

기본 리포지토리에서 phpMyAdmin을 설치할 때 설치 프로세스는 Apache 구성 파일을 자동으로 생성하여 /etc/apache2/conf-enabled/ 디렉토리에 배치합니다. 그러나 소스에서 phpMyAdmin을 설치했기 때문에 이 파일을 수동으로 생성하고 활성화해야 합니다.

/etc/apache2/conf-available/ 디렉토리에 phpmyadmin.conf라는 파일을 만듭니다.

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

그런 다음 파일에 다음 내용을 추가하십시오.

# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php

    <IfModule mod_php5.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>
    <IfModule mod_php.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>

</Directory>

# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
    <IfModule mod_authz_core.c>
        <IfModule mod_authn_file.c>
            AuthType Basic
            AuthName "phpMyAdmin Setup"
            AuthUserFile /etc/phpmyadmin/htpasswd.setup
        </IfModule>
        Require valid-user
    </IfModule>
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>

이것은 Ubuntu 설치에서 찾을 수 있는 기본 phpMyAdmin Apache 구성 파일이지만 Debian 설치에도 적합합니다.

파일을 저장하고 닫은 다음 다음을 입력하여 활성화합니다.

  1. sudo a2enconf phpmyadmin.conf

그런 다음 apache2 서비스를 다시 로드하여 구성 변경 사항을 적용합니다.

  1. sudo systemctl reload apache2

그런 다음 웹 브라우저에서 다음 URL로 이동하여 phpMyAdmin 로그인 화면에 액세스할 수 있습니다.

https://your_domain/phpmyadmin

다음 로그인 화면이 표시됩니다.

구성한 MariaDB 사용자 이름과 비밀번호로 인터페이스에 로그인합니다. 로그인하면 다음과 같은 사용자 인터페이스가 표시됩니다.

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

4단계 - phpMyAdmin 인스턴스 보안

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

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

Apache 구성 디렉토리에 있는 링크된 파일을 편집하십시오.

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

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

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

    <IfModule mod_php5.c>
    . . .

이 줄을 추가했으면 파일을 저장하고 닫습니다.

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

  1. sudo systemctl restart apache2

이제 애플리케이션에 .htaccess 사용을 활성화했으므로 보안을 실제로 구현하기 위해 하나를 생성해야 합니다.

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

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

이 파일 내에 다음 내용을 입력합니다.

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

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

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

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

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

  1. sudo htpasswd -c /usr/share/phpmyadmin/.htpasswd username

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

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

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

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

https://your_domain_or_IP/phpmyadmin

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

결론

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