Ubuntu 16.04でNginxを使用してphpMyAdminをインストールして保護する方法

前書き

多くのユーザーはMySQLのようなデータベース管理システムの機能を必要としますが、そのコマンドラインインターフェイスは一部の人にとっては直感的でなく、ユーザーフレンドリーであり、参入の障壁となります。

  • phpMyAdmin *は、ユーザーがWebインターフェイスを介してMySQLとやり取りできるように作成されました。 このガイドでは、phpMyAdminをインストールしてセキュリティで保護し、Ubuntu 16.04システムからデータベースを安全に管理できるようにする方法について説明します。 Nginx Webサーバー上にこのセットアップを構築します。NginxWebサーバーは、優れたパフォーマンスプロファイルを備えており、他のいくつかのWebサーバーよりも高い負荷を処理できます。

前提条件

このガイドを開始する前に、次の前提条件の手順を完了していることを確認してください。

  • 最初に、https://digitalocean.com/community/articles/initial-server-setup-with-ubuntu- 16-04 [Ubuntu 16.04の初期サーバーセットアップ]。

  • また、Ubuntu 16.04サーバーでLEMP(Linux、Nginx、MySQL、およびPHP)のインストールを完了したと想定します。 まだこれを行っていない場合は、https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntuのガイドに従ってください。 -16-04 [Ubuntu 16.04へのLEMPスタックのインストール]。 必ずMySQLデータベース管理者のパスワードをメモしてください。

最後に、phpMyAdminなどのソフトウェアを使用する際に注意すべき重要なセキュリティ上の考慮事項があります。MySQLインストールと直接通信し、MySQL資格情報を使用して認証を処理し、任意のSQLクエリの結果を実行して返します。

これらの理由により、また攻撃の対象となることが多い、広く展開されたPHPアプリケーションであるため、プレーンHTTP接続を介してリモートシステムでphpMyAdminを実行しないでください。 SSL / TLS証明書で構成された既存のドメインがない場合は、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-でこのガイドに従うことができますencrypt-on-ubuntu-16-04 [Ubuntu 16.04でLet’s Encryptを使用してNginxを確保する]。

これらの前提条件の手順を完了すると、このガイドを使用する準備が整います。

ステップ1-phpMyAdminのインストール

LEMPプラットフォームがすでに整っているので、Ubuntuのデフォルトリポジトリから入手できるphpMyAdminをインストールすることから始めます。

最初に、サーバーのローカルパッケージインデックスを更新して、利用可能なパッケージへの新しい参照セットがあることを確認します。 次に、 `+ apt +`パッケージツールを使用して、リポジトリからソフトウェアを取得し、システムにインストールします。

sudo apt-get update
sudo apt-get install phpmyadmin

インストール中に、いくつかの情報の入力を求められます。 ソフトウェアが自動的に設定するWebサーバーを尋ねます。 使用しているWebサーバーであるNginxは使用可能なオプションの1つではないため、「+ TAB 」を押してから「 ENTER +」を押してこのプロンプトをバイパスできます。

次のプロンプトは、phpMyAdminが使用するデータベースを `+ dbconfig-common +`で設定するかどうかを尋ねます。 「はい」を選択して続行します。 これらの変更を許可するには、MySQLのインストール中に設定したデータベース管理者パスワードを入力する必要があります。

これで、phpMyAdminアプリケーションとそのデータベース(この手順で作成されます)のパスワードを選択して確認するように求められます。 安全なパスワードを選択して確認し、メモします。

これでインストールが完了します。 Nginx WebサーバーがphpMyAdminファイルを正しく検索して提供するには、インストールファイルからNginxドキュメントルートディレクトリへのシンボリックリンクを作成する必要があります。

sudo ln -s /usr/share/phpmyadmin /var/www/html

最後に、phpMyAdminが依存するPHPモジュール「+ mcrypt +」を有効にする必要があります。 これはphpMyAdminとともにインストールされたため、オンにしてPHPプロセッサを再起動します。

