Ubuntu 18.04にphpMyAdminをインストールして保護する方法

このチュートリアルの以前のバージョンは、Brennan Bearnesによって作成されました。

前書き

多くのユーザーは、MySQLのようなデータベース管理システムの機能を必要としますが、MySQLプロンプトだけでシステムとやり取りするのは気分が悪いかもしれません。

phpMyAdminは、ユーザーがWebインターフェースを介してMySQLと対話できるように作成されました。 このガイドでは、phpMyAdminを安全に使用してUbuntu 18.04システム上のデータベースを安全に管理できるように、phpMyAdminをインストールして保護する方法について説明します。

前提条件

このガイドを開始する前に、いくつかの基本的な手順を完了する必要があります。

まず、サーバーには、sudo特権を持つroot以外のユーザーと、initial server setup guide for Ubuntu 18.04で説明されているようにufwで構成されたファイアウォールがあると想定します。

また、Ubuntu 18.04サーバーでLAMP(Linux、Apache、MySQL、およびPHP)のインストールを完了したと想定します。 これがまだ完了していない場合は、installing a LAMP stack on Ubuntu 18.04でこのガイドに従うことができます。

最後に、phpMyAdminなどのソフトウェアを使用する際には、次の理由から重要なセキュリティ上の考慮事項があります。

  • MySQLインストールと直接通信します

  • MySQLクレデンシャルを使用した認証を処理します

  • 任意のSQLクエリの結果を実行して返します

これらの理由により、また攻撃の対象となることが多い、広く配備されたPHPアプリケーションであるため、プレーンHTTP接続を介してリモートシステムでphpMyAdminを実行しないでください。 SSL / TLS証明書で構成された既存のドメインがない場合は、securing Apache with Let’s Encrypt on Ubuntu 18.04でこのガイドに従うことができます。 これには、register a domain namecreate DNS records for your server、およびset up an Apache Virtual Hostが必要になります。

これらの手順を完了したら、このガイドを開始できます。

[[step-1 -—- installing-phpmyadmin]] ==ステップ1—phpMyAdminのインストール

開始するには、デフォルトのUbuntuリポジトリからphpMyAdminをインストールします。

これは、サーバーのパッケージインデックスを更新し、aptパッケージシステムを使用してファイルをプルダウンし、システムにインストールすることで実行されます。

sudo apt update
sudo apt install phpmyadmin php-mbstring php-gettext

インストールを正しく構成するために、いくつかの質問が表示されます。

[.warning]#Warning:プロンプトが表示されると、「apache2」が強調表示されますが、notが選択されています。 SPACEを押してApacheを選択しない場合、インストーラーはインストール中に必要なファイルをnotで移動します。 SPACETABENTERの順に押して、Apacheを選択します。

  • サーバーの選択には、apache2を選択します

  • データベースのセットアップにdbconfig-commonを使用するかどうかを尋ねられたら、Yesを選択します

  • 次に、phpMyAdminのMySQLアプリケーションパスワードを選択して確認するように求められます。

インストールプロセスにより、phpMyAdmin Apache構成ファイルが/etc/apache2/conf-enabled/ディレクトリに追加され、そこで自動的に読み取られます。 あなたがする必要がある唯一のことはあなたがタイプすることによってあなたがすることができるmbstringPHP拡張を明示的に有効にすることです:

sudo phpenmod mbstring

その後、変更が認識されるようにApacheを再起動します。

sudo systemctl restart apache2

phpMyAdminがインストールされ、構成されました。 ただし、ログインしてMySQLデータベースと対話する前に、MySQLユーザーがプログラムと対話するために必要な特権を持っていることを確認する必要があります。

[[step-2 -—- adjusting-user-authentication-and-privileges]] ==ステップ2—ユーザー認証と特権の調整

phpMyAdminをサーバーにインストールすると、プログラムの特定の基礎となるプロセスを実行するphpmyadminというデータベースユーザーが自動的に作成されました。 インストール時に設定した管理者パスワードを使用してこのユーザーとしてログインするのではなく、root MySQLユーザーとして、またはphpMyAdminインターフェイスを介したデータベース管理専用のユーザーとしてログインすることをお勧めします。

MySQLルートアカウントのパスワードアクセスの構成

MySQL 5.7(およびそれ以降のバージョン)を実行しているUbuntuシステムでは、root MySQLユーザーは、パスワードではなく、デフォルトでauth_socketプラグインを使用して認証するように設定されています。 これにより、多くの場合、セキュリティと使いやすさが向上しますが、phpMyAdminなどの外部プログラムにユーザーへのアクセスを許可する必要がある場合は、事態が複雑になる可能性もあります。

root MySQLユーザーとしてphpMyAdminにログインするには、認証方法をauth_socketからmysql_native_passwordに切り替える必要があります(まだ行っていない場合)。 これを行うには、ターミナルからMySQLプロンプトを開きます。

sudo mysql

次に、次のコマンドを使用して、各MySQLユーザーアカウントが使用する認証方法を確認します。

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

この例では、rootユーザーが実際にauth_socketプラグインを使用して認証していることがわかります。 パスワードで認証するようにrootアカウントを構成するには、次のALTER USERコマンドを実行します。 必ずpasswordを選択した強力なパスワードに変更してください。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

