CentOS 8 に phpMyAdmin をインストールして保護する
このページでは
- 要件
- LAMP サーバーをインストール
- MariaDB を構成する
- phpMyAdmin をインストール
- phpMyAdmin 用に Apache を構成する
- SELinux とファイアウォールを構成する
- 安全な phpMyAdmin
- 特定の IP からの phpMyAdmin を許可する
- 追加の認証レイヤーを構成する
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 mariadbMariaDB を構成する
デフォルトでは、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/tmpphpMyAdmin 用に 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 --reloadphpMyAdmin がインストールされ、設定されました。ここで、機能しているかどうかを確認します。
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 ベースのインターフェースからそれらを管理できるようになりました。ご不明な点がございましたら、お気軽にお問い合わせください。