sudo phpenmod mcrypt
sudo systemctl restart php7.0-fpm

これで、phpMyAdminインストールが動作可能になりました。 インターフェイスにアクセスするには、ウェブブラウザでサーバーのドメイン名またはパブリックIPアドレスの後に「+ / phpmyadmin +」を入力します:

http:///phpmyadmin

image:https://assets.digitalocean.com/articles/phpmyadmin_lemp_1404/login.png [phpMyAdminログイン画面]

サインインするには、有効なMySQLユーザーの資格情報のセットを使用します。 たとえば、開始するには `+ root +`ユーザーとMySQL管理パスワードが適しています。 その後、管理インターフェースにアクセスできるようになります。

image:https://assets.digitalocean.com/articles/phpmyadmin_lemp_1604/phpmyadmin_console.png [phpMyAdmin管理インターフェイス]

クリックして、インターフェースに慣れます。

次の2つのセクションでは、新しいphpMyAdmin Webコンソールを保護するための手順を実行します。

ステップ2-デフォルトのphpMyAdmin URLを変更する

この時点で、phpMyAdminのインストールは完全に機能するはずです。 ただし、ウェブインターフェースをインストールすることで、MySQLデータベースサーバーを外部に公開しました。 phpMyAdminは人気があり、大量のデータがアクセスできるため、このようなインストールは攻撃の一般的な標的です。

このセクションでは、インターフェースのURLを「+ / phpmyadmin +」から非標準のものに変更して、自動化されたボットのブルートフォース攻撃を回避することにより、インストールを「強化」またはロックダウンします。

前の手順で、Nginx WebサーバーがphpMyAdminファイルを検索して提供できるように、phpMyAdminディレクトリからドキュメントルートへのシンボリックリンクを作成しました。 phpMyAdminインターフェースのURLを変更するには、このシンボリックリンクの名前を変更します。

まず、Nginxのドキュメントルートディレクトリに移動して、これから行う変更をよりよく理解します。

cd /var/www/html/
ls -l

次の出力が表示されます。

Outputtotal 4
-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
lrwxrwxrwx 1 root root  21 Apr 10 17:06 phpmyadmin -> /usr/share/phpmyadmin

出力は、このディレクトリに `+ phpmyadmin +`というシンボリックリンクがあることを示しています。 このリンク名は自由に変更できます。 これにより、phpMyAdminのアクセスURLが変更され、一般的なエンドポイント名(「phpmyadmin」など)を検索するためにハードコーディングされたボットからエンドポイントを不明瞭にすることができます。

エンドポイントの目的をわかりにくくする名前を選択してください。 このガイドでは、エンドポイントに「+ / +」という名前を付けますが、別の名前を選択する必要があります。 これを実現するために、リンクの名前を変更します。

sudo mv phpmyadmin
ls -l

上記のコマンドを実行すると、次の出力が表示されます。

Outputtotal 4
-rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html
lrwxrwxrwx 1 root root  21 Apr 10 17:06  -> /usr/share/phpmyadmin

これで、古いURLにアクセスすると、404エラーが表示されます:

http:///phpmyadmin

image:https://assets.digitalocean.com/articles/phpmyadmin_lemp_1604/nginx_notfound.png [phpMyAdmin 404エラー]

これで、構成したばかりの新しいURLでphpMyAdminインターフェースが使用可能になります。

http:///

image:https://assets.digitalocean.com/articles/phpmyadmin_lemp_1404/login.png [phpMyAdminログイン画面]

認証ゲートウェイを設定することにより、phpMyAdminのインストールをさらに強化できます。

手順3-Nginx認証ゲートウェイのセットアップ

次に設定する機能は、phpMyAdminログイン画面が表示される前にユーザーがパスする必要がある認証プロンプトです。 Nginxを含むほとんどのWebサーバーは、この機能をネイティブで提供します。 Nginx構成ファイルを詳細で変更するだけです。

