웹사이트 검색

CentOS 8에서 phpMyAdmin 설치 및 보호


이 페이지에서

  1. 요구 사항
  2. LAMP 서버 설치
  3. MariaDB 구성
  4. phpMyAdmin 설치
  5. phpMyAdmin용 Apache 구성
  6. SELinux 및 방화벽 구성
  7. 안전한 phpMyAdmin\n
    1. 특정 IP에서 phpMyAdmin 허용
    2. 추가 인증 계층 구성

    phpMyAdmin은 웹 기반 인터페이스를 통해 MySQL 및 MariaDB 서버를 관리하는 무료 오픈 소스 도구입니다. phpMyAdmin을 사용하면 데이터베이스와 사용자를 생성 및 관리하고, SQL 문을 실행하고, 데이터를 가져오고 내보내고, 생성, 삭제, 테이블, 열, 인덱스, 권한 등과 같은 데이터베이스 활동을 수행할 수 있습니다. phpMyAdmin은 특히 웹 호스팅 서비스에서 가장 인기 있고 널리 사용되는 관리 도구 중 하나입니다.

    특징

    • 간단하고 사용자 친화적인 웹 인터페이스를 제공합니다.
    • CSV 및 SQL에서 데이터를 가져옵니다.
    • 데이터베이스, 테이블, 필드 및 인덱스 생성, 복사, 삭제, 이름 바꾸기, 삭제 및 변경을 포함한 대부분의 MySQL 기능을 지원합니다.
    • PDF, CSV, SQL, XML 등과 같은 다양한 형식으로 데이터를 내보낼 수 있습니다.
    • 여러 서버 관리
    • QBE(Query-by-example)를 사용하여 복잡한 쿼리 생성

    이 튜토리얼에서는 CentOS 8 서버에 phpMyAdmin을 설치하고 보호하는 방법을 보여줍니다.

    요구 사항

    • CentOS 8을 실행하는 서버.
    • 루트 암호는 서버에서 구성됩니다.

    램프 서버 설치

    먼저 Apache, MariaDB, PHP 및 기타 PHP 라이브러리를 서버에 설치해야 합니다. 다음 명령으로 모두 설치할 수 있습니다.

    dnf install httpd mariadb-server php php-pdo php-pecl-zip php-json php-common php-fpm php-mbstring php-cli php-mysqlnd php-json php-mbstring wget unzip

    모든 패키지가 설치되면 Apache 및 MariaDB 서비스를 시작하고 다음 명령을 사용하여 시스템 재부팅 후 시작할 수 있도록 활성화합니다.

    systemctl start httpd
    systemctl start mariadb
    systemctl enable httpd
    systemctl enable mariadb

    MariaDB 구성

    기본적으로 MariaDB는 보안되지 않습니다. 따라서 먼저 보안을 유지해야 합니다. mysql_secure_installation 스크립트를 실행하여 이를 수행할 수 있습니다.

    mysql_secure_installation

    아래와 같이 모든 질문에 답하십시오.

    Set root password? [Y/n] Y
    New password: 
    Remove anonymous users? [Y/n] Y
    Disallow root login remotely? [Y/n] Y
    Remove test database and access to it? [Y/n] Y
    Reload privilege tables now? [Y/n] Y
    

    완료되면 다음 출력이 표시됩니다.

     ... Success!
    
    Cleaning up...
    
    All done!  If you've completed all of the above steps, your MariaDB
    installation should now be secure.
    
    Thanks for using MariaDB!
    

    이 시점에서 MariaDB 설치가 보호됩니다.

    phpMyAdmin 설치

    기본적으로 phpMyAdmin은 CentOS 8 기본 리포지토리에서 사용할 수 없습니다. 따라서 공식 웹사이트에서 최신 버전의 phpMyAdmin을 다운로드해야 합니다. 다음 명령으로 다운로드할 수 있습니다.

    wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip

    다운로드가 완료되면 다음 명령을 사용하여 다운로드한 파일의 압축을 풉니다.

    unzip phpMyAdmin-4.9.2-all-languages.zip

    다음으로 추출된 콘텐츠를 아래와 같이 /usr/share 디렉터리로 이동합니다.

    mv phpMyAdmin-4.9.2-all-languages /usr/share/phpmyadmin

    다음으로 디렉터리를 /usr/share/phpmyadmin으로 변경하고 파일 이름을 config.sample.inc.php로 바꿉니다.

    cd /usr/share/phpmyadmin
    mv config.sample.inc.php config.inc.php

    그런 다음 아래와 같이 즐겨 사용하는 텍스트 편집기로 파일을 엽니다.

    nano config.inc.php

    다음 줄을 변경합니다.

    $cfg['blowfish_secret'] = 'your-secret-password';
    

    완료되면 파일을 저장하고 닫습니다. 그런 다음 다음 명령을 사용하여 create_tables.sql을 가져옵니다.

    mysql < /usr/share/phpmyadmin/sql/create_tables.sql -u root -p

    테이블을 가져오라는 프롬프트가 표시되면 루트 비밀번호를 제공하십시오.

    다음으로 phpmyadmin에 대한 tmp 디렉토리를 생성하고 적절한 권한을 부여합니다.

    mkdir /usr/share/phpmyadmin/tmp
    chown -R apache:apache /usr/share/phpmyadmin
    chmod 777 /usr/share/phpmyadmin/tmp

    phpMyAdmin에 대한 Apache 구성

    다음으로 phpMyAdmin에 대한 Apache 가상 호스트 구성 파일을 생성해야 합니다. 다음 명령으로 만들 수 있습니다.

    nano /etc/httpd/conf.d/phpmyadmin.conf

    다음 줄을 추가합니다.

    Alias /phpmyadmin /usr/share/phpmyadmin
    
    <Directory /usr/share/phpmyadmin/>
       AddDefaultCharset UTF-8
    
       <IfModule mod_authz_core.c>
         # Apache 2.4
         <RequireAny> 
          Require all granted
         </RequireAny>
       </IfModule>
       <IfModule !mod_authz_core.c>
         # Apache 2.2
         Order Deny,Allow
         Deny from All
         Allow from 127.0.0.1
         Allow from ::1
       </IfModule>
    </Directory>
    
    <Directory /usr/share/phpmyadmin/setup/>
       <IfModule mod_authz_core.c>
         # Apache 2.4
         <RequireAny>
           Require all granted
         </RequireAny>
       </IfModule>
       <IfModule !mod_authz_core.c>
         # Apache 2.2
         Order Deny,Allow
         Deny from All
         Allow from 127.0.0.1
         Allow from ::1
       </IfModule>
    </Directory>
    

    완료되면 파일을 저장하고 닫습니다. 그런 다음 다음 명령을 사용하여 Apache 서비스를 다시 시작합니다.

    systemctl restart httpd

    다음 명령을 사용하여 Apache의 상태를 확인할 수 있습니다.

    systemctl status httpd

    다음 출력이 표시되어야 합니다.

    ? httpd.service - The Apache HTTP Server
       Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
      Drop-In: /usr/lib/systemd/system/httpd.service.d
               ??php-fpm.conf
       Active: active (running) since Wed 2019-12-18 01:07:52 EST; 6s ago
         Docs: man:httpd.service(8)
     Main PID: 5636 (httpd)
       Status: "Started, listening on: port 80"
        Tasks: 213 (limit: 25044)
       Memory: 28.7M
       CGroup: /system.slice/httpd.service
               ??5636 /usr/sbin/httpd -DFOREGROUND
               ??5639 /usr/sbin/httpd -DFOREGROUND
               ??5640 /usr/sbin/httpd -DFOREGROUND
               ??5641 /usr/sbin/httpd -DFOREGROUND
               ??5642 /usr/sbin/httpd -DFOREGROUND
    
    Dec 18 01:07:52 centos8 systemd[1]: Stopped The Apache HTTP Server.
    Dec 18 01:07:52 centos8 systemd[1]: Starting The Apache HTTP Server...
    Dec 18 01:07:52 centos8 httpd[5636]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::200:d0>
    Dec 18 01:07:52 centos8 httpd[5636]: Server configured, listening on: port 80
    Dec 18 01:07:52 centos8 systemd[1]: Started The Apache HTTP Server.
    

    SELinux 및 방화벽 구성

    기본적으로 SELinux는 CentOS 8에서 활성화되어 있습니다. 따라서 phpMyAdmin이 올바르게 작동하려면 SELinux를 구성해야 합니다.

    먼저 다음 명령을 사용하여 SELinux 환경을 관리할 policycoreutils-python-utils 패키지를 설치합니다.

    dnf install policycoreutils-python-utils

    다음으로 다음 명령을 사용하여 /usr/share/phpmyadmin 디렉토리에 대한 액세스를 활성화합니다.

    semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/phpmyadmin/'
    semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/phpmyadmin/tmp(/.*)?"

    이제 다음 명령을 실행하여 phpmyadmin 디렉토리의 모든 파일을 재귀합니다.

    restorecon -Rv '/usr/share/phpmyadmin/'

    다음으로 외부 네트워크에서 HTTP 서비스를 허용하는 방화벽 규칙을 만들어야 합니다. 다음 명령으로 허용할 수 있습니다.

    firewall-cmd --permanent --add-service=http
    firewall-cmd --reload

    이제 phpMyAdmin이 설치 및 구성되었습니다. 이제 작동 여부를 확인할 차례입니다.

    웹 브라우저를 열고 URL http://your-server-ip/phpmyadmin을 입력합니다. 다음 페이지로 리디렉션됩니다.

    안전한 phpMyAdmin

    이 시점에서 phpMyAdmin 인스턴스는 제대로 작동합니다. 그러나 외부 세계에서 phpMyAdmin 인스턴스를 보호하는 것은 중요한 작업입니다. 이 섹션에서는 phpMyAdmin 인스턴스를 보호하는 방법을 보여줍니다.

    특정 IP에서 phpMyAdmin 허용

    먼저 홈 연결의 IP 주소에서만 액세스할 수 있도록 phpMyAdmin을 구성해야 합니다.

    /etc/httpd/conf.d/phpmyadmin.conf 파일을 편집하여 구성할 수 있습니다.

    nano /etc/httpd/conf.d/phpmyadmin.conf

    다음 줄을 찾으십시오.

         <RequireAny>
           Require all granted
         </RequireAny>
    

    그리고 다음으로 교체합니다.

    <RequireAny>
        Require ip your-home--connection-ip-address
        Require ip ::1
    </RequireAny>
    

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

    추가 인증 계층 구성

    기본 인증을 설정하여 phpmyadmin 디렉토리를 암호로 보호하는 것이 좋습니다.

    이렇게 하려면 아래와 같이 htpasswd 도구를 사용하여 새 인증 파일을 만듭니다.

    mkdir /etc/phpmyadmin
    htpasswd -c /etc/phpmyadmin/.htpasswd admin

    아래와 같이 관리자 비밀번호를 입력하라는 메시지가 표시됩니다.

    New password: 
    Re-type new password: 
    Adding password for user admin
    

    다음으로 .htpasswd 파일을 사용하도록 Apache를 구성해야 합니다. /etc/httpd/conf.d/phpmyadmin.conf 파일을 편집하여 이를 수행할 수 있습니다.

    nano /etc/httpd/conf.d/phpmyadmin.conf

    \AddDefaultCharset UTF-8\ 줄 아래에 다음 줄을 추가합니다.

        Options  +FollowSymLinks +Multiviews +Indexes
        AllowOverride None
        AuthType basic
        AuthName "Authentication Required"
        AuthUserFile /etc/phpmyadmin/.htpasswd
        Require valid-user
    

    변경 사항을 적용하려면 파일을 저장하고 Apache 서비스를 다시 시작하십시오.

    systemctl restart httpd

    phpMyAdmin에 액세스

    이제 phpMyAdmin 인스턴스는 추가 보안 계층으로 보호됩니다. 웹 브라우저를 열고 URL http://your-server-ip/phpmyadmin을 입력합니다. 아래와 같이 이전에 만든 사용자의 로그인 자격 증명을 입력하라는 메시지가 표시됩니다.

    관리자 사용자 이름과 암호를 입력한 다음 확인 버튼을 클릭합니다. phpMyAdmin 로그인 페이지로 리디렉션됩니다.

    이제 MySQL 관리 사용자 로그인 자격 증명을 제공하고 이동 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

    결론

    축하합니다! CentOS 8 서버에 phpMyAdmin을 성공적으로 설치하고 보호했습니다. 이제 데이터베이스, 사용자, 테이블을 생성하고 웹 기반 인터페이스에서 관리할 수 있습니다. 궁금한 점이 있으면 언제든지 문의해 주세요.