ネコでもわかる!さくらのVPS講座 ~第五回「phpMyAdminを導入しよう」

初心者がVPS(Virtual Private Server)をWebサーバーとして構築し、WordPressのサイトを運用できるようになるまでの「ネコでもわかる!」連載の第5回目です。

最初から読みたい方はこちらからどうぞ。

前回(第4回目)は「phpとMariaDBをインストールしよう」というテーマで、phpMariaDBのインストールの手順を説明しました。

今回はphpMyAdminのインストールと、そのセキュリティ設定について説明します。
対象サーバーは、さくらのVPS CentOS7 x86_64です。

1. phpMyAdminをインストールする

前回の記事でMariaDBデータベースをインストールしました。SSHクライアントソフトでmysqlコマンドを実行してデータベースにログインし、データベース内のデータにアクセスできるようにはなっています。しかし、ご存知の方も多いと思いますがレンタルサーバーではphpMyAdminというツールが用意されており、ブラウザから簡単にデータベースを操作できることが多いです。そこでVPSでもデータベースを簡単に操作できるようにするために、phpMyAdminをインストールします。

phpMyAdminスクリーンショット

phpMyAdminの画面イメージ

phpMyAdminがあると、WordPressなどのCMSが必要とするデータベースを簡単に作成できたり、データベースに蓄積されたデータを簡単にバックアップできます。
ただし、WordPressのインストールにはphpMyAdminは必須ではありませんので、必要のない方はこの項は飛ばしていただいてかまいません。

データベースにはSSHとphpMyAdminのどちらでもアクセスできる

データベースへは、SSHクライアントとphpMyAdminの2通りの方法でアクセスできますが、
phpMyAdminの方が簡単です。

phpMyAdminのパッケージはepelリポジトリとremiリポジトリにありますが、remiリポジトリにしか存在しないphp7.1関連のパッケージをあわせてインストールする必要があるため、remiを使用することにします。

rootユーザーで作業してください。

# yum install --enablerepo=remi,remi-php71 phpMyAdmin

いつものように
Is this ok [y/d/N]:
と聞かれますので、yでインストール実行してください。
インストール後、’Complete!‘と表示されれば成功です。

次に、phpMyAdminの設定を変更します。
cd コマンドで /etc/httpd/conf.d ディレクトリに移動し、
cpコマンドでphpMyAdmin.confphpMyAdmin.conf.oldという名前でバックアップ用コピーを作成して、vimコマンドでphpMyAdmin.confを編集します。

# cd /etc/httpd/conf.d/
# cp phpMyAdmin.conf  phpMyAdmin.conf.old
# vim phpMyAdmin.conf

phpMyAdmin.conf(一部抜粋)

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </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
     Require local
   </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>

16行目付近の
Require local の行を編集してください。
似たような記述が他の行にもあるので注意してください。編集するのは16行目付近です。

以下のようになっている記述を

Require local

このように変更します。

#Require local
Require all granted

Require local の行が有効になっているので、初期設定ではlocal(サーバー自身)からのアクセスのみphpMyAdminを使用できる設定になっているのですが、この行の先頭に#記号でコメントアウトすることで無効にして、新たにRequire all grantedという設定を追加します。
これで「あなたのパソコンを含む、どこからでもphpMyAdminにアクセスできるようにする
設定に変更されることになります。

“wq:”でファイルを保存してvimを終了後、httpdを再起動すると設定が有効になります。

# systemctl restart httpd

では、phpMyAdminが使えるかどうか確認してみましょう。
http://xxx.xxx.xxx.xxx/phpmyadmin
(xxx.xxx.xxx.xxxはあなたのVPSのIPアドレス)
にブラウザからアクセスして、うまくログイン画面が表示できましたでしょうか?

phpMyAdminログイン画面

もし、この画面が出ずに’Forbidden‘の表示になる場合は、設定ファイルの記述が間違っているかhttpdを再起動していない可能性があります。もう一度設定を確認して下さい。

ここまできたらログインしてphpMyAdminの機能を利用できます。
しかしまだログインしないでください。
phpMyAdminの設定を変更して、より安全に使えるようにしましょう。phpMyAdminは便利なツールですが、たびたび脆弱性が指摘されており、外部からの悪意ある攻撃もよく受けています。万が一クラックされて中に入られてしまうと、大切なデータベースの中のデータが盗み見られてしまいます。

実施するセキュリティ対策は以下の3つです。

  1. 第三者に推測されにくいURLに変更する。
  2. SSLにより通信内容を暗号化する。
  3. こまめにphpMyAdminをバージョンアップする。

phpMyAdminのURLを変更、SSLを導入してセキュリティ強化する

セキュリティ対策1: 第三者に推測されにくいURLに変更する。

http://xxx.xxx.xxx.xxx/phpmyadmin というURLは第三者が推測しやすく「サーバーにphpMyAdmnがインストールされている」ということを外部に知られてしまいます。
そこでURLを分かりにくくします。
例えば、
http://xxx.xxx.xxx.xxx/phpmyadminY2V8jYfM
のように意味不明な文字列をURLの最後にくっつけて、このURLでアクセスしたときのみphpMyAdminのログイン画面が表示されるようにします。
phpMyAdminがインストールされていることを第三者が推測することが難しくなりますので、これだけでphpMyAdminに対する攻撃はかなり減らせます。

