phpMyAdmin のインストールとセキュリティ設定メモ

PHP
PHP
スポンサーリンク

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 -u root -p
(略)
mysql> ← パスワードなしでログインできる

パスワードが設定されていない場合は、以下の MySQLコマンドで root ユーザーにパスワードを設定します。

(MySQL 8.0 の場合)
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 サーバー証明書の取得と自動更新設定メモ

秘密鍵の作成

openssl ecparam -name prime256v1 -genkey -out sample.key

・CSR(証明書署名要求)の作成(入力するのは2箇所だけです)
openssl req -new -key sample.key > sample.csr

Country Name (2 letter code) [XX]: JP
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年)

openssl x509 -days 3650 -req -signkey sample.key < sample.csr > sample.crt

秘密鍵とサーバー証明書を適切な場所に移動

sudo mv -i sample.key /etc/pki/tls/private/
sudo mv -i sample.crt /etc/pki/tls/certs/

パーミッションを変更

sudo chmod 600 /etc/pki/tls/private/sample.key
sudo chmod 600 /etc/pki/tls/certs/sample.crt

CSRを削除

rm sample.csr

phpMyAdmin のインストール先となる公開ディレクトリを作成します。

sudo mkdir /var/www/sample

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 を再起動します。

systemctl restart 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 を再起動します。

systemctl restart httpd

phpMyAdmin のインストール

下準備が長くなりましたが、本題の phpMyAdmin のインストールです。

phpMyAdminのダウンロードページ から、現時点(2020年2月5日)の安定版 phpMyAdmin 5.0.x をダウンロードします。(PHPがバージョン7.1以下の場合は phpMyAdmin 4.9.x をダウンロードしてください)

phpMyAdminのダウンロードページ

ダウンロードした phpMyAdmin を解凍します。

tar xvzf phpMyAdmin-*.tar.gz

解凍すると以下のようなディレクトリ名になります。準備した公開ディレクトリ以下に、「phpMyAdmin」のような分かりやすい名前で配置したいところなのですが、phpMyAdmin を狙うボット(コンピュータウイルスの一種)などから攻撃される可能性が高まります。

phpMyAdmin-5.0.1-all-languages

そのため、ディレクトリ名をランダムな文字列にして公開ディレクトリ以下に配置します。(「$(openssl rand -hex 16)」の部分がランダムな文字列になります」

sudo mv phpMyAdmin-*all-languages /var/www/sample/$(openssl rand -hex 16)

以下のようなディレクトリ名で phpMyAdmin が公開サーバに配置されました。(ディレクトリ名をどこかにコピペしておきましょう)

$ ls /var/www/sample/
b684084314d614b1494e10b1884ae89c

配置した phpMyAdmin のディレクトリ以下のオーナーをすべて apache(Webサーバーの実行ユーザー)に変更します。

chown -R apache /var/www/sample/b684084314d614b1494e10b1884ae89c/

以上で phpMyAdmin のインストールが終わりました。続いて初期設定を行います。

phpMyAdmin の初期設定

phpMyAdmin の設定ファイルを作成します。

cd /var/www/sample/b684084314d614b1494e10b1884ae89c/
sudo mv -i config.sample.inc.php config.inc.php

暗号化用のパスフレーズを設定しますので、ランダムな文字列(32文字以上)を作成しておきます。以下のコマンドで64文字のランダムな文字列が作成できます。

openssl rand -hex 32

作成したランダムな文字列を、設定ファイルの「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 を運用する場合は必ず設定しておきましょう。

二要素認証の設定画面

コメント

タイトルとURLをコピーしました