次に、FLUSH PRIVILEGESを実行して、サーバーに許可テーブルを再ロードし、新しい変更を有効にするように指示します。

FLUSH PRIVILEGES;

各ユーザーが採用している認証方法をもう一度確認して、rootauth_socketプラグインを使用して認証されなくなったことを確認します。

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

この出力から、rootユーザーがパスワードを使用して認証することがわかります。 ここで設定したパスワードを使用して、rootユーザーとしてphpMyAdminインターフェイスにログインできるようになりました。

専用のMySQLユーザーのパスワードアクセスの構成

あるいは、専用ユーザーでphpMyAdminに接続する方がワークフローに適している場合もあります。 これを行うには、MySQLシェルをもう一度開きます。

sudo mysql

[。注意]##

Note:前のセクションで説明したように、パスワード認証を有効にしている場合は、MySQLシェルにアクセスするために別のコマンドを使用する必要があります。 以下は、通常のユーザー特権でMySQLクライアントを実行し、認証によってのみデータベース内の管理者特権を取得します。

mysql -u root -p

そこから、新しいユーザーを作成し、強力なパスワードを付与します。

CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

次に、新しいユーザーに適切な特権を付与します。 たとえば、次のコマンドを使用して、データベース内のすべてのテーブルにユーザー権限を付与し、ユーザー権限を追加、変更、削除する権限を付与できます。

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

その後、MySQLシェルを終了します。

exit

これで、サーバーのドメイン名またはパブリックIPアドレスに続いて/phpmyadminにアクセスして、Webインターフェイスにアクセスできます。

http://your_domain_or_IP/phpmyadmin

phpMyAdmin login screen

rootとして、または構成したばかりの新しいユーザー名とパスワードを使用して、インターフェースにログインします。

ログインすると、次のようなユーザーインターフェースが表示されます。

phpMyAdmin user interface

phpMyAdminに接続してやり取りできるようになったので、あとはシステムのセキュリティを強化して攻撃者から保護するだけです。

[[step-3 -—- securing-your-phpmyadmin-instance]] ==ステップ3—phpMyAdminインスタンスを保護する

遍在性があるため、phpMyAdminは攻撃者に人気のあるターゲットであり、不正アクセスを防ぐために細心の注意を払う必要があります。 これを行う最も簡単な方法の1つは、Apacheの組み込みの.htaccess認証および承認機能を使用して、アプリケーション全体の前にゲートウェイを配置することです。

これを行うには、最初にApache構成ファイルを編集して、.htaccessファイルオーバーライドの使用を有効にする必要があります。

Apache構成ディレクトリに配置されているリンクファイルを編集します。

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

次のように、構成ファイルの<Directory /usr/share/phpmyadmin>セクション内にAllowOverride Allディレクティブを追加します。

/etc/apache2/conf-available/phpmyadmin.conf


    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

この行を追加したら、ファイルを保存して閉じます。

行った変更を実装するには、Apacheを再起動します。

sudo systemctl restart apache2

アプリケーションで.htaccessの使用を有効にしたので、実際にセキュリティを実装するために作成する必要があります。

これを成功させるには、アプリケーションディレクトリ内にファイルを作成する必要があります。 次のように入力して、必要なファイルを作成し、root権限でテキストエディターで開くことができます。

sudo nano /usr/share/phpmyadmin/.htaccess

このファイル内で、次の情報を入力します。

/usr/share/phpmyadmin/.htaccess

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

これらの各行の意味は次のとおりです。

  • AuthType Basic:この行は、実装する認証タイプを指定します。 このタイプは、パスワードファイルを使用してパスワード認証を実装します。

  • AuthName:認証ダイアログボックスのメッセージを設定します。 権限のないユーザーが保護対象に関する情報を取得できないように、この汎用を保持する必要があります。

  • AuthUserFile:認証に使用するパスワードファイルの場所を設定します。 これは、提供されるディレクトリの外部にある必要があります。 このファイルはすぐに作成します。

  • Require valid-user:これは、認証されたユーザーのみにこのリソースへのアクセスを許可する必要があることを指定します。 これは、許可されていないユーザーの侵入を実際に阻止するものです。

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

パスワードファイル用に選択した場所は/etc/phpmyadmin/.htpasswdでした。 これで、このファイルを作成し、htpasswdユーティリティを使用して初期ユーザーに渡すことができます。

sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

作成するユーザーのパスワードを選択して確認するように求められます。 その後、入力したハッシュされたパスワードでファイルが作成されます。

追加のユーザーを入力する場合は、次のようにwithout-cフラグを入力する必要があります。

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

これで、phpMyAdminサブディレクトリにアクセスすると、設定した追加のアカウント名とパスワードの入力を求められます。

https://domain_name_or_IP/phpmyadmin

phpMyAdmin apache password

Apache認証を入力すると、通常のphpMyAdmin認証ページに移動して、MySQL資格情報を入力します。 このセットアップはセキュリティの追加レイヤーを追加します。これは、phpMyAdminが過去に脆弱性に悩まされていたため望ましいものです。

結論

これで、phpMyAdminが設定され、Ubuntu 18.04サーバーで使用できるようになります。 このインターフェイスを使用すると、データベース、ユーザー、テーブルなどを簡単に作成し、構造やデータの削除や変更などの通常の操作を実行できます。

Related