はじめに
MySQL(MariDB含む)を利用するのによく利用されるWebツールとして、phpMyAdminがあります。
AlmaLinux系であればコマンド一発でインストールすることができて非常に便利な反面、デフォルトだとセキュリティ的には非常に危険なものです。
今回はAlmaLinux9で、phpMyAdminのインストールと最低限のセキュリティリスクを回避する方法をご紹介します。
phpMyAdminのインストール
環境の前提条件は以下の通りです。
- OSはAlmaLinux9(8でも基本的には同じです)
- WebサーバはApache(2.4.57)がインストール済み
- DBサーバはMariaDB(10.5.22)がインストール済み
- PHPはOS標準のphp8.0(php-fpm)がインストール済み(Apacheと連携済み)
phpMyAdminのパッケージはAlmaLinuxのデフォルトレポジトリには入っていないため、epelレポジトリをインストールします。
# dnf -y install epel-release
次にphpMyAdminをepelレポジトリからインストールします。
# dnf --enablerepo=epel install phpMyAdmin
インストールはこれだけで完了です。
あとはApacheを再起動(reload)するだけでphpMyAdminが利用できます。
関連する設定ファイルは、
- /etc/httpd/conf.d/phpMyAdmin.conf ⇒Apacheと連携するための設定ファイル
- /etc/phpMyAdmin/config.inc.php ⇒phpMyAdminの設定ファイル
にインストールされます。
ただ、これだけだとリモートから接続することはできません。
理由はApacheと連携するための設定ファイル内で、デフォルトではローカルホスト(サーバー自身)からの接続しか許可されていないからです。
Apacheとの連携設定ファイルであるphpMyAdmin.confの中身を見てみると、
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8
Require local
</Directory>
デフォルトでは上記のように、phpMyAdminがインストールされている領域に対して、ローカルホストからの接続のみが許可されているため、リモートからは接続できないようになっています。
なお、デフォルト設定では、phpMyAdminのURLとして、
http(s)://xxx.xxx.xxx.xxx/phpMyAdmin
or
http(s)://xxx.xxx.xxx.xxx/phpmyadmin
のいずれかでアクセスできるように設定されています。(Alias行)
試しに、ブラウザからアクセスしてみると、
Forbiddenになります。
リモートから接続する方法としては、上記設定のRequire行を削除するか、Require ip行を追加して、任意のIPからの接続を許可してやる必要があります。
例えば、以下のように設定してみます。
<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8
Require ip 192.168.1.100 ←接続許可のIPを設定(複数ある場合はスペースで区切る)
## Require local
</Directory>
上記は192.168.1.100というIPからの接続を許可するという設定です。
設定ファイルを編集した上でApacheを再起動して、192.168.1.100からphpMyAdminに接続すると、
無事に接続できました。
ユーザ名とパスワードはMySQL(MariaDB)のユーザ名、パスワードでログインできます。
とりあえずphpMyAdminを利用するだけであれば、ここまでの設定で利用することが可能です。
もう少しセキュア&利便性を上げてみる
前述までで、とりあえずphpMyAdminを利用できるようになりましたが、よくある課題として以下のようなものがあります。
- URLが推測されやすい(phpMyAdmin or phpmyadmin)
- 固定IPがなくてIP制限をかけることが現実的に難しい
1つ目はデフォルトではURLにphpMyAdminもしくはphpmyadminが入っているので、推測されやすく攻撃対象になりやすい点です。
実際Webサーバーを運用していると、phpMyAdminがインストールされているか否かに関わらず、phpMyAdmin or phpmyadminに対する第三者の攻撃的なアクセスがよく見受けられます。
もちろん、最低限の施策としてIP制限を設けているのでアクセスされることはありませんが、万が一何かのミスで設定が外れてしまった場合などは、攻撃されてしまう可能性があります。
そこで、ちょっとした工夫として、phpMyAdminのURLを推測されにくいものに変更します。
Apacheとの連携ファイルであるphpMyAdmin.confのAlias行を変更することでURLを変更することが可能です。
##Alias /phpMyAdmin /usr/share/phpMyAdmin
##Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /pcpanel /usr/share/phpMyAdmin
元々あるAlias行を削除やコメントした上で、新たな行を追加します。
赤文字部分がURLになる部分です。
上記の場合だと、phpMyAdmin/phpmyadminがpcpanelになります。
設定を変更した上でApacheを再起動して
http(s)://xxx.xxx.xxx.xxx/pcpanel
でアクセスしてみます。
ちゃんんとアクセスできました。元のphpMyAdmin/phpmyadminでアクセスしてもNot Foundになります。
これで多少なりともセキュリティを向上させることができました。(例では比較的簡単な名前にしていますが、よりランダムな名前にした方が良いです。)
次に、2の対策として、BASIC認証を設定してみます。
ユーザ環境によってはそもそもIP制限が難しい(固定IPがなかったり)場合もあるかと思います。そういった場合にBASIC認証は非常に有用です。
同じくphpMyAdmin.confの設定にBASIC認証設定を追加します。
<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8
## Require ip 192.168.1.100
## Require local
AuthType Basic
AuthName "Auth"
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user
</Directory>
赤字部分が追加行です。BASIC認証を有効にした上で、パスワードファイルとして、
/etc/httpd/conf/.htpasswd
というファイルを指定しています。
次に、BASIC認証用のユーザを作成します。
# htpasswd -c /etc/httpd/conf/.htpasswd [USERNAME]
パスワードを入力するプロンプトが表示されるので、任意のパスワードを設定することで、上記パスワードファイルに追加されます。
Apacheを再起動して、BASIC認証を確認します。
ちゃんとBASIC認証が動作しました。先程設定したユーザ名、パスワードでログインできることを確認してください。
まとめ
phpMyAdminはWebブラウザからMySQLを操作できる非常に便利はツールです。
一方で万が一にも不正にアクセスされてしまうと、多大なる被害を受ける可能性があります。
なので、可能な限りセキュリティを高めた上で利用することが望ましいです。
今回お伝えしたのは最低限の対策ではありますが、あるとないとでは大きな違いがあるので、少しでもご参考になれば幸いです。