前書き
MySQLやMariaDBなどのリレーショナルデータベース管理システムは、Webサイトとアプリケーションの大部分に必要です。 ただし、すべてのユーザーがコマンドラインからデータを管理することに抵抗があるわけではありません。
この問題を解決するために、phpMyAdminというプロジェクトが作成され、Webベースの管理インターフェースの形式で代替手段が提供されました。 このガイドでは、CentOS 7サーバーにphpMyAdmin構成をインストールして保護する方法を示します。 この設定は、世界で最も人気のあるWebサーバーであるApache Webサーバーの上に構築します。
前提条件
始める前に、解決する必要があるいくつかの要件があります。
このシステムを構築するための強固な基盤を確保するには、initial server setup guide for CentOS 7を実行する必要があります。 特に、これにより、管理コマンドのsudo
アクセス権を持つ非rootユーザーの設定について説明します。
このガイドを開始するために満たす必要がある2番目の前提条件は、CentOS 7サーバーにLAMP(Linux、Apache、MariaDB、およびPHP)スタックをインストールすることです。 これは、phpMyAdminインターフェースを提供するために使用するプラットフォームです(MariaDBは、管理したいデータベース管理ソフトウェアでもあります)。 サーバーにLAMPをまだインストールしていない場合は、installing LAMP on CentOS 7に関するチュートリアルに従ってください。
これらのガイドに従ってサーバーが適切に機能している状態になったら、このページの残りの部分から続行できます。
[[step-one -—- install-phpmyadmin]] ==ステップ1—phpMyAdminをインストールします
LAMPプラットフォームがすでに配置されているので、phpMyAdminソフトウェアのインストールからすぐに始めることができます。 残念ながら、phpMyAdminはCentOS 7のデフォルトリポジトリでは利用できません。
必要なパッケージを取得するには、システムに追加のリポジトリを追加する必要があります。 EPELリポジトリ(EnterpriseLinuxのExtraPackages)には、探しているphpMyAdminパッケージなど、多くの追加パッケージが含まれています。
EPELリポジトリは、epel-release
という特別なパッケージをインストールすることでサーバーで利用できるようにすることができます。 これにより、リポジトリリストが再構成され、EPELパッケージにアクセスできるようになります。
インストールするには、次のように入力します。
sudo yum install epel-release
EPELリポジトリが構成されたので、次のように入力して、yum
パッケージシステムを使用してphpMyAdminパッケージをインストールできます。
sudo yum install phpmyadmin
これでインストールが完了します。 インストールには、すでに配置されているApache構成ファイルが含まれていました。 インストールで正しく機能するようにするには、これを少し変更する必要があります。
テキストエディタでファイルを開いて、いくつかの変更を加えます。
sudo nano /etc/httpd/conf.d/phpMyAdmin.conf
内部には、ディレクトリのアクセスポリシーを説明する条件ロジックを備えたディレクトリブロックがいくつかあります。 定義されている2つの異なるディレクトリがあり、これらのディレクトリ内では、Apache 2.2とApache 2.4(実行中)の両方に有効な構成があります。
現在、このセットアップは、サーバー自体から作成されていない接続へのアクセスを拒否するように構成されています。 サーバーでリモートで作業しているため、home接続のIPアドレスを指定するためにいくつかの行を変更する必要があります。
Require ip 127.0.0.1
またはAllow from 127.0.0.1
を読み取る行を変更して、ホーム接続のIPアドレスを参照します。 ホーム接続のIPアドレスを見つけるのに支援が必要な場合は、次のセクションをご覧ください。 変更する必要があるファイルには4つの場所が必要です。
. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .
終了したら、Apache Webサーバーを再起動して、次のように入力して変更を実装します。
sudo systemctl restart httpd.service
これで、phpMyAdminインストールが動作可能になりました。 インターフェースにアクセスするには、Webブラウザでサーバーのドメイン名またはパブリックIPアドレスに続けて/phpMyAdmin
を移動します。
http://server_domain_or_IP/phpMyAdmin
サインインするには、有効なMariaDBユーザーのユーザー名/パスワードのペアを使用します。 開始するには、root
ユーザーとMariaDB管理者パスワードを選択することをお勧めします。 その後、管理インターフェイスにアクセスできるようになります。
IPアドレスを見つける
上記の手順を完了するには、データベースへのアクセスに使用しているコンピューターのIPアドレスを知る必要があります。 これはセキュリティ上の予防措置であるため、権限のないユーザーはサーバーに接続できません。
注:これは、VPSのIPアドレスのnotであり、自宅または職場のコンピューターのIPアドレスです。
Webブラウザで次のいずれかのサイトにアクセスすると、より優れたWebがIPアドレスをどのように認識しているかを確認できます。
いくつかの異なるサイトを比較して、それらがすべて同じ価値を提供していることを確認してください。 上記の構成ファイルでこの値を使用します。
[[step-two -—- secure-your-phpmyadmin-instance]] ==ステップ2—phpMyAdminインスタンスを保護します
サーバーにインストールされたphpMyAdminインスタンスは、この時点で完全に使用できるはずです。 ただし、Webインターフェイスをインストールすることで、MySQLシステムを外部に公開しました。
認証画面が含まれていても、これは非常に問題です。 phpMyAdminの人気は、アクセスを提供する大量のデータと組み合わされているため、このようなインストールは攻撃者の一般的な標的です。
2つの簡単な戦略を実装して、インストールが標的になり、侵害される可能性を減らします。 自動化されたボットブルートフォース攻撃の一部を回避するために、インターフェイスの場所を/phpMyAdmin
から別の場所に変更します。 また、phpMyAdminログイン画面に到達する前に渡す必要がある追加のWebサーバーレベル認証ゲートウェイも作成します。
アプリケーションのアクセス場所の変更
Apache WebサーバーがphpMyAdminと連携するために、phpMyAdmin Apache構成ファイルはファイルのディレクトリの場所を指すエイリアスを使用します。
phpMyAdminインターフェースにアクセスできるURLを変更するには、単にエイリアスの名前を変更する必要があります。 phpMyAdmin Apache構成ファイルを今すぐ開きます。
sudo nano /etc/httpd/conf.d/phpMyAdmin.conf
ファイルの上部に向かって、次のような2行が表示されます。
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
これらの2行はエイリアスです。つまり、サイトのドメイン名またはIPアドレスにアクセスし、その後に/phpMyAdmin
または/phpmyadmin
を続けると、コンテンツは/usr/share/phpMyAdmin
で提供されます。
これらの特定のエイリアスは、ボットや悪意のあるユーザーの標的になっているため、無効にします。 代わりに、独自のエイリアスを決定する必要があります。 覚えやすいはずですが、推測するのは簡単ではありません。 URLの場所の目的を示すものではありません。 この例では、/nothingtosee
を使用します。
意図した変更を適用するには、既存の行を削除またはコメントアウトして、独自の行を追加する必要があります。
# Alias /phpMyAdmin /usr/share/phpMyAdmin
# Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /nothingtosee /usr/share/phpMyAdmin
終了したら、ファイルを保存して閉じます。
変更を実装するには、Webサービスを再起動します。
sudo systemctl restart httpd.service
phpMyAdminインストールの以前の場所に移動すると、404エラーが表示されます:
http://server_domain_or_IP/phpMyAdmin
ただし、phpMyAdminインターフェイスは、選択した新しい場所で利用できます。
http://server_domain_or_IP/nothingtosee
Webサーバー認証ゲートのセットアップ
インストールに必要な次の機能は、phpMyAdminログイン画面が表示される前にユーザーがパスする必要がある認証プロンプトです。
幸いなことに、Apacheを含むほとんどのWebサーバーはこの機能をネイティブに提供します。 許可ファイルを使用するには、Apache構成ファイルを変更するだけです。
テキストエディターでphpMyAdmin Apache構成ファイルを再度開きます。
sudo nano /etc/httpd/conf.d/phpMyAdmin.conf
/usr/share/phpMyAdmin
ディレクトリブロック内ですが、内部のブロックの外部に、オーバーライドディレクティブを追加する必要があります。 これは次のようになります。
. . .
AllowOverride All
. . .
. . .
これにより、phpMyAdminディレクトリ自体にあるwithinというファイルに追加の構成の詳細を指定できます。 このファイルを使用して、パスワード認証をセットアップします。
完了したら、ファイルを保存して閉じます。
この変更を実装するには、Webサービスを再起動します。
sudo systemctl restart httpd.service
.htaccessファイルを作成する
設定にoverrideディレクティブがあるので、Apacheは/usr/share/phpMyAdmin
ディレクトリ内で.htaccess
というファイルを探します。 見つかった場合、その中に含まれるディレクティブを使用して、以前の構成データを補足します。
次のステップは、そのディレクトリ内に.htaccess
ファイルを作成することです。 テキストエディタを使用して今すぐそうします。
sudo nano /usr/share/phpMyAdmin/.htaccess
このファイル内で、次の情報を入力する必要があります。
AuthType Basic
AuthName "Admin Login"
AuthUserFile /etc/httpd/pma_pass
Require valid-user
これらの各行の意味を見ていきましょう。
-
AuthType Basic:この行は、実装している認証タイプを指定します。 このタイプは、パスワードファイルを使用してパスワード認証を実装します。
-
AuthName:認証ダイアログボックスのメッセージを設定します。 権限のないユーザーが保護対象に関する知識を得られないように、この汎用を保持する必要があります。
-
AuthUserFile:認証に使用される実際のパスワードファイルの場所を設定します。 これは、提供されるディレクトリの外部にある必要があります。 このファイルはすぐに作成します。
-
Require valid-user:これは、認証されたユーザーのみにこのリソースへのアクセスを許可する必要があることを指定します。 これは、許可されていないユーザーの侵入を実際に阻止するものです。
この情報の入力が終了したら、ファイルを保存して閉じます。
認証用のパスワードファイルを作成する
.htaccess
ファイルでAuthUserFile
ディレクティブを使用してパスワードファイルの場所を指定したので、パスワードファイルを作成してデータを入力する必要があります。
これは、htpasswd
と呼ばれるApacheユーティリティを使用して実行できます。 ファイルを作成する場所と、認証の詳細を入力するユーザー名を渡すことにより、コマンドを呼び出します。
sudo htpasswd -c /etc/httpd/pma_pass username
-c
フラグは、これにより初期ファイルが作成されることを示します。 ディレクトリの場所は、ファイルに使用されるパスとファイル名です。 ユーザー名は、追加する最初のユーザーです。 ユーザーのパスワードの入力と確認を求められます。
認証するユーザーを追加する場合は、同じコマンドをwithout、-c
フラグ、および新しいユーザー名で再度呼び出すことができます。
sudo htpasswd /etc/httpd/pma_pass seconduser
パスワードファイルが作成されると、認証ゲートウェイが実装され、次回サイトにアクセスしたときにパスワードプロンプトが表示されます。
http://server_domain_or_IP/nothingtosee
資格情報を入力すると、通常のphpMyAdminログインページが表示されます。 この追加の保護レイヤーは、追加のセキュリティ上の利点に加えて、MySQLログに認証試行をクリーンに保つのに役立ちます。
結論
これで、合理的に安全なWebインターフェイスからMySQLデータベースを管理できます。 このUIは、MySQLコマンドプロンプトから利用できるほとんどの機能を公開します。 データベースとスキーマを表示し、クエリを実行し、新しいデータセットと構造を作成できます。