これを行う前に、認証資格情報を保存するパスワードファイルを作成します。 Nginxでは、 `+ crypt()+`関数を使用してパスワードを暗号化する必要があります。 サーバーにインストール済みのOpenSSLスイートには、この機能が含まれています。

暗号化されたパスワードを作成するには、次を入力します。

openssl passwd

使用するパスワードの入力と確認を求められます。 ユーティリティは、次のようなパスワードの暗号化されたバージョンを表示します。

Output

この値をコピーします。作成する認証ファイルに貼り付ける必要があります。

次に、認証ファイルを作成します。 このファイルを「+ pma_pass +」と呼び、Nginx構成ディレクトリに配置します。

sudo nano /etc/nginx/pma_pass

このファイルでは、使用するユーザー名を指定し、その後にコロン( )を続けて、 `+ openssl passwd +`ユーティリティから受け取ったパスワードの暗号化バージョンを指定します。

ユーザーに「+ sammy +」という名前を付けますが、別のユーザー名を選択する必要があります。 ファイルは次のようになります。

/ etc / nginx / pma_pass

:

完了したら、ファイルを保存して閉じます。

これで、Nginx構成ファイルを変更する準備が整いました。 テキストエディタで開き、開始します。

sudo nano /etc/nginx/sites-available/default

このファイル内に、新しい「+ location 」セクションを追加する必要があります。 これは、phpMyAdminインターフェース用に選択した「 location 」をターゲットにします(このガイドでは「 / +」を選択しました)。

このセクションは、 `+ server `ブロック内で、他のブロックの外側に作成してください。 この例では、新しい「 location 」ブロックを「 / +」ブロックの下に配置します。

/ etc / nginx / sites-available / default

server {
   . . .

       location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
               try_files $uri $uri/ =404;
       }

       location /nothingtosee {
       }


   . . .
}

このブロック内で、「+ auth_basic +」という変数の値を、プロンプトがユーザーに表示する認証メッセージに設定する必要があります。 認証されていないユーザーに保護対象を示すことは望まないため、具体的な詳細を提供しないでください。 この例では「管理者ログイン」を使用します。

次に、作成した認証ファイルにWebサーバーをポイントするために、 `+ auth_basic_user_file`という変数を追加する必要があります。 Nginxはユーザーに認証の詳細を求め、入力された値が指定されたファイルで見つかったものと一致することを確認します。

完了すると、ファイルは次のようになります。

/ etc / nginx / sites-available / default

server {
   . . .

   location / {
       try_files $uri $uri/ =404;
   }

   location / {


   }

   . . .
}

完了したら、ファイルを保存して閉じます。

新しい認証ゲートをアクティブにするには、Webサーバーを再起動する必要があります。

sudo service nginx restart

これで、WebブラウザーでphpMyAdmin URLにアクセスすると(ページの更新が機能しない場合は、phpMyAdminを既に使用している場合はキャッシュをクリアするか、別のブラウザーセッションを使用する必要があります)、 `+ pma_pass +`ファイルに追加したユーザー名とパスワード:

http:///

image:https://assets.digitalocean.com/articles/phpmyadmin_lemp_1404/auth_gate.png [Nginx認証ページ]

資格情報を入力すると、標準のphpMyAdminログインページが表示されます。

セキュリティの追加レイヤーを提供することに加えて、このゲートウェイは、MySQLログをスパム認証の試行から保護します。

結論

このチュートリアルを完了すると、合理的に安全なWebインターフェースからMySQLデータベースを管理できるようになりました。 このユーザーインターフェイスは、MySQLコマンドラインを介して利用可能な機能のほとんどを公開します。 データベースとスキーマを参照し、クエリを実行し、新しいデータセットと構造を作成できます。

前の投稿:Ubuntu 18.04にDjango Web Frameworkをインストールする方法
次の投稿:Ubuntu 18.04 Bionic Beaverの新機能