【Ubuntu20.04】phpMyAdminの簡単セキュリティ強化3つのステップ【Apache2】

phpMyAdminのセキュリティ強化

phpMyAdminのセキュリティ強化のためにやること概要

今回はAWSのLightsailubuntu20.04内(Apache2.4.41)でphpMyAdmin5.0.2をインストール後に行う基本セキュリティをご紹介します。

下記の3つのステップに沿って構築していきます。

  1. phpMyAdminページへのBasic認証による保護
  2. httpでのアクセス制限
  3. 第三者に推測されにくいURLへの変更

phpMyAdminページへアクセスした際にユーザー名とパスワードを催促するBasic認証を設定する

Basic認証とは、webサイトへの簡易的な制限をかける技術の一つです。あくまで簡易的になりますので、これ一つでセキュリティ全てが解決するわけではありません。ただ簡易的であっても、今回の3ステップのように複数の工程を組み合わせることにより、悪意あるハッカーたちのクラッキングを煩わせる効果があります。

サイト接続時のBasic(ベーシック)認証のサンプル

上の画像のようなフォームが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 restart
http://とhttps://で実際にアクセスしてみて確認する

httpsでアクセスした場合

httpsでphpmyadminページへアクセスした場合

httpでアクセスした場合

httpでphpmyadminページへアクセスした場合

 

上記のようになっていれば、ステップ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」加えておく方が良いのかもしれない。

PHP8.1.xとphpMyAdmin5.1.x組み合わせ時の表示バグ【Ubuntu20.04】

<Directory "/usr/share/phpmyadmin/">
Require all denied
</Directory>

3つのステップ完了後、バージョン更新も忘れずに

phpMyAdminに限らずの話ですが、バージョンはこまめに更新していきましょう。それなりにしっかりした企業ですと構成管理も徹底されていますが、個人や零細企業ですと疎かになりがちです。ただ古いバージョンのまま使用し続けるのは非常に危険ですので、定期的にバージョンを確認&更新する癖をつけておきましょう(と書いていて今自分に言い聞かせています💦)。

About Naoki 24 Articles
デザインを含めたフロントエンドから、インフラ含めたバックエンドまで広く浅く活動しているエンジニアです。主にSaasの開発・営業・運営管理などをしております。毎日デスマーチがモットーなブラックエンジニアです。 私が管理しているクラウドソフトウェアがこちらです→まとめツール倶楽部『MTCsystem』

Be the first to comment

Leave a Reply

Your email address will not be published.


*


CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)