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

前書き

MySQLのようなリレーショナルデータベース管理システムは、Webサイトとアプリケーションの大部分に必要です。 ただし、すべてのユーザーがコマンドラインからデータを管理することに抵抗があるわけではありません。

この問題を解決するために、phpMyAdminというプロジェクトが作成され、Webベースの管理インターフェースの形式で代替手段が提供されました。 このガイドでは、Ubuntu 14.04サーバーにphpMyAdmin構成をインストールして保護する方法を示します。 Nginx Webサーバー上にこのセットアップを構築します。NginxWebサーバーは優れたパフォーマンスプロファイルを持ち、他のWebサーバーよりも重い負荷をより適切に処理できます。

前提条件

始める前に、解決する必要があるいくつかの要件があります。

このシステムを構築するための強固な基盤を確保するには、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [サーバーの初期セットアップを実行する必要がありますUbuntu 14.04向けガイド]。 とりわけ、これは管理コマンドの `+ sudo +`アクセスを持つ非rootユーザーを設定する手順を説明します。

このガイドを開始するために満たす必要がある2番目の前提条件は、Ubuntu 14.04サーバーにLEMP(Linux、Nginx、MySQL、およびPHP)スタックをインストールすることです。 これは、phpMyAdminインターフェースを提供するために使用するプラットフォームです(MySQLは、管理したいデータベース管理ソフトウェアでもあります)。 サーバーにLEMPがまだインストールされていない場合は、https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-onのチュートリアルに従ってください-ubuntu-14-04 [Ubuntu 14.04へのLEMPのインストール]。

これらのガイドに従ってサーバーが適切に機能している状態になったら、このページの残りの部分から続行できます。

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

LEMPプラットフォームがすでに配置されているので、phpMyAdminソフトウェアのインストールからすぐに始めることができます。 これはUbuntuのデフォルトリポジトリ内で利用できるため、インストールプロセスは簡単です。

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

sudo apt-get update
sudo apt-get install phpmyadmin

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

次のプロンプトは、 `+ dbconfig-common +`がphpmyadminが使用するデータベースを設定するかどうかを尋ねます。 「はい」を選択して続行します。

これらの変更を許可するには、MySQLのインストール中に設定したデータベース管理パスワードを入力する必要があります。 その後、phpMyAdminのデータを保持する新しいデータベースのパスワードを選択して確認するよう求められます。

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

sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html

対処する必要がある最後の項目は、phpMyAdminが依存するPHPモジュール「+ mcrypt +」を有効にすることです。 これはphpMyAdminと共にインストールされたため、オンに切り替えてPHPプロセッサを再起動するだけです。

sudo php5enmod mcrypt
sudo service php5-fpm restart

これで、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_1404/admin_interface.png [phpMyAdmin管理インターフェイス]

クリックして、インターフェースに慣れます。 次のセクションでは、新しいインターフェイスを保護するための手順を実行します。

ステップ2-phpMyAdminインスタンスを保護する

サーバーにインストールされたphpMyAdminインスタンスは、この時点で完全に使用できるはずです。 ただし、Webインターフェイスをインストールすることで、MySQLシステムを外部に公開しました。

認証画面が含まれていても、これは非常に問題です。 phpMyAdminの人気は、アクセスを提供する大量のデータと組み合わされているため、このようなインストールは攻撃者の一般的な標的です。

2つの単純な戦略を実装して、インストールが標的になり、侵害される可能性を減らします。 自動化されたボットの総当たり攻撃のいくつかを回避するために、インターフェースの場所を「+ / phpmyadmin +」から他の場所に変更します。 また、phpMyAdminログイン画面に到達する前に渡す必要がある追加のWebサーバーレベル認証ゲートウェイも作成します。

アプリケーションのアクセス場所の変更

Nginx WebサーバーがphpMyAdminファイルを検索して提供するために、前の手順でphpMyAdminディレクトリからドキュメントルートへのシンボリックリンクを作成しました。

phpMyAdminインターフェースにアクセスできるURLを変更するには、シンボリックリンクの名前を変更するだけです。 Nginxのドキュメントルートディレクトリに移動して、私たちが何をしているかをよりよく理解してください。

cd /usr/share/nginx/html
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50  -> /usr/share/phpmyadmin

ご覧のとおり、このディレクトリには `+ phpmyadmin +`というシンボリックリンクがあります。 このリンク名は自由に変更できます。 これにより、ブラウザからphpMyAdminにアクセスできる場所が変更され、ハードコードされたボットからアクセスポイントを不明瞭にすることができます。

場所の目的を示さない名前を選択してください。 このガイドでは、アクセス場所に「+ / nothingtosee +」という名前を付けます。 これを実現するために、リンクの名前を変更します。

sudo mv phpmyadmin
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50  -> /usr/share/phpmyadmin

phpMyAdminインストールの以前の場所に移動すると、404エラーが表示されます:

http:///phpmyadmin

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

ただし、phpMyAdminインターフェイスは、選択した新しい場所で利用できます。

http:///nothingtosee

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

Webサーバー認証ゲートのセットアップ

インストールに必要な次の機能は、phpMyAdminログイン画面が表示される前にユーザーがパスする必要がある認証プロンプトです。

幸いなことに、Nginxを含むほとんどのWebサーバーは、この機能をネイティブで提供します。 Nginx構成ファイルを詳細で変更するだけです。

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

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

openssl passwd

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

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

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

sudo nano /etc/nginx/pma_pass

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

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

:

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

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

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

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

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

server {
   . . .

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




   . . .
}

このブロック内で、「+ auth_basic +」というディレクティブの値を、プロンプトがユーザーに表示する認証メッセージに設定する必要があります。 認証されていないユーザーに何を保護しているのかを示したくないので、具体的な詳細を伝えないでください。 この例では、単に「Admin Login」を使用します。

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

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

server {
   . . .

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

   location /nothingtosee {


   }

   . . .
}

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

新しい認証ゲートを実装するには、Webサーバーを再起動する必要があります。

sudo service nginx restart

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

http:///nothingtosee

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

資格情報を入力すると、通常のphpMyAdminログインページが表示されます。 この追加の保護レイヤーは、追加のセキュリティ上の利点に加えて、MySQLログに認証試行をクリーンに保つのに役立ちます。

結論

これで、合理的に安全なWebインターフェイスからMySQLデータベースを管理できます。 このUIは、MySQLコマンドプロンプトから利用できるほとんどの機能を公開します。 データベースとスキーマを表示し、クエリを実行し、新しいデータセットと構造を作成できます。

Related