序章

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

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

前提条件

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

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

このガイドを開始するために満たす必要のある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

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

sudo php5enmod mcrypt
sudo service php5-fpm restart

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

http://server_domain_or_IP/phpmyadmin

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

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

ステップ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インターフェイスは、選択した新しい場所で使用できます。

http://server_domain_or_IP/nothingtosee

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を使用している場合は、キャッシュをクリアするか、別のブラウザセッションを使用する必要がある場合があります)、追加したユーザー名とパスワードの入力を求められます。 pma_pass ファイル:

http://server_domain_or_IP/nothingtosee

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

結論

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