ウェブサイト検索

CentOS 8 に phpMyAdmin をインストールして保護する


このページでは

  1. 要件
  2. LAMP サーバーをインストール
  3. MariaDB を構成する
  4. phpMyAdmin をインストール
  5. phpMyAdmin 用に Apache を構成する
  6. SELinux とファイアウォールを構成する
  7. 安全な phpMyAdmin
    1. 特定の IP からの phpMyAdmin を許可する
    2. 追加の認証レイヤーを構成する

    phpMyAdmin は、Web ベースのインターフェースを介して MySQL および MariaDB サーバーを管理するための無料のオープンソース ツールです。 phpMyAdmin を使用すると、データベースとユーザーの作成と管理、SQL ステートメントの実行、データのインポートとエクスポート、および作成、削除、テーブル、列、インデックス、アクセス許可などのデータベース アクティビティの実行を行うことができます。 phpMyAdmin は、特に Web ホスティング サービスで最も人気があり、最も広く使用されている管理ツールの 1 つです。

    特徴

    • シンプルで使いやすいウェブ インターフェースを提供する
    • CSV と SQL からデータをインポートする
    • データベース、テーブル、フィールド、インデックスの作成、コピー、削除、名前変更、削除、変更など、ほとんどの MySQL 機能をサポートする
    • PDF、CSV、SQL、XML などのさまざまな形式にデータをエクスポートできます。
    • 複数のサーバーを管理する
    • Query-by-example (QBE) を使用して複雑なクエリを作成する

    このチュートリアルでは、CentOS 8 サーバーに phpMyAdmin をインストールして保護する方法を示します。

    要件

    • CentOS 8 を実行するサーバー。
    • サーバーで root パスワードが設定されている。

    LAMP サーバーをインストールする

    まず、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 を公式 Web サイトからダウンロードする必要があります。次のコマンドでダウンロードできます。

    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

    テーブルをインポートするプロンプトが表示されたら、root パスワードを入力します。

    次に、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 とファイアウォールの構成

    デフォルトでは、CentOS 8 では SELinux が有効になっています。そのため、phpMyAdmin が正しく機能するように SELinux を構成する必要があります。

    まず、policycoreutils-python-utils パッケージをインストールして、次のコマンドで SELinux 環境を管理します。

    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 がインストールされ、設定されました。ここで、機能しているかどうかを確認します。

    Web ブラウザーを開き、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 インスタンスは追加のセキュリティ層で保護されました。 Web ブラウザーを開き、URL http://your-server-ip/phpmyadmin を入力します。以下に示すように、以前に作成したユーザーのログイン資格情報を入力するよう求められます。

    管理者のユーザー名とパスワードを入力し、[OK] ボタンをクリックします。 phpMyAdmin ログイン ページにリダイレクトされます。

    ここで、MySQL 管理ユーザーのログイン資格情報を入力し、[Go] ボタンをクリックします。次のページが表示されます。

    結論

    おめでとう! CentOS 8 サーバーに phpMyAdmin を正常にインストールして保護しました。データベース、ユーザー、テーブルを作成し、Web ベースのインターフェースからそれらを管理できるようになりました。ご不明な点がございましたら、お気軽にお問い合わせください。