序章

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

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

前提条件

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

このシステムを構築するための強固な基盤を確保するには、Ubuntu14.04初期サーバーセットアップガイドを実行する必要があります。 特に、これにより、管理コマンドのsudoアクセス権を持つ非rootユーザーの設定について説明します。

このガイドを開始するために満たす必要のある2番目の前提条件は、Ubuntu 14.04サーバーにLEMP(Linux、Nginx、MySQL、およびPHP)スタックをインストールすることです。 これは、phpMyAdminインターフェイスを提供するために使用するプラットフォームです(MySQLは、管理したいデータベース管理ソフトウェアでもあります)。 サーバーにLEMPをまだインストールしていない場合は、 Ubuntu14.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が依存するmcryptPHPモジュールを有効にすることです。 これはphpMyAdminとともにインストールされたため、オンに切り替えてPHPプロセッサを再起動する必要があります。

sudo php5enmod mcrypt
sudo service php5-fpm restart

これで、phpMyAdminのインストールが機能するようになりました。 インターフェイスにアクセスするには、Webブラウザでサーバーのドメイン名またはパブリックIPアドレスに移動し、続いて/phpmyadminに移動します。

http://server_domain_or_IP/phpmyadmin

phpMyAdmin login screen

サインインするには、有効なMySQLユーザーのユーザー名とパスワードのペアを使用します。 rootユーザーとMySQL管理者パスワードは、始めるのに良い選択です。 これで、管理インターフェースにアクセスできるようになります。

phpMyAdmin admin interface

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

ステップ2—phpMyAdminインスタンスを保護します

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

付属の認証画面でも、これはかなり問題です。 phpMyAdminの人気と、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 phpmyadmin -> /usr/share/phpmyadmin

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

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

sudo mv phpmyadmin nothingtosee
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 nothingtosee -> /usr/share/phpmyadmin

ここで、phpMyAdminインストールの以前の場所に移動すると、404エラーが発生します。

http://server_domain_or_IP/phpmyadmin

phpMyAdmin 404 error

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

http://server_domain_or_IP/nothingtosee

phpMyAdmin login screen

Webサーバー認証ゲートの設定

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

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

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

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

openssl passwd

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

O5az.RSPzd.HE

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

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

sudo nano /etc/nginx/pma_pass

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

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

demo:O5az.RSPzd.HE

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

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

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

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

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

server {
    . . .

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

    location /nothingtosee {
    }

    . . .
}

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

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

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

server {
    . . .

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

    location /nothingtosee {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/pma_pass;
    }

    . . .
}

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

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

sudo service nginx restart

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