前書き
MySQLやMariaDBなどのリレーショナルデータベース管理システムは、Webサイトとアプリケーションの大部分に必要です。 ただし、すべてのユーザーがコマンドラインからデータを管理することに抵抗があるわけではありません。
この問題を解決するために、phpMyAdminというプロジェクトが作成され、Webベースの管理インターフェースの形式で代替手段が提供されました。 このガイドでは、CentOS 7サーバーにphpMyAdmin構成をインストールして保護する方法を示します。 Nginx Webサーバー上にこのセットアップを構築します。NginxWebサーバーは、優れたパフォーマンスプロファイルを持ち、他のWebサーバーよりも重い負荷をよりよく処理できます。
前提条件
始める前に、解決する必要があるいくつかの要件があります。
このシステムを構築するための強固な基盤を確保するには、initial server setup guide for CentOS 7を実行する必要があります。 特に、これにより、管理コマンドのsudo
アクセス権を持つ非rootユーザーの設定について説明します。
このガイドを開始するために満たす必要がある2番目の前提条件は、CentOS 7サーバーにLEMP(Linux、Nginx、MariaDB、およびPHP)スタックをインストールすることです。 これは、phpMyAdminインターフェースを提供するために使用するプラットフォームです(MariaDBは、管理したいデータベース管理ソフトウェアでもあります)。 サーバーにLEMPをまだインストールしていない場合は、installing LEMP on CentOS 7に関するチュートリアルに従ってください。
これらのガイドに従ってサーバーが適切に機能している状態になったら、このページの残りの部分から続行できます。
[[step-one -—- install-phpmyadmin]] ==ステップ1—phpMyAdminをインストールします
LEMPプラットフォームがすでに配置されているので、phpMyAdminソフトウェアのインストールからすぐに始めることができます。 残念ながら、phpMyAdminはCentOS 7のデフォルトリポジトリでは利用できません。
必要なパッケージを取得するには、システムに追加のリポジトリを追加する必要があります。 EPELリポジトリ(EnterpriseLinuxのExtraPackages)には、探しているphpMyAdminパッケージなど、多くの追加パッケージが含まれています。
幸いなことに、EPELリポジトリを追加する手順はずっと簡単になりました。 実際には、EPELリポジトリを使用するようにパッケージマネージャーを再構成するepel-release
というパッケージがあります。
次のように入力してインストールできます。
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管理者パスワードを選択することをお勧めします。 その後、管理インターフェイスにアクセスできるようになります。
クリックして、インターフェースに慣れます。 次のセクションでは、新しいインターフェイスを保護するための手順を実行します。
[[step-two -—- secure-your-phpmyadmin-instance]] ==ステップ2—phpMyAdminインスタンスを保護します
サーバーにインストールされたphpMyAdminインスタンスは、この時点で完全に使用できるはずです。 ただし、Webインターフェイスをインストールすることで、MySQLシステムを外部に公開しました。
認証画面が含まれていても、これは非常に問題です。 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ブロックをlocation /
ブロックの下に配置します。
server {
. . .
location / {
try_files $uri $uri/ =404;
}
location /nothingtosee {
}
. . .
}
このブロック内で、auth_basic
というディレクティブの値を、プロンプトがユーザーに表示する認証メッセージに設定する必要があります。 認証されていないユーザーに何を保護しているのかを示したくないので、具体的な詳細を述べないでください。 この例では、単に「Admin Login」を使用します。
次に、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を使用している場合は、キャッシュをクリアするか、別のブラウザセッションを使用する必要がある場合があります)、%(に追加したユーザー名とパスワードの入力を求められます。 t0)sファイル:
http://server_domain_or_IP/nothingtosee
資格情報を入力すると、通常のphpMyAdminログインページが表示されます。 この追加の保護レイヤーは、追加のセキュリティ上の利点に加えて、MySQLログに認証試行をクリーンに保つのに役立ちます。
結論
これで、合理的に安全なWebインターフェイスからMySQLデータベースを管理できます。 このUIは、MySQLコマンドプロンプトから利用できるほとんどの機能を公開します。 データベースとスキーマを表示し、クエリを実行し、新しいデータセットと構造を作成できます。