序章

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

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

前提条件

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

  • まず、Ubuntu 16.04 初期サーバーセットアップの手順1〜4で説明されているように、sudo権限を持つroot以外のユーザーを使用していると想定します。
  • また、Ubuntu 16.04サーバーへのLEMP(Linux、Nginx、MySQL、およびPHP)のインストールが完了していることを前提としています。 まだこれを行っていない場合は、 Ubuntu16.04へのLEMPスタックのインストールに関するガイドに従うことができます。 MySQLデータベース管理者のパスワードを必ずメモしてください。

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

これらの理由と、攻撃の標的となることが多い広く展開されているPHPアプリケーションであるため、プレーンHTTP接続を介してリモートシステムでphpMyAdminを実行しないでください。 SSL / TLS証明書で構成された既存のドメインがない場合は、 Ubuntu16.04でLet’sEncryptを使用してNginxを保護する方法に関するこのガイドに従うことができます。

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

ステップ1—phpMyAdminをインストールします

LEMPプラットフォームがすでに配置されているので、Ubuntuのデフォルトリポジトリから利用できるphpMyAdminをインストールすることから始めることができます。

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

  1. sudo apt-get update
  2. sudo apt-get install phpmyadmin

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

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

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

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

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

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

  1. sudo phpenmod mcrypt
  2. sudo systemctl restart php7.0-fpm

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

http://server_domain_or_IP/phpmyadmin

phpMyAdmin login screen

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

phpMyAdmin admin interface

周りをクリックして、インターフェースに慣れてください。

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

ステップ2—デフォルトのphpMyAdminURLを変更する

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

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

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

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

  1. cd /var/www/html/
  2. ls -l

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

Output
total 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」など)を検索するようにハードコードされたボットからエンドポイントを隠すことができます。

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

  1. sudo mv phpmyadmin nothingtosee
  2. ls -l

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

Output
total 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 nothingtosee -> /usr/share/phpmyadmin

これで、古いURLにアクセスすると、404エラーが発生します。

http://server_domain_or_IP/phpmyadmin

phpMyAdmin 404 error

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

http://server_domain_or_IP/nothingtosee

phpMyAdmin login screen

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

ステップ3—Nginx認証ゲートウェイを設定する

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

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

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

  1. openssl passwd

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

Output
O5az.RSPzd.HE

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

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

  1. sudo nano /etc/nginx/pma_pass

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

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

/ etc / nginx / pma_pass
sammy:O5az.RSPzd.HE

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

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

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

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

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

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

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

/ etc / nginx / sites-available / default
server {
    . . .

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

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

    . . .
}

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

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

  1. sudo service nginx restart

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

http://server_domain_or_IP/nothingtosee

Nginx authentication page

クレデンシャルを入力すると、標準のphpMyAdminログインページが表示されます。

このゲートウェイは、セキュリティの追加レイヤーを提供するだけでなく、MySQLログからスパム認証の試行を排除するのに役立ちます。

結論

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