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つの質問が出ます。

  1. Web server to reconfigure automatically:apache2 にスペースキーで印(*)を付けてから Enter を押します。印を付けずに進めると Apache の設定が作られません。
  2. 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 トンネル経由でだけ使います。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