はじめに
MySQL を GUI で管理するのに非常に便利なツールとして phpMyAdmin がありますが、phpMyAdmin はメジャーなこともあり、非常に攻撃を受けやすいツールでもあります。
通常は、IPアドレス でアクセス制限をかけて管理するのですが、自宅環境などで IPアドレスを固定できない場合は制限ができません。環境によっては SSL での暗号化もできない場合があると思います。
そこで何か安全な方法はないかと調べたところ、phpMyAdmin で 2段階認証を導入する方法がありましたのでご紹介します。
動作確認環境は以下のようになります。
- PHP 5.6.15 (PHP >= 5.3.0でもいけそう)
- MySQL 5.6.27
- CentOS 7.1
2段階認証の方法
phpMyAdmin の2段階認証は、thecsea/twofactor-phpmyadmin というライブラリを使用します。このライブラリを使用すると、QR コードを表示し、Google Authenticator に登録すると、2段階認証を実現することができます(PHP >= 5.3.0)。
このライブラリだと、トークンを入力してからログインするという形になり、若干、違和感があるかもしれませんが、安全なトークンを利用しているので問題はありません。
2段階認証の設定
mod_rewrite の設定
.htaccess で設定ができるように、httpd.conf を編集します。
# vim /etc/httpd/conf/httpd.conf <Directory "/home/c3008847/public_html/websec-room.com"> #AllowOverride None AllowOverride All </Directory>
Apache を再起動します。
# systemctl restart httpd.service
2段階認証の設定
まず、composerというツールをインストールします。
# cd /home/c3008847/public_html/websec-room.com # curl -sS https://getcomposer.org/installer | php
次に、以下のコマンドで thecsea/twofactor-phpmyadmin をインストールします。通常は、これでうまくいくようですが、私の環境ではうまくいきませんでした。このライブラリと phpMyAdmin のバージョンの組み合わせによってインストールが失敗するようです。
# php composer.phar require thecsea/twofactor-phpmyadmin
失敗した場合は、thecsea/twofactor-phpmyadmin のソースを git で持ってきてインストールします。
# git clone https://github.com/thecsea/twofactor-phpmyadmin.git # cd twofactor-phpmyadmin
ここで、composer.json の内容が phpMyAdmin の最新バージョンを見るようになっているので、古いバージョンを見るように、composer.json の phpmyadmin/phpmyadmin を”dev-MAINT_4_4_15”に修正します。付けるラベルはこちらを参照してください。
# vim composer.json "require": { "php": ">=5.3.0", "thecsea/twofactor-dir": "1.0.*", "phpmyadmin/phpmyadmin": "dev-MAINT_4_4_15" },
インストールを実行します。
# php composer.phar install
このライブラリは、 thecsea/twofactor-dir というライブラリを使用していますので、その設定を行います。
まず、インストール先のパーミッションをPHPから書き込み可能にします。
# cd /home/c3008847/public_html/websec-room.com/twofactor-phpmyadmin/vendor/phpmyadmin # chmod -R 777 phpmyadmin
ブラウザで以下のアドレスにアクセスします(SSLが有効な場合)。
- https://<サーバー名>/twofactor-phpmyadmin/vendor/thecsea/twofactor-dir/files/install.php
テキストボックスにインストール先のフルパスを入力します。ここでは以下のように入力して、[Install] をクリックします。エラーが出なければ問題なく設定が終了しています。
/home/c3008847/public_html/websec-room.com/twofactor-phpmyadmin/vendor/phpmyadmin/phpmyadmin
次に以下のアドレスにアクセスし、QR コードを表示し、Google Authenticator に読み込ませます。この時点でサーバーの秘密鍵が作成されます。なお、サンプルでは表示していますが、QR コードと秘密鍵は絶対他の人に見せないでください。
- https://<サーバー名>/twofactor-phpmyadmin/vendor/phpmyadmin/phpmyadmin/get_qr.php
インストールが終了したので、パーミッションを戻しておきます。また、QR コードが表示されないようにパーミッションの設定しておきます。
# chmod -R 655 phpmyadmin # chmod 600 phpmyadmin/get_qr.php
以上で設定終了です。
実際の動作
以下のアドレスにアクセスすると、コードを求められるので、Google Authenticator で表示されるコードを入力します。
- https://<サーバー名>/twofactor-phpmyadmin/vendor/phpmyadmin/phpmyadmin/
Google Authenticator には、以下の様にコードが表示されます。正しいコードが入力されるとログイン画面が表示されます。なお、この2段階認証はブラウザを終了するまで有効です。
ログイン画面では、通常の MySQL の ID とパスワードの入力が求められます。
ID とパスワードを正しく入力すると、phpMyAdmin の画面が表示されます。
おわりに
phpMyAdmin に2段階認証を導入する方法を見てきましたが、いかがだったでしょうか。
まだ手作業が必要な部分がありますし、英語版しか提供されていないという懸念はありますが、攻撃を受けやすい phpMyAdmin に2段階認証を導入することはセキュリティレベルを大きく向上させますので、ぜひ導入をご検討ください。
また、phpMyAdmin を導入するサーバーには SSL 証明書の導入を強く推奨いたします。SSL 証明書の値段が高いというのであれば、現在、無料で SSL 証明書を提供している Let’s Encrypt というサービスがあるのでご利用をご検討ください。
なお、使用するライブラリの特性上、この方法で2段階認証を行う場合は、SSL 証明書による暗号化通信は必須になります。ご注意ください。
コメント