公開アドレスで実行したままにされた Adminer インスタンスは、データベースを失う最も静かな方法の一つです。誰かがテーブルを確認するために単一の PHP ファイルをデプロイし、URL が機能し、古くなったコピーが攻撃面になるまで何ヶ月もファイルがそこに残ります。このガイドが Linux VPS への Adminer インストールでセキュリティ強化に同じくらいの分量を割いているのはそのためです。
Adminer は MySQL、MariaDB、PostgreSQL、SQLite、その他複数のデータベースに対応した単一の PHP ファイル(フルビルドで約 503 KB)です。デプロイが非常に簡単なため、まさにそれが原因で不用意にデプロイされることが多いのです。
Nginx と PHP-FPM を備えた最新の Ubuntu または Debian VPS にインストールし、HTTP 認証、IP 許可リスト、Let's Encrypt を使った HTTPS を追加し、最後にパブリック設定を完全にスキップして SSH トンネル経由で Adminer にアクセスすべき時を決める明確なルールで締めくくります。
要約
- Adminer は
wgetで webroot にダウンロードする単一の PHP ファイルです。Nginx と PHP-FPM がこれを配信します。 - パブリックな Adminer インスタンスには三つすべてが必要です: HTTP 認証レイヤー、IP 許可リスト、HTTPS。どれか一つだけでは不十分です。
- 最も機密性の高いデータベースでは、Adminer をまったく公開しないでください。次にバインドしてください:
localhostSSH トンネル経由でアクセスしてください。 - 更新は一つのコマンドです: 再度実行してください
wgetダウンロードコマンドを。最近のセキュリティリリースにより、最新状態の維持は任意ではなく、実際の運用タスクとなっています。
前提条件: インストール前に必要なもの
このガイドは Ubuntu 26.04 および 24.04、Debian 13 を対象とし、Ubuntu 22.04 と Debian 12 の互換性メモも含みます。デフォルトの PHP-FPM バージョンは Ubuntu 26.04 で 8.5、Ubuntu 24.04 で 8.3、Debian 13 で 8.4、Debian 12 で 8.2、Ubuntu 22.04 で 8.1 です。
- Ubuntu 22.04、Ubuntu 24.04、Ubuntu 26.04、Debian 12、または Debian 13 を実行している Linux VPS で、
sudoアクセス - このVPSまたはAdminerがネットワーク経由でアクセスできるサーバーで既に実行中のデータベースサーバー(MySQL、MariaDB、またはPostgreSQL)。このガイドはデータベースをインストールしません。データベースを管理するために使用するツールをインストールします。
- オペレーティングシステムのサポートリポジトリから PHP-FPM をインストールします。Adminer のコンパイル済みファイルは PHP 5.3+ をサポートしていますが、古い PHP バージョンをインストールする代わりに、上記の現在のディストリビューション提供バージョンを使用してください。
- パブリック HTTPS 設定には、VPS に解決するホスト名と、インバウンド TCP ポート 80 および 443 が必要です。 Certbot Nginx ワークフロー ポート 80 で HTTP-01 検証を使用します。Let's Encrypt は現在サポートしています 短期 IP アドレス証明書ですが、Certbot はその Nginx ワークフロー経由で自動的にインストールしないため、このガイドではホスト名を使用します。
注意: このガイドは意図的に Nginx を使用しています。Apache を実行している場合、ダウンロードと強化のロジックは引き続き適用されますが、以下のサーバーブロック設定は適用されません。
Nginx と PHP-FPM のインストール
パッケージインデックスを更新し、サーバーに必要な PHP データベース拡張と一緒に Nginx と PHP-FPM をインストールすることから始めます:
sudo apt update
sudo apt install -y nginx php-fpm php-mysql
PostgreSQL バックエンドの場合はインストールしてください php-pgsql の代わりに、またはと一緒に php-mysql:
sudo apt install -y php-pgsql
PHP-FPM ソケットが存在することを確認します:
ls /run/php/
ソケットファイル名を上記のバージョンと一致させます。例えば php8.5-fpm.sock Ubuntu 26.04 では, php8.3-fpm.sock Ubuntu 24.04 では、または php8.4-fpm.sock Debian 13 では。期待するソケットが存在しない場合、対応するサービスを確認してください systemctl status php8.5-fpmを置き換えて 8.5 をあなたの OS にインストールされたバージョンに置き換えます。
プロのヒント: ソケットの不一致は
502 Bad Gateway。一致させてくださいfastcgi_passのファイル名と一致させ/run/php/、対応する PHP-FPM サービスが実行中であることを確認し、確認してください/var/log/nginx/error.logエラーが残っている場合は。
Adminer のダウンロード
Adminer を配信するディレクトリを作成し、単一ファイルをダウンロードします。 latest.php URL は常に現在の安定リリースに解決します:
sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
MySQL または MariaDB のみを使用する場合、MySQL 専用ビルドはより小さく(約 406 KB)、同じ方法でダウンロードできます:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php
PHP-FPM に読み取りアクセスを付与しながら、Adminer ディレクトリを root 所有のままにしてください:
sudo chown -R root:root /var/www/adminer
sudo chmod 755 /var/www/adminer
sudo chmod 644 /var/www/adminer/adminer.php
You do not need to track the version number: the latest.php URL は、ダウンロードを再実行することも更新パスであることを意味し、メンテナンスセクションがこれに戻ってきます。
Nginx サーバーブロックの設定
Adminer ディレクトリを提供し、 .php 以前に特定した PHP-FPM ソケットへのリクエストを渡すサーバーブロックを作成します。新しいサイトファイルを開きます:
sudo nano /etc/nginx/sites-available/adminer
以下を貼り付けて db.example.com すでに VPS を指しているホスト名に置き換え、 fastcgi_pass ソケットが PHP バージョンと一致することを確認します:
# /etc/nginx/sites-available/adminer
server {
listen 80;
server_name db.example.com;
root /var/www/adminer;
location = / {
return 302 /adminer.php;
}
location = /adminer.php {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location / {
return 404;
}
}
シンボリックリンクでサイトを有効化します sites-enabled、その後 Nginx をまだリロードせずに設定をテストします:
sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t
nginx -t 構文が有効でテストが成功したと報告されるはずです。サイトには認証も IP 制限もまだないため、Nginx をまだリロードしないでください。この二つのセキュリティ強化ステップを続けてください。IP 制限ステップが、両方の保護が適用された後に最初のリロードを実行します。
アクセスをロック: 認証、IP 制限、HTTPS
パブリックな Adminer インスタンスはデータベースの認証情報の直前にあるため、単一のロックではなく多層防御が必要です。以下の三つのレイヤーはそれぞれ異なる役割を担います: HTTP 認証はパスワードのない人を Web サーバーで止め、IP 許可リストは承認されていないアドレスからの接続を遮断し、HTTPS は入力した認証情報がネットワークを平文で通過しないようにします。三つすべてを追加してください。どれか一つが他の代わりにはなりません。
HTTP ベーシック認証の追加
インストールします htpasswd ユーティリティをインストールします。これは apache2-utils パッケージ(Ubuntu および Debian 上):
sudo apt install -y apache2-utils
パスワードファイルとユーザーを作成します(パスワードの入力を求められます):
sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd
PHP リクエスト自体が保護されるように、正確な Adminer PHP ロケーションにディレクティブを追加します:
location = /adminer.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
両方のディレクティブは Nginx HTTP auth_basic モジュールリファレンス. 実行 sudo nginx -t 設定を検証するために実行しますが、まだ Nginx をリロードしないでください。IP 許可リストが次に追加されます。平文 HTTP で Basic Auth 認証情報を送信しないでください。以下で HTTPS が有効になるまで待ってください。
IP アドレスによるアクセス制限
基本認証は未認証ユーザーをブロックしますが、Nginx はすべてのソースからのリクエストを受信し続けます。既存の Adminer PHP ロケーションを以下の組み合わせブロックに置き換えて、IP ルールと Basic Auth ディレクティブを一か所に保ちます:
location = /adminer.php {
satisfy all;
allow 203.0.113.10;
allow 203.0.113.0/28;
deny all;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
サンプルアドレスを実際のパブリック IP アドレスまたは信頼できるネットワーク範囲に置き換えます。必要な allow が必要なエントリのみを残し、未使用のサンプルを削除します。最初のエントリは単一アドレスを示し、2 番目は CIDR 範囲を示します。Nginx は 403 Forbidden ルールに一致しないアドレスに allow allow ルール。 Nginx アクセスモジュールリファレンス ディレクティブの構文を文書化しています。Nginx をテストしてリロードします:
sudo nginx -t && sudo systemctl reload nginx
Let's Encrypt で HTTPS を有効化
VPS を指しているドメインを使って Certbot とその Nginx プラグインをインストールし、証明書をリクエストします:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com
Certbot はサーバーブロックを編集してポート 443 で HTTPS を提供し、HTTP を HTTPS にリダイレクトするよう提案します。リダイレクトを受け入れてください。更新タイマーもインストールされるため、証明書は期限前に自動的に更新されます。次のコマンドで更新パスを確認できます: sudo certbot renew --dry-run、エラーなく完了するはずです。
次にアクセスしてください https://db.example.com/adminer.php 許可されたアドレスからアクセスし、Adminer が読み込まれる前に Nginx が Basic Auth 認証情報を要求することを確認します。
アクセスモデルの選択: パブリック HTTPS と SSH トンネル
上記の設定は、複数のマシンからデータベースへのブラウザアクセスが必要な場合や、SSH セッションを開くことが実用的でない場合に適しています。これが唯一のモデルではなく、機密データベースに対しては最も防御的なモデルでもありません。
機密性の高い設定では、Adminer を公開しないでください。 Adminer の公式セキュリティガイダンス 可能な限りパブリックインターネットからアクセスできないようにすることを推奨しています。トンネル専用アクセスを選択する場合は、パブリック Nginx サーバーブロックをこのループバック専用設定に置き換え、パブリック HTTPS 設定をスキップします:
# /etc/nginx/sites-available/adminer
server {
listen 127.0.0.1:8080 default_server;
server_name _;
root /var/www/adminer;
location = / {
return 302 /adminer.php;
}
location = /adminer.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location / {
return 404;
}
}
置き換え設定をテストしてリロードします:
sudo nginx -t && sudo systemctl reload nginx
次に自分のマシンからトンネルを開きます:
ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip
トンネルが動作している状態で開きます http://127.0.0.1:8080/adminer.php。Nginx は VPS のループバックインターフェースを通じてのみ Adminer 接続を受け入れ、SSH は暗号化された接続でトラフィックを運びます。これは OpenSSH ローカルフォワーディングのドキュメント.
複数のマシンからの直接ブラウザアクセスが必要な場合は、パブリック HTTPS、Basic Auth、IP 許可リストの設定を使用してください。パブリックアクセスが不要な場合は、ループバック専用の SSH 設定を優先してください。
重要なポイント: 最も安全な Adminer は、パブリックインターネットから決してアクセスできないものです。
Adminer のアップデートを維持する
忘れられたインスタンスがここでの本当のリスクです。後から考えることではなく、定期的なタスクとして扱う価値があります。Adminer の更新は同じ wget インストールに使用したコマンドです。なぜなら latest.php 常に現在のリリースをダウンロードします:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
これは理論的な懸念ではありません。 Adminer 5.4.3(2026年7月9日リリース)は、単一のリリースで7件の GitHub セキュリティアドバイザリに対処しました。以前の CVE-2026-25892 Adminer のバージョンチェックエンドポイントでさえ、認証なしのサービス拒否ベクターに変換できることを示しました。この問題はバージョン 5.4.2 で修正されました。古いコピーには公開記録された脆弱性が蓄積されるため、更新を定期的なメンテナンスにすべきです。
注意: 現在の公式 Adminer リリースを使用してください。 AdminerEvo リポジトリは 2025 年 1 月にアーカイブされました は積極的に維持されている代替手段ではありません。
VPS へのデプロイ
手動の手順をスキップしたい場合は、Adminer が Cloudzyのマーケットプレイス に基づいて クラウジー リナックス VPS。マーケットプレイスイメージは Apache、Basic Auth、および自己署名証明書を使用しているため、上記の Nginx、IP 許可リスト、Let's Encrypt スタックとは異なります。本番データベースの資格情報を入力する前に、これらのセキュリティの違いを確認してください。
Adminer 自体のリソースフットプリントは無視できる程度です。サイジングはデータベースが決めます。CPU、メモリ、ストレージは Adminer ではなく、データベースのデータとインデックスのサイズ、クエリ負荷、接続数、バックアップ、予想される成長に基づいて選択してください。
よくある質問
VPS で Adminer を公開することは安全ですか?
単独では安全ではありません。Adminer を公開しなければならない場合は、HTTP Basic Authentication、IP 許可リスト、HTTPS を組み合わせて配置してください。これらの制御はリスクを軽減しますが、公開を完全に無リスクにするわけではありません。機密データベースの場合は、Adminer を localhost に接続し、代わりに SSH トンネル経由でアクセスしてください。
インターネットに公開せずに Adminer にアクセスするにはどうすればいいですか?
Adminer が次のアドレスでリッスンするように、上に示したループバック専用 Nginx サーバーブロックを設定してください: 127.0.0.1:8080でそれを指すdocker contextを作成し、次に ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip 自分のマシンで。開きます http://127.0.0.1:8080/adminer.php トンネルが実行中の間。
Adminer は MySQL だけでなく PostgreSQL にも接続できますか?
はい。Adminer は MySQL、MariaDB、PostgreSQL、SQLite、MS SQL、Oracle をそのままサポートしており、プラグインを通じてさらに多くのデータベースが利用できます。データベース用の対応する PHP 拡張をインストールしてください。例えば php-pgsql PostgreSQL 用に、PHP がそれと通信できるように。
Adminer を最新の状態に保つにはどうすればいいですか?
ダウンロードコマンドを再実行します: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php。ザ latest.php URL は常に現在の安定版リリースを返すため、最新バージョンでコピーを上書きします。最近のセキュリティリリースにより、思い出したときだけでなくスケジュールに従って行う価値があります。
Adminer を apt パッケージ経由でインストールすべきですか、それとも直接ダウンロードすべきですか?
単一ファイルを直接ダウンロードしてください。これにより即座に現在のバージョンが手に入り、更新が1行のコマンドになります。一方、ディストリビューションパッケージは公式リリースより遅れる可能性があります。直接ファイルは最新のセキュリティ修正への短いパスを持つ同じツールです。