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

提供:Dev Guides
移動先:案内検索

序章

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

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

前提条件

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

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

このガイドを開始するために満たす必要のある2番目の前提条件は、CentOS 7サーバーにLEMP(Linux、Nginx、MariaDB、およびPHP)スタックをインストールすることです。 これは、phpMyAdminインターフェイスを提供するために使用するプラットフォームです(MariaDBは、管理したいデータベース管理ソフトウェアでもあります)。 サーバーにLEMPをまだインストールしていない場合は、 CentOS7へのLEMPのインストールに関するチュートリアルに従ってください。

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

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

LEMPプラットフォームがすでに配置されているので、phpMyAdminソフトウェアのインストールからすぐに始めることができます。 残念ながら、phpMyAdminはCentOS7のデフォルトリポジトリでは利用できません。

必要なパッケージを取得するには、システムにリポジトリを追加する必要があります。 EPELリポジトリ( E xtra P ackages for E integer L inux)には、探しているphpMyAdminパッケージを含む多くの追加パッケージが含まれていますにとって。

幸い、EPELリポジトリを追加する手順がはるかに簡単になりました。 実際には、epel-releaseというパッケージがあり、EPELリポジトリを使用するようにパッケージマネージャーを再構成します。

次のように入力することで、これをインストールできます。

sudo yum install epel-release

EPELリポジトリにアクセスできるようになったので、yumを介してphpMyAdminをインストールできます。

sudo yum install phpmyadmin

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

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

また、PHPプロセッサを再起動して、インストールした追加のPHPモジュールをロードできることを確認する必要があります。

sudo systemctl restart php-fpm

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

http://server_domain_or_IP/phpMyAdmin

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

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

ステップ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
-rw-r--r-- 1 root root 537 Aug  5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug  5 08:15 index.html
lrwxrwxrwx 1 root root  21 Aug  6 17:29 phpMyAdmin -> /usr/share/phpMyAdmin

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

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

sudo mv phpMyAdmin nothingtosee
ls -l
total 8
-rw-r--r-- 1 root root 537 Aug  5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug  5 08:15 index.html
lrwxrwxrwx 1 root root  21 Aug  6 17:29 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/conf.d/default.conf

このファイル内に、新しい場所セクションを追加する必要があります。 これにより、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 systemctl restart nginx

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

http://server_domain_or_IP/nothingtosee

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

結論

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