では実際に設定変更します。
再びphpMyAdmin.confを編集します。

# cd /etc/httpd/conf.d/
# vim phpMyAdmin.conf

以下のように、Aliasに関する2行をコメントアウトして、3行目に新しいAlias行を追加します。

#Alias /phpMyAdmin /usr/share/phpMyAdmin
#Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /phpMyAdminY2V8jYfM /usr/share/phpMyAdmin

これは、
http://xxx.xxx.xxx.xxx/phpmyadmin
のようなURLでアクセスすることを禁止して、代わりに
http://xxx.xxx.xxx.xxx/phpmyadminY2V8jYfM
というURLでphpMyAdminにアクセスできるようにする設定です。

設定が終わったらhttpdを再起動します。

# systemctl restart httpd

セキュリティ対策2: SSLにより通信内容を暗号化する。

phpMyAdminにログインする際、通常のHTTPアクセス(http:// で始まるURL)だと、通信経路が暗号化されていないためログインユーザー/パスワード情報が第三者に盗み見られる可能性があります。
そこで通信経路が暗号化されるSSLをインストールして、https://〜 でアクセスできるようにし、パスワード情報が平文のまま漏えいする危険を防ぎます。

ApacheがSSLを使えるようにするために、mod_sslをインストールします。これはApacheのモジュールと呼ばれるもので、プラグインのようにApacheの拡張機能として動作します。

# yum install mod_ssl

変更を有効にするため、httpdを再起動します。

# systemctl restart httpd

これでSSLが有効になりました。
http://xxx.xxx.xxx.xxx/phpmyadminY2V8jYfM
ではなく、
https://xxx.xxx.xxx.xxx/phpmyadminY2V8jYfM
でアクセスしてみてください。

以下のような警告が表示されると思います。(firefoxでアクセスした場合)
接続するには「エラー内容」のボタンをクリックして先に進みます。

本来ならば第三者機関である認証局発行のSSL証明書を取得し、自分のサイトが信頼できるサイトであることを保証してもらった上でSSLを導入した方が良いのですが、今回はローカルのサーバーで作成した自作の「オレオレ証明書」であるためこのような警告が出てしまっています。
通信経路を暗号化する目的だけならばこの状態でもphpMyAdminは使用できます。
phpMyAdminは一般に公開するものではなく、サイト管理者だけがアクセスできればよい性質のものなので、ひとまずはこれで運用できると思いますが、厳密には「正しいSSL証明書をインストールした」とは言えませんので、もし余裕がある方は次回紹介予定のLet’s EncriptによるSSL証明書取得を参考にして、認証局発行のSSLを適用してしてください。

ここまで来たら、暗号化されていないhttpでphpMyAdminに接続する必要はありません。
つまり、
http://xxx.xxx.xxx.xxx/phpmyadminY2V8jYfM
でアクセスする必要がなくなりましたので、httpでphpMyAdminに接続できないように設定しておきましょう。

# cd /etc/httpd/conf.d/
# vim phpMyAdmin.conf

phpMyAdmin.conf(一部抜粋)
14行目付近にSSLRequireSSLを追加します。これは、phpMyAdminへの接続はSSL通信のみ許可する設定です。

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8
   SSLRequireSSL

変更を有効にするため、httpdを再起動します。

# systemctl restart httpd

これで、 httpではphpMyAdminに接続できないようになりました。

セキュリティ対策3: こまめにphpMyAdminをバージョンアップする。

phpMyAdminは先述したとおり、たびたびツールの脆弱性が指摘されており、古いバージョンのまま使い続けるのはリスクがありますので、最新のバージョンをなるべく使うようにしましょう。
定期的に、以下のチェックをしておくと安心です。

最新のremiパッケージリストの取得をします。

# yum check-update --enablerepo=remi

phpMyAdminの情報を表示します。

# yum info --enablerepo=remi phpMyAdmin
・・・
Installed Packages
Name        : phpMyAdmin
Arch        : noarch
Version     : 4.7.1
Release     : 1.el7.remi

・・・
Available Packages
Name        : phpMyAdmin
Arch        : noarch
Version     : 4.7.2
Release     : 1.el7.remi
・・・

phpMyAdminのインストール情報が上記のように表示されますが、Installed Packagesよりも新しいAavailable Packegesがある場合は、新しいバージョンにアップデートできます。

# yum update  --enablerepo=remi phpMyAdmin

このコマンドで最新のphpMyAdminをインストールしてください。

phpMyAdminのセキュリティに関する設定は以上です。

次回(第6回目)の記事の公開まで自分のサーバーを触る予定が無い方は、前回と同様、外部からの余計な攻撃にさらされないようにサーバーを停止しておきましょう。
サーバー停止コマンドは以下です。

# shutdown -h now

第5回目は以上です。第6回目をお楽しみに。

(イラスト:小川真孝(ブログ))