Debian 12、11、10 に Nginx を使って phpMyAdmin をインストールする方法

phpMyAdmin は、Web 上で MySQL と MariaDB の管理を処理するために設計された、PHP で書かれた広く使用されているオープンソース ツールです。データベース、テーブル、フィールド、行の作成、変更、削除、SQL ステートメントの実行、ユーザー権限の管理など、さまざまなデータベース操作を実行するための直感的なグラフィカル インターフェイスを提供します。Debian 12、11、または 10 に phpMyAdmin をインストールするには、LEMP スタック (Linux、NGINX、MySQL/MariaDB、PHP) を手動で設定し、その後、phpMyAdmin の最新ビルドをダウンロードして構成する必要があります。

phpMyAdmin を使用するとデータベース管理が簡素化され、データベース操作にコマンド ラインを使用することに慣れていないユーザーでもアクセスできるようになります。このガイドでは、LEMP スタックを手動でインストールし、phpMyAdmin を構成し、セットアップを保護する手順について説明します。

phpMyAdmin 用に Debian に LEMP スタックをインストールする

ステップ 1: Debian システムの更新

安全でエラーのないセットアップのために、最新のパッケージで Debian システムを更新し始めてください。この予防的な手順は、インストール プロセス中に競合が発生する可能性を減らすことを目的としています。

sudo apt update && sudo apt upgrade

カーネルまたは多くのパッケージを更新する場合は、再起動が必要です。

ステップ2: Nginxをインストールする

まず、LEMP スタックを確立するために Nginx をインストールします。次のコマンドを実行します。

sudo apt install nginx

通常、システムはインストール後にデフォルトで Nginx サービスを有効にします。ただし、常に慎重にそのステータスを確認し、期待どおりに機能することを確認してください。

systemctl status nginx

サーバーがアクティブでない場合は、次のコマンドを使用して Nginx を有効にし、再起動のたびに自動的に起動することを確認します。

sudo systemctl enable nginx --now

このコマンドは、Nginx のデフォルト バージョンをインストールします。

注: 最新の安定版またはメインライン版のNginxを導入することに興味がある場合は、次のガイドに従うことを検討してください。 Debian 12、11、または 10 Linux で Nginx をアップグレードする方法。

ステップ3: MariaDBをインストールする

次に、LEMP スタック セットアップにデータベース コンポーネントをインストールします。優れたパフォーマンスと追加機能のため、多くの人が MySQL よりも MariaDB を選択します。

MariaDB をインストールするには、次のコマンドを実行します。

sudo apt install mariadb-server mariadb-client

注: MariaDB.orgの公式リポジトリから別のバージョンのMariaDBをインストールする場合は、 Debian 12、11、または 10 Linux に MariaDB 11.x または 10.x をインストールします。

完了したら、Nginx の検証と同様に、MariaDB サービスの有効化と正しい機能を確認します。

systemctl status mariadb

MariaDB がアクティブ化されていない場合は、以下のコマンドを使用してアクティブ化し、再起動時に起動することを確認します。

sudo systemctl enable mariadb --now

MariaDBのセキュリティを強化するには、提供されているセキュリティスクリプトを実行します。 mysql_secure_installation、インストール プロセス中に発生します。MariaDB の新規インストールのデフォルト設定では、悪意のある攻撃者が悪用できる脆弱性が残ることがよくあります。

sudo mysql_secure_installation

セキュリティ スクリプトを実行すると、MariaDB のセキュリティを強化するためのいくつかの手順がガイドされます。これらの手順には、ルート パスワードの設定、リモート アクセスの制限、匿名ユーザー アカウントの削除、テスト データベースの削除が含まれます。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y <---- Type Y then press the ENTER KEY.
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y <---- Type Y then press the ENTER KEY.
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y <---- Type Y then press the ENTER KEY.
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

ステップ4: PHPをインストールする

LEMP スタックのセットアップを完了するには、PHP サービスをインストールします。PHP は、PHP-FPM サービスと phpMyAdmin に必要な追加モジュールを通じて、Nginx と MariaDB 間のブリッジとして機能します。

注: 特定のバージョンのPHPをインストールする場合は、 Debian 12、11、または 10 Linux で利用可能な PHP 8.x バージョンをインストールします。

PHP と PHP-FPM を、必要なモジュールとともに Debian システムにデプロイするには、次のコマンドを実行します。

sudo apt install php-fpm php-mbstring php-bcmath php-xml php-mysql php-common php-gd php-cli php-curl php-zip php-gd

