
phpMyAdminのセキュリティ強化のためにやること概要
今回はAWSのLightsailのubuntu20.04内(Apache2.4.41)でphpMyAdmin5.0.2をインストール後に行う基本セキュリティをご紹介します。
下記の3つのステップに沿って構築していきます。
- phpMyAdminページへのBasic認証による保護
- httpでのアクセス制限
- 第三者に推測されにくいURLへの変更
phpMyAdminページへアクセスした際にユーザー名とパスワードを催促するBasic認証を設定する
Basic認証とは、webサイトへの簡易的な制限をかける技術の一つです。あくまで簡易的になりますので、これ一つでセキュリティ全てが解決するわけではありません。ただ簡易的であっても、今回の3ステップのように複数の工程を組み合わせることにより、悪意あるハッカーたちのクラッキングを煩わせる効果があります。

上の画像のようなフォームがwebサイト接続時に表示されるのがBasic認証というものになります。
ログアウトの問題やパスワードが平文といった脆弱性が懸念されておりますが、今回のステップ2と3、phpmyadmin自体のログインパスワードによる認証、とこれらの組み合わせが当該脆弱性を少しでも抑制してくれるものとなります。
phpMyAdminのconfファイル
phpmyadmin.confファイルがあるディレクトリへ移動
$ cd /etc/apache2/conf-available/phpmyadmin.confを開きます。nanoでもviでも構いません。
$ sudo vim phpmyadmin.conf下記の AllowOverride All 部分を付け足します。
<Directory /usr/share/phpmyadmin/>
AddDefaultCharset UTF-8
AllowOverride All
<IfModule mod_authz_core.c>
<RequireAny>
Require all granted
</RequireAny>
</IfModule>
</Directory>.htaccessファイルを用意する
当該ファイルを用意する場所は下記になります。
$ cd /usr/share/phpmyadmin/$ sudo vim .htaccess書き込む内容は下記になります。
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user/etc/phpmyadmin/.htpasswd ここがパスワードを置く位置になります。書き終わったらvimならば、「esc」押して「:wq」で保存し閉じられます。
Basic認証のユーザー名とパスワードを設定する
まず、.htpasswdファイルを格納するディレクトリ を用意してください。
$ cd /etc
$ sudo mkdir phpmyadmin下記の要領でユーザー名を設定します。
$ sudo htpasswd -c /etc/phpmyadmin/.htpasswd ここに任意のユーザー名例えば「gh-master」というユーザー名にしたいとするならば、
$ sudo htpasswd -c /etc/phpmyadmin/.htpasswd gh-masterという具合になります。
上記のコマンドを実行するとパスワード設定を求められるレスポンスがありますので、ご自身で決めたパスワードを入れてください。入力後、確認のためにもう一度入力してくれと促されるので、同じパスワードを入力してください。
これにより、/etc/phpmyadmin/.htpasswdの中にユーザー名とパスワードが書き込まれている状態になります。試しに確認してみてください。
$ less /etc/phpmyadmin/.htpasswdユーザー名とハッシュ化されたパスワードが確認できると思います。「esc」押して「:q」で抜けられます。
設定したBasic認証を確認してみましょう。下記コマンドでapache再起動してください。
$ sudo service apache2 restart最初の方で紹介した画像のように、ユーザー名とパスワードを求める表示が出ていれば完成です。
これにてステップ1「phpMyAdminページへのBasic認証による保護」は完了。今度はステップ2へ進みます。
http://〜でのアクセスを制限する
今回証明書は発行しません。基本管理者のみ閲覧する前提ですので、httpでアクセスさせないことが目的となります。
ステップ1でも前述したphpmyadmin.confファイルを弄りますので、下記コマンドで中に入ります。
$ sudo vim /etc/apache2/conf-available/phpmyadmin.conf下記の SSLRequireSSL 部分を加えてください。
<Directory /usr/share/phpmyadmin/>
AddDefaultCharset UTF-8
AllowOverride All
SSLRequireSSL
<IfModule mod_authz_core.c>
<RequireAny>
Require all granted
</RequireAny>
</IfModule>
</Directory>Apache再起動
$ sudo service apache2 restarthttp://とhttps://で実際にアクセスしてみて確認する
httpsでアクセスした場合

httpでアクセスした場合

上記のようになっていれば、ステップ2の「httpでのアクセス制限」ミッションは完了です!
次は最後のステップ3へ!
phpMyAdminページへのURLを第三者に推測されにくいURLへ変更する
http://~/phpmyadminとなると簡単に推測がついてしまい、悪意のあるハッカーに狙われかねません。
そこで、リクエスト先を変更して少しでもリスクを減らそうというのが今回の試みにあります。
では早速、下記のコマンドで前述してきた例のconfファイルをまた弄ります。
$ sudo vim /etc/apache2/conf-available/phpmyadmin.conf
下記の Alias /ここにお好きな意味不明な文字列を入れる /usr/share/phpmyadmin 部分を追加し、その上に2行をコメントアウトします。
# Alias /phpmyadmin /usr/share/phpmyadmin
# Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /ここにお好きな意味不明な文字列を入れる /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin/>
AddDefaultCharset UTF-8
AllowOverride All
SSLRequireSSL
<IfModule mod_authz_core.c>
<RequireAny>
Require all granted
</RequireAny>
</IfModule>
</Directory>「ここにお好きな意味不明な文字列を入れる」ちょっと書いていて俯いてしまいましたが、要は第三者に推測されにくい文字列を入れれば良いということです。
例えば、
# Alias /phpmyadmin /usr/share/phpmyadmin
# Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /gh-923rjdj3msdpofi0qwek-phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin/>
AddDefaultCharset UTF-8
AllowOverride All
SSLRequireSSL
<IfModule mod_authz_core.c>
<RequireAny>
Require all granted
</RequireAny>
</IfModule>
</Directory>とした場合は、「https://xxx.xxx.xxx.xxx/gh-923rjdj3msdpofi0qwek-phpmyadmin」へアクセスすればphpMyAdminのページが開けるといった具合になります。
ここで注意が必要なのが、どこからかコピペで引っ張ってきた当該エイリアスの一行を変更して使用する場合、「/usr/share/phpmyadmin」の部分が「/usr/share/phpMyAdmin」になっている場合があります。これら二つとも別物になるので、ご自身のサーバ設定に合わせたパスにするようにしてください。
さて、設定を反映させるためにApache再起動します。
$ sudo service apache2 restartご自身で付けた文字列でアクセスしてみて開ければステップ3「第三者に推測されにくいURLへの変更」ミッション完了です!
phpMyAdminを複数バージョンインストールした場合
下記記事のようにphpMyAdminに不具合が生じた、使用しているPHPバージョンに合わせてphpMyAdminを切り替えなくてはいけない、などphpMyAdminを複数バージョンインストールし、使用しないディレクトリを制限するときはconfファイルに当該ディレクトリに「Require all denied」加えておく方が良いのかもしれない。
<Directory "/usr/share/phpmyadmin/">
Require all denied
</Directory>3つのステップ完了後、バージョン更新も忘れずに
phpMyAdminに限らずの話ですが、バージョンはこまめに更新していきましょう。それなりにしっかりした企業ですと構成管理も徹底されていますが、個人や零細企業ですと疎かになりがちです。ただ古いバージョンのまま使用し続けるのは非常に危険ですので、定期的にバージョンを確認&更新する癖をつけておきましょう(と書いていて今自分に言い聞かせています💦)。


Be the first to comment