2026年7月23日
2026年7月23日
phpMyAdminのインストールと安全な設定方法(Ubuntu 24.04・Apache)
phpMyAdmin は、MySQL・MariaDB をブラウザから操作する管理ツールです。便利な反面、Web に公開した phpMyAdmin はデータベースへの入口そのものなので、ログイン画面が誰からでも見える状態にしておくと、パスワードの総当たりや脆弱性を突く攻撃の対象になります。
この記事では、Ubuntu 24.04 と Apache の組み合わせで、パッケージ(apt)から phpMyAdmin を入れ、外部から触られないように絞り込むまでを説明します。手順は2026年11月時点の Ubuntu 24.04 のパッケージ(phpmyadmin 5.2.1、PHP 8.3、Apache 2.4.58)で実際に動かして確認しています。設定の考え方は phpMyAdmin 公式ドキュメントの「Securing your phpMyAdmin installation」に沿っています。
前提
- Ubuntu 24.04 のサーバーで、
sudoが使えること - MySQL または MariaDB が同じサーバーで動いていること(まだなら先に入れて初期設定を済ませます。MySQLの初期セキュリティ設定)
- できれば、管理に使う接続元の固定 IP アドレスがあること(IP 制限に使います)
ステップ1:Apache・PHP・phpMyAdmin を入れる
sudo apt update
sudo apt install apache2 libapache2-mod-php phpmyadmin
libapache2-mod-php を明示しているのには理由があります。phpmyadmin パッケージは Apache 用の PHP モジュールを「推奨」にしか入れておらず、Apache が先に入っていると推奨が満たされたとみなされて、Apache で PHP を動かすモジュールが入らないことがあります。検証では、この状態で /phpmyadmin/ を開くと HTTP 200 で PHP のソースコードがそのまま表示されました。環境によって起きないこともありますが、まとめて指定しておけば防げます。PHP-FPM を使っているサーバーでは、libapache2-mod-php の代わりに既存の PHP-FPM の設定を使ってください。
インストール中に2つの質問が出ます。
- Web server to reconfigure automatically:
apache2にスペースキーで印(*)を付けてから Enter を押します。印を付けずに進めると Apache の設定が作られません。 - Configure database for phpmyadmin with dbconfig-common?:phpMyAdmin の「設定保存領域」(ブックマークや履歴などを保存するデータベース)を作るかどうかです。同じサーバーの MySQL を使うなら「Yes」で構いません。あとから
sudo dpkg-reconfigure phpmyadminでやり直せます。
apache2 を選ぶと、次の設定が自動で作られて有効になります。
| ファイル | 役割 |
|---|---|
/etc/phpmyadmin/apache.conf |
Alias /phpmyadmin /usr/share/phpmyadmin と、内部ディレクトリ(templates・libraries)への Web アクセス禁止 |
/etc/apache2/conf-enabled/phpmyadmin.conf |
上のファイルへのリンク(a2enconf で有効化した状態) |
/etc/phpmyadmin/config.inc.php |
パッケージが管理する phpMyAdmin の設定。直接は編集しない |
/etc/phpmyadmin/conf.d/ |
自分の設定を置く場所。ここの *.php は config.inc.php から読み込まれる |
古い解説には、/usr/share/phpmyadmin を /var/www/html/phpmyadmin にリンクして www-data に所有権を渡す手順がありますが、パッケージ版では不要です。プログラムのファイルを Web サーバーの実行ユーザーが書き換えられる状態にするのは避けてください。
ブラウザで http://サーバーのアドレス/phpmyadmin/ を開き、ログイン画面が出ることを確かめます。ただし、この時点では誰でもログイン画面にたどり着けます。次のステップに進むまでは、外部から接続できる状態で放置しないでください。
ステップ2:Apache で接続元を絞り、Basic認証をかける
phpMyAdmin にたどり着く前に、Apache の段階で門を2つ設けます。
- IP 制限:管理者の接続元以外には 403 を返す
- Basic認証:phpMyAdmin のログイン画面の手前で、別のユーザー名とパスワードを求める
まず、Basic認証用のパスワードファイルを作ります(htpasswd は apache2 と一緒に入る apache2-utils に含まれます)。
sudo htpasswd -c /etc/apache2/.htpasswd-pma pmaadmin
sudo chown root:www-data /etc/apache2/.htpasswd-pma
sudo chmod 640 /etc/apache2/.htpasswd-pma
-c はファイルを新しく作るオプションです。2人目以降を追加するときは -c を付けずに実行してください(付けると既存のユーザーが消えます)。
パッケージの apache.conf は直接書き換えず、別の設定ファイルを追加します。
sudo nano /etc/apache2/conf-available/phpmyadmin-restrict.conf
<Directory /usr/share/phpmyadmin>
AuthType Basic
AuthName "Restricted"
AuthUserFile /etc/apache2/.htpasswd-pma
<RequireAll>
# 管理に使う接続元の IP アドレスに置き換える(複数はスペース区切り)
Require ip 203.0.113.10
Require valid-user
</RequireAll>
</Directory>
RequireAll の中に書いた条件は「すべてを満たしたときだけ許可」になります。指定した IP から来て、かつ Basic認証に通った人だけが phpMyAdmin のログイン画面に進めます。
sudo a2enconf phpmyadmin-restrict
sudo apache2ctl configtest
sudo systemctl reload apache2
Syntax OK が出てから再読み込みします。検証環境では、認証なしで 401、正しい認証で 200、許可していない IP からは認証が正しくても 403 になることを確認しました。
固定 IP がない場合は Require ip の行を外して Basic認証だけにするか、サーバーへ SSH でトンネルを張って Require ip 127.0.0.1 ::1 に限定する方法があります。
# 手元の PC で実行。手元の 8080 番をサーバーの 80 番につなぐ
ssh -L 8080:127.0.0.1:80 ユーザー名@サーバーのアドレス
この状態で手元のブラウザから http://127.0.0.1:8080/phpmyadmin/ を開くと、サーバーからは 127.0.0.1 からの接続に見えます。
Basic認証の仕組みや .htpasswd の扱いは ApacheでBasic認証を設定する方法 も参考にしてください。
ステップ3:phpMyAdmin 側の設定を足す
/etc/phpmyadmin/conf.d/ に自分用の設定ファイルを作ります。パッケージの更新で上書きされないのはこちらです。
sudo nano /etc/phpmyadmin/conf.d/90-local.php
<?php
// MySQL の root ユーザーでのログインを禁止する
$cfg['Servers'][1]['AllowRoot'] = false;
// 操作がないまま何秒でログアウトさせるか(既定は 1440 秒)
$cfg['LoginCookieValidity'] = 1800;
sudo php -l /etc/phpmyadmin/conf.d/90-local.php
No syntax errors detected と出れば構文は正しく書けています。設定は次にページを開いたときから反映されます。
- AllowRoot:phpMyAdmin のログインに root を使わせないための設定です。普段の作業には、必要なデータベースだけに権限を持つユーザーを作って使います(MySQLのユーザーと権限の設定)。
- ログイン方式:パッケージ版の既定は
cookie認証(ログイン画面で MySQL のユーザー名とパスワードを入れる方式)です。設定ファイルにパスワードを書くconfig方式は、ログイン画面なしで誰でも入れてしまうので使わないでください。 - 2段階認証:phpMyAdmin 自体にも2段階認証の機能があり、ログイン後の「設定」から利用者ごとに有効にできます(設定保存領域が必要です)。
ステップ4:HTTPS で使う
ログイン情報やデータがそのまま流れるので、phpMyAdmin は HTTPS でだけ使います。サイトにすでに証明書が入っていれば、https://ドメイン/phpmyadmin/ で開けます。まだなら Let's Encrypt などで証明書を入れ、HTTP から HTTPS へ転送してください(CertbotでApacheにSSL証明書を設定する方法)。
SSH トンネルで使う場合は、通信が SSH で暗号化されるので、トンネルの中は HTTP のままで構いません。
ステップ5:ファイアウォールで開けるポート
phpMyAdmin は Apache の上で動くので、新しく開けるポートはありません。Web 用の 80・443 番が開いていれば足ります。
sudo ufw allow OpenSSH
sudo ufw allow "Apache Full"
sudo ufw enable
sudo ufw status
OpenSSH を許可する前に ufw enable すると、SSH で作業中の接続が切れることがあります。順番に注意してください。MySQL の 3306 番は、phpMyAdmin のためには開ける必要がありません(phpMyAdmin は同じサーバーから MySQL に接続します)。
UFW で 443 番そのものを特定の IP だけに絞ると、同じサーバーの Web サイトにも誰もアクセスできなくなります。phpMyAdmin だけを絞るなら、ステップ2の Apache の設定で行います。UFW の使い方は UFWでファイアウォールを設定する方法 にまとめています。
運用で気をつけること
- 更新を続ける:phpMyAdmin は過去に何度も脆弱性が見つかっています。
sudo apt update && sudo apt upgradeを定期的に行い、Ubuntu のセキュリティ更新を当ててください。 - 使わない期間は止める:普段使わないなら、
sudo a2disconf phpmyadminとsudo systemctl reload apache2で無効にしておき、使うときだけa2enconfで戻す運用もできます。 - URL を変えるだけでは守れない:
/phpmyadminを推測しにくい名前に変える方法もありますが、目立たなくなるだけで、IP 制限や認証の代わりにはなりません。 - ログを見る:
/var/log/apache2/access.logで/phpmyadminへのアクセスと応答コード(401・403 の多発など)を確認できます。
うまくいかないとき
| 症状 | 主な原因と確認すること |
|---|---|
/phpmyadmin/ を開くと PHP のソースが表示される |
Apache に PHP モジュールが入っていない。sudo apt install libapache2-mod-php のあと sudo systemctl restart apache2 |
/phpmyadmin/ が 404 |
インストール時に apache2 を選んでいない。sudo dpkg-reconfigure phpmyadmin で選び直すか、sudo a2enconf phpmyadmin |
| 自分の IP からでも 403 | Require ip の値が実際の接続元と違う。アクセスログに記録された接続元 IP を確認する |
| ログインで root が拒否される | AllowRoot を false にしたため(意図どおり)。作業用のユーザーでログインする |
| WordPress のパスワードを phpMyAdmin で直したい | phpMyAdminでWordPressのパスワードをリセットする方法 を参照 |
まとめ
- Ubuntu では
apache2・libapache2-mod-php・phpmyadminをまとめて入れ、質問でapache2に印を付けます。 - 設定はパッケージのファイルを直接触らず、Apache は
conf-availableに、phpMyAdmin は/etc/phpmyadmin/conf.d/に足します。 - 接続元の IP 制限と Basic認証を Apache 側で重ね、phpMyAdmin では root ログインを禁止し、HTTPS かSSH トンネル経由でだけ使います。