PHP をインストールしたら、MariaDB や Nginx の場合と同じように、PHP サービスのステータスを確認します。

たとえば、Debian Bookworm のデフォルトである PHP 8.2 の場合、具体的なコマンドは次のようになります。

systemctl status php8.2-fpm

PHP サービスが非アクティブのままの場合は、次のコマンドを使用して有効にし、再起動のたびに自動的に開始されるようにします。

sudo systemctl enable php-fpm --now

Nginx と Debian で phpMyAdmin を完成させる

このセクションでは、phpMyAdmin アーカイブを入手し、必要なディレクトリ、権限、データベース エントリを設定する手順について説明します。

ステップ1: phpMyAdminのスーパーユーザーを作成する

従来、root ユーザーを使用して phpMyAdmin にアクセスできます。ただし、堅牢なセキュリティ プラクティスに従うには、root ユーザーを使用する代わりに、別のスーパーユーザーを作成します。この概念は、root として直接ログインするのではなく、sudo ユーザーを活用する Linux のプラクティスと一致しています。

まず、ターミナル インターフェースで認証します。

sudo mariadb -u root

認証が成功すると、次のステップでは MariaDB ターミナル内にデータベースを作成します。

CREATE USER PMAUSER IDENTIFIED BY 'password here change';

次に、以下に示すように、ユーザーを作成し、必要な権限を付与します。

GRANT ALL PRIVILEGES ON *.* TO 'PMAUSER'@'localhost' IDENTIFIED BY 'password here change' WITH GRANT OPTION;

プレースホルダーパスワードの置き換え 「パスワード変更はこちら」 コマンドを実行する前に、安全なパスワードを設定することが重要です。

ユーザーを確立して権限を設定したら、変更に応じて権限を更新することを忘れないでください。

FLUSH PRIVILEGES;

MariaDB ターミナルを終了するには、次のコマンドを使用します。

QUIT;

ステップ2: phpMyAdminソースコードをダウンロードする

このセクションでは、phpMyAdmin のソース アーカイブを入手する方法について説明します。コマンド ライン ターミナルを利用すると、すべての言語で最新バージョンを効率的にダウンロードできます。

phpMyAdmin アーカイブをダウンロードするには、ターミナルで次のコマンドを実行します。

DATA="$(wget https://www.phpmyadmin.net/home_page/version.txt -q -O-)"
URL="$(echo $DATA | cut -d ' ' -f 3)"
VERSION="$(echo $DATA | cut -d ' ' -f 1)"
wget https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-all-languages.tar.gz

phpMyAdmin の英語版のみが必要な場合は、前のコマンドの最後の行を次の行に置き換えます。

wget https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-english.tar.gz

ダウンロード後、次の手順として、以下のコマンドを実行して phpMyAdmin アーカイブを抽出します。

tar xvf phpMyAdmin-${VERSION}-all-languages.tar.gz

ステップ3: phpMyAdminを設定する

次のフェーズでは、mv コマンドを使用して、抽出されたすべてのファイルを /var/www/ ディレクトリ内の最終的な宛先に移行します。

sudo mv phpMyAdmin-*/ /var/www/phpmyadmin

ソースから phpMyAdmin をインストールすると、デフォルトでは TMP ディレクトリが存在しないことがわかります。したがって、このディレクトリを手動で作成することをお勧めします。

sudo mkdir /var/www/phpmyadmin/tmp

phpMyAdmin ディレクトリには、デフォルトの設定例ファイルが含まれています。phpMyAdmin が認識できるように、名前を変更する必要があります。CP コマンドを使用して、/var/www/phpmyadmin/ ディレクトリにデフォルト ファイルのコピーを作成し、バックアップを確保します。

config.sample.inc.php を config.inc.php に複製するには、次のコマンドを実行します。

sudo cp /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php

ファイルをコピーしたら、好みのテキスト エディターで開きます。この例では、nano テキスト エディターを使用しています。

sudo nano /var/www/phpmyadmin/config.inc.php

phpMyAdmin は Blowfish 暗号を採用しています。この設定を変更するには、$cfg['blowfish_secret'] で始まる行に移動します。

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

一重引用符で囲んだ 32 文字のランダムな文字列を割り当てます。この文字列を生成する便利な方法として、pwgen プログラムを使用します。次のターミナル コマンドを実行して、pwgen をインストールします。

