CentOS7サーバーにNginxを使用してphpMyAdminをインストールして保護する方法
序章
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コマンドプロンプトから利用できるほとんどの機能を公開します。 データベースとスキーマを表示し、クエリを実行し、新しいデータセットと構造を作成できます。