phpMyAdmin は、Webブラウザから MySQL や MariaDB を管理するためのフリーソフトウェアツールです。SQL文を書かずに、データベースやテーブル、ユーザーの作成などができるとても便利なツールなのですが、公開サーバーに phpMyAdmin をインストールする場合は、セキュリティへの配慮も必要です。そこで今回は、phpMyAdmin のインストールと初期設定、安全に使うためのセキュリティ設定をまとめてみました。
インストール環境
今回は、以下の環境のサーバーに phpMyAdmin をインストールします。
- CentOS 8.1(1911)
- PHP 7.4
- MySQL 8.0
- Apache 2.4
PHP や MySQL の設定につきましては、以下の記事を参照してください。
関連記事:CentOS 8.1 (1911) LAMPサーバインストールメモ【Apache2.4+MySQL8.0+PHP7.4】
phpMyAdmin を安全に使うためのセキュリティ設定
phpMyAdmin をインストールする前に、下準備として安全に使うためのセキュリティ設定をしておきましょう。
MySQL の root ユーザーにパスワードを設定する
環境によっては MySQL の root ユーザーにパスワードが設定されていない場合もあります。このまま 公開サーバーに phpMyAdmin にインストールしてしまうと、root ユーザーがパスワード無しで phpMyAdmin にログインできてしまうため、とても危険です。
MySQL の root ユーザー(もしくはそれに相当するユーザー)には、必ずパスワードを設定します。
以下のコマンドのみで MySQL にログインできる場合は、root ユーザーにパスワードが設定されていません。(パスワードが設定されていれば「Enter password:」が表示されます)
(略)
mysql> ← パスワードなしでログインできる
パスワードが設定されていない場合は、以下の MySQLコマンドで root ユーザーにパスワードを設定します。
SET PASSWORD FOR root@localhost = '<パスワード>';
(MySQL 5.x の場合)
SET PASSWORD FOR root@localhost = PASSWORD('<パスワード>');
SSLの設定
phpMyAdmin との通信が暗号化されるように、Apache httpd Webサーバーに SSLを設定します。今回は自己署名のSSL証明書を使いますが、可能であれば正規の認証局(CA)が発行したSSL証明書を使いましょう。
関連記事:Let's Encrypt サーバー証明書の取得と自動更新設定メモ
秘密鍵の作成
・CSR(証明書署名要求)の作成(入力するのは2箇所だけです)
openssl req -new -key sample.key > sample.csr
State or Province Name (full name) []:<空エンター>
Locality Name (eg, city) [Default City]:<空エンター>
Organization Name (eg, company) [Default Company Ltd]:<空エンター>
Organizational Unit Name (eg, section) []:<空エンター>
Common Name (eg, your name or your server's hostname) []: sample.example.com
Email Address []:<空エンター>
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<空エンター>
An optional company name []:<空エンター>
自己署名のサーバー証明書の作成(有効期限10年)
秘密鍵とサーバー証明書を適切な場所に移動
sudo mv -i sample.crt /etc/pki/tls/certs/
パーミッションを変更
sudo chmod 600 /etc/pki/tls/certs/sample.crt
CSRを削除
phpMyAdmin のインストール先となる公開ディレクトリを作成します。
phpMyAdmin 用のバーチャルホストの設定を追加します。
sudo vi /etc/httpd/conf.d/ssl.conf
<VirtualHost *:443> ServerName sample.example.com DocumentRoot "/var/www/sample" <Directory "/var/www/sample"> Options FollowSymLinks AllowOverride None Require all granted </Directory> SSLEngine on Header always set Strict-Transport-Security "max-age=31536000" SSLCertificateFile /etc/pki/tls/certs/sample.crt SSLCertificateKeyFile /etc/pki/tls/private/sample.key # SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt SetEnvIf Request_URI "\.(gif|jpg|png|css|js)$" nolog ErrorLog logs/sample_error_log CustomLog logs/sample_access_log combined env=!nolog </VirtualHost>
Apache httpd を再起動します。
送信元のIPアドレス制限
もし phpMyAdmin への接続を、特定のIPアドレスに限定できる場合は、送信元のIPアドレス制限も行いましょう。
sudo vi /etc/httpd/conf.d/ssl.conf
<Directory "/var/www/sample"> Options FollowSymLinks AllowOverride None Require all granted ↓ Require ip 192.0.2.1
Apache httpd を再起動します。
phpMyAdmin のインストール
下準備が長くなりましたが、本題の phpMyAdmin のインストールです。
phpMyAdminのダウンロードページ から、現時点(2020年2月5日)の安定版 phpMyAdmin 5.0.x をダウンロードします。(PHPがバージョン7.1以下の場合は phpMyAdmin 4.9.x をダウンロードしてください)
ダウンロードした phpMyAdmin を解凍します。
解凍すると以下のようなディレクトリ名になります。準備した公開ディレクトリ以下に、「phpMyAdmin」のような分かりやすい名前で配置したいところなのですが、phpMyAdmin を狙うボット(コンピュータウイルスの一種)などから攻撃される可能性が高まります。
そのため、ディレクトリ名をランダムな文字列にして公開ディレクトリ以下に配置します。(「$(openssl rand -hex 16)」の部分がランダムな文字列になります」
以下のようなディレクトリ名で phpMyAdmin が公開サーバに配置されました。(ディレクトリ名をどこかにコピペしておきましょう)
b684084314d614b1494e10b1884ae89c
配置した phpMyAdmin のディレクトリ以下のオーナーをすべて apache(Webサーバーの実行ユーザー)に変更します。
以上で phpMyAdmin のインストールが終わりました。続いて初期設定を行います。
phpMyAdmin の初期設定
phpMyAdmin の設定ファイルを作成します。
sudo mv -i config.sample.inc.php config.inc.php
暗号化用のパスフレーズを設定しますので、ランダムな文字列(32文字以上)を作成しておきます。以下のコマンドで64文字のランダムな文字列が作成できます。
作成したランダムな文字列を、設定ファイルの「blowfish_secret」に設定します。
sudo vi config.inc.php
/** * This is needed for cookie based authentication to encrypt password in * cookie. Needs to be 32 chars long. */ $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ ↓ $cfg['blowfish_secret'] = '<ランダムな文字列(32文字以上)>';
続いて phpMyAdmin にログインします。URLは以下のようになります。(自己署名のSSL証明書を使っている場合は、警告が表示されます)
https://sample.example.com/b684084314d614b1494e10b1884ae89c/
画面の下の方に、「phpMyAdmin の環境保管領域が完全に設定されていない〜」の警告が表示されている場合は、「こちら」をクリックします。
「作成」をクリックします。
phpMyAdmin の環境保管領域が作成されます。
以上で phpMyAdmin の初期設定完了です。お疲れさまでした!
おわりに
phpMyAdmin の「設定」から、二要素認証を設定することもできます。公開サーバーで phpMyAdmin を運用する場合は必ず設定しておきましょう。
コメント