これにより、すべてのアクションが明確になり、ユーザー (またはアクションを実行している人) に直接関連付けられます。

sudo apt install pwgen 

インストール後、以下のコマンドを実行します。

pwgen -s 32 1

このコマンドは、blowfish シークレットとして機能する 32 文字のランダムな文字列を生成します。

設定ファイルに暗号を挿入する例 (コピーしないで):

UvqAlsvTxRdYIyO8TnlkJsVQaWs2LfgL

設定ファイルの例:

大多数のユーザーにとって、残りのデフォルト設定は十分なはずです。ただし、サーバーがネットワーク内の別のサーバー上にある場合は、$cfg['Servers'][$i]['host'] の行を見つけて変更し、プライベート IP アドレスを反映させる必要があります。この変更の図を以下に示します。

$cfg['Servers'][$i]['host'] = '192.168.55.101';

ステップ4: phpMyAdminファイルの権限を設定する

互換性とセキュリティを確保するには、ディレクトリ所有者に www-user への権限を割り当てることが重要です。

chown 権限を設定するには:

sudo chown -R www-data:www-data /var/www/phpmyadmin/

chmod 権限を設定するには:

sudo find /var/www/phpmyadmin/ -type d -exec chmod 755 {} \;
sudo find /var/www/phpmyadmin/ -type f -exec chmod 644 {} \;

次のセクションでは、phpMyAdmin サービス用の Nginx サービス ブロックの作成と設定について説明します。

phpMyAdmin 用の NGINX サーバー ブロックの設定

phpMyAdmin Web インターフェイスにアクセスするには、NGINX サーバー ブロックを作成する必要があります。セキュリティ対策を強化し、ブルート フォース攻撃を防ぐために、個別のサブドメインを確立することを強くお勧めします。このサブドメインには、適切と思われる任意の名前を付けてください。

ステップ 1: Debian で phpMyAdmin 用の Nginx サーバー ブロックを作成する

まず、nano テキスト エディターでサーバー ブロックを作成して開きます。次のコマンドを実行します。

sudo nano /etc/nginx/sites-available/phpmyadmin.conf

ステップ2: Nginxサーバーブロックを構成する

サーバー ブロック ファイルを正常に開いたら、次のテキストをコピーしてファイルに貼り付けます。ドメイン URL を必ず独自のものに置き換えてください。

server {
  listen 80;
  listen [::]:80;
  server_name pma.example.com;
  root /var/www/phpmyadmin/;
  index index.php index.html index.htm index.nginx-debian.html;

  access_log /var/log/nginx/phpmyadmin_access.log;
  error_log /var/log/nginx/phpmyadmin_error.log;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ ^/(doc|sql|setup)/ {
    deny all;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

  location ~ /\.ht {
    deny all;
  }
}

上記の例について注目すべき重要な点は次のとおりです。

  • /run/php/php8.2-fpm.sock; – このパスは、使用している PHP-FPM のバージョンを反映する必要があります。たとえば、8.3、8.1、8.0、7.4 などになります。
  • root /var/www/phpmyadmin/; – これは、このガイドで定義されているパスを指します。phpMyAdmin が別の場所にある場合は、この行を適宜更新してください。

静的 IP アドレスからサーバーにアクセスする唯一のユーザーである場合は、最初の場所エントリの上に次のコードを追加することを検討してください。

  allow <your ip address>;
  deny all; 

  location / {
    try_files $uri $uri/ /index.php;
  }

上記のコードは、403 エラーでページへの不正な訪問者を効果的にブロックし、あなたの IP アドレスのみにアクセスを許可します。これはブルート フォース攻撃に対する強力な防御ですが、すべての設定に適しているわけではありません。

ステップ3: テキストエディタを保存して終了する

変更を保存するには (CTRL+O) を押し、エディターを終了するには (CTRL+X) を押します。

ステップ4: 構成ファイルへのシンボリックリンクを作成する

次に、sites-available ディレクトリから構成ファイルが存在する sites-enabled ディレクトリへのシンボリック リンクを作成します。

sudo ln -s /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/

ステップ5: ドライランテストを実行する

NGINX サービスを再起動する前に、ドライ ラン テストを実行することが重要です。この対策はライブ環境では不可欠であり、設定ファイルの変更によって NGINX エラーが発生しないようにします。

sudo nginx -t

設定にエラーがない場合は、次の出力が表示されます。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

ステップ6: NGINXサービスの再起動

最後に、変更を有効にするために、NGINX サービスを再起動します。

sudo systemctl restart nginx

これで、phpMyAdmin 用の NGINX サーバー ブロックの作成に関するこのセクションは終了です。次のセクションでは、phpMyAdmin Web インターフェイスを開いてログインします。

phpMyAdmin Webインターフェースの操作

お好みの Web ブラウザを起動して、phpMyAdmin のインターフェースの操作を開始します。アドレス バーに pma.example.com と入力し、「example」をドメイン名またはサーバーの IP アドレスに置き換えてください。内部環境では localhost も使用できることに注意してください。

これを実行すると、次の画像に示すように、phpMyAdmin ログイン画面が表示されます。

資格情報を入力して「続行」または「ログイン」を選択し、ログイン画面を移動します。このアクションにより、次の画像に示す phpMyAdmin ダッシュボードにアクセスできるようになります。

phpMyAdmin を初めて使用する場合は、「ステータス ページ」について理解しておく必要があります。このページでは、データベースのステータスと健全性に関する包括的な情報が得られます。

統計ページの他に、phpMyAdmin には「アドバイザー システム」も組み込まれています。この便利な機能は、パフォーマンス向上のための提案を提供します。

ただし、アドバイザーは 24 時間待つことを推奨していますが、ほとんどの場合、最低でも 72 時間待つ方が最適であると考えられていることを覚えておく必要があります。これにより、データベースのサンプリングが長期間にわたって行われるようになり、より正確な推奨事項が提供されます。

さらに、アドバイザー システムだけが変更の唯一の根拠となるべきではありません。MySQL または MariaDB の構成ファイルを変更するには、慎重な検討、徹底的なテスト、場合によっては複数回の反復が必要です。目標は、最良の結果を得るために構成を最適化することであり、これには時間がかかることがよくあります。

Let's Encrypt SSL 証明書で phpMyAdmin を保護する

Certbot 経由で SSL 証明書を作成する

phpMyAdmin インスタンスのセキュリティを強化するには、SSL 証明書を使用して HTTPS 経由で Nginx を実行します。無料の自動化されたオープン SSL 証明書を提供する有名な認証局である Let's Encrypt を活用するのが最も簡単な方法です。

まず、次のコマンドを実行して、Let's Encrypt SSL 証明書の管理に役立つ certbot パッケージをインストールします。

sudo apt install python3-certbot-nginx -y

certbot パッケージのインストールが完了したら、次のコマンドを実行して SSL 証明書を作成します。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d pma.example.com

証明書のインストールプロセスを開始すると、次のようになります。

  • EFF (Electronic Frontier Foundation) からのメールの受信について尋ねるプロンプトが表示されます。
  • 同意する (Y) か同意しない (N) かに関係なく、システムは TLS 証明書を自動的にインストールして構成します。
  • 構成には、HTTPS 301 リダイレクトの適用、Strict-Transport-Security ヘッダーの追加、OCSP Stapling の実装が含まれます。
  • コマンド内の電子メールとドメイン名を正確な詳細に置き換えることを忘れないでください。

この設定が完了すると、URL は HTTP://pma.example.com から HTTPS://pma.example.com に移行され、以前の HTTP URL へのアクセスはすべて安全な HTTPS URL に自動的にリダイレクトされます。

SSL更新用のCronジョブを作成する

プロセスをさらに効率化するために、証明書を自動的に更新する cron ジョブを設定します。Certbot は、この目的のために自動更新スクリプトを提供しています。このジョブを設定する前に、次のコマンドを使用して、すべてが正しく動作することを確認するために慎重にドライ ラン テストを実行してください。

sudo certbot renew --dry-run

自動更新をスケジュールするには、次のコマンドを実行して crontab ファイルを開きます。

sudo crontab -e

証明書の有効性を保つために、証明書の更新を定期的に(少なくとも 1 日に 1 回)確認してください。更新が必要になった場合、スクリプトによって証明書が自動的に更新されます。cron 構文を使用して、希望する時間に更新を設定します。

00 00 */1 * * /usr/sbin/certbot-auto renew

結論

phpMyAdmin を Debian システムに正常にインストールして構成すると、ユーザーフレンドリな Web インターフェイスを通じて MySQL または MariaDB データベースを効率的に管理できます。定期的な更新とセキュリティ構成により、データベース管理ツールが安全かつ最新の状態に保たれます。Debian でデータベースを管理するために phpMyAdmin が提供する便利で強力な機能をお楽しみください。

Joshua James

コメントを残す