Ubuntu18.04にphpMyAdminをインストールして保護する方法
序章
多くのユーザーはMySQLのようなデータベース管理システムの機能を必要としていますが、MySQLコマンドラインクライアントだけからシステムを操作することに抵抗を感じる場合があります。
phpMyAdmin は、ユーザーがWebインターフェイスを介してMySQLと対話できるように作成されました。 このガイドでは、phpMyAdminをインストールして保護し、Ubuntu18.04システムでデータベースを安全に管理できるようにする方法について説明します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- Ubuntu18.04を実行しているサーバー。 このサーバーには、root以外の管理ユーザーが必要です。
sudo
特権、およびUFWで構成されたファイアウォール。 これを設定するには、Ubuntu18.04の初期サーバー設定ガイドに従ってください。 - サーバーにインストールされているLAMPスタック。 このガイドに従って、 Ubuntu18.04にLAMPスタックをインストールしてこれを設定できます。
最後に、phpMyAdminなどのソフトウェアを使用する場合は、次のような重要なセキュリティ上の考慮事項があります。
- MySQLインストールと直接通信します
- MySQLクレデンシャルを使用して認証を処理します
- 任意のSQLクエリの結果を実行して返します
これらの理由と、攻撃の標的となることが多い広く展開されているPHPアプリケーションであるため、プレーンHTTP接続を介してリモートシステムでphpMyAdminを実行しないでください。 SSL / TLS証明書で構成された既存のドメインがない場合は、 Ubuntu18.04でLet’sEncryptを使用してApacheを保護する方法についてこのガイドに従うことができます。 これには、ドメイン名の登録、サーバーのDNSレコードの作成、およびApache仮想ホストの設定が必要になります。
これらの手順を完了すると、このガイドを開始する準備が整います。
ステップ1—phpMyAdminをインストールする
開始するには、デフォルトのUbuntuリポジトリからphpMyAdminをインストールします。
まず、サーバーのパッケージインデックスを更新します。
- sudo apt update
次に、 apt
ファイルをプルダウンしてシステムにインストールするには:
- sudo apt install phpmyadmin php-mbstring php-gettext
これにより、インストールを正しく構成するためにいくつかの質問が表示されます。
警告:プロンプトが表示されると、「apache2」が強調表示されますが、は選択されていません。 Apacheを選択するには、 SPACE
, TAB
、 それから ENTER
.
ヒットしない場合 SPACE
Apacheを選択するために、インストーラーはインストール中に必要なファイルを移動しません。
- サーバーの選択には、
apache2
- 選択する
Yes
使用するかどうか尋ねられたときdbconfig-common
データベースを設定します - 次に、phpMyAdminのMySQLアプリケーションパスワードを選択して確認するように求められます
インストールプロセスにより、phpMyAdminApache構成ファイルが /etc/apache2/conf-enabled/
ディレクトリ。自動的に読み取られます。 あなたがする必要がある唯一のことは明示的に有効にすることです mbstring
PHP拡張機能。次のように入力して実行できます。
- sudo phpenmod mbstring
その後、変更が認識されるようにApacheを再起動します。
- sudo systemctl restart apache2
これでphpMyAdminがインストールおよび構成されました。 ただし、ログインしてMySQLデータベースとの対話を開始する前に、MySQLユーザーがプログラムとの対話に必要な権限を持っていることを確認する必要があります。
ステップ2—ユーザー認証と特権の調整
サーバーにphpMyAdminをインストールすると、次のデータベースユーザーが自動的に作成されます。 phpmyadmin
これは、プログラムの特定の基礎となるプロセスを実行します。 インストール時に設定した管理者パスワードを使用してこのユーザーとしてログインするのではなく、 root MySQLユーザーとして、またはphpMyAdminインターフェイスを介したデータベース管理専用のユーザーとしてログインすることをお勧めします。
MySQLルートアカウントのパスワードアクセスの構成
MySQL 5.7(およびそれ以降のバージョン)を実行しているUbuntuシステムでは、 rootMySQLユーザーは 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;
各ユーザーが採用している認証方法をもう一度確認して、rootが auth_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
注:前のセクションで説明したように、パスワード認証を有効にしている場合は、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アドレスにアクセスしてからWebインターフェイスにアクセスできます。 /phpmyadmin
:
http://your_domain_or_IP/phpmyadmin
root として、または設定したばかりの新しいユーザー名とパスワードを使用して、インターフェイスにログインします。
ログインすると、phpMyAdminユーザーインターフェイスが表示されます。
phpMyAdminに接続して操作できるようになったので、あとはシステムのセキュリティを強化して攻撃者からシステムを保護するだけです。
ステップ3—phpMyAdminインスタンスを保護する
phpMyAdminはどこにでもあるため、攻撃者に人気のあるターゲットであり、不正アクセスを防ぐために特別な注意を払う必要があります。 これを行う最も簡単な方法の1つは、Apacheの組み込みを使用して、アプリケーション全体の前にゲートウェイを配置することです。 .htaccess
認証および承認機能。
これを行うには、最初にの使用を有効にする必要があります .htaccess
Apache構成ファイルを編集してファイルをオーバーライドします。
お気に入りのテキストエディタを使用して、Apache構成ディレクトリに配置されているリンクファイルを編集します。 この例では、 nano
:
- sudo nano /etc/apache2/conf-available/phpmyadmin.conf
追加します AllowOverride All
内のディレクティブ <Directory /usr/share/phpmyadmin>
次のような構成ファイルのセクション:
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
. . .
この行を追加したら、ファイルを保存して閉じます。 使用した場合 nano
ファイルを編集するには、を押して編集します CTRL + X
, Y
、 その後 ENTER
.
行った変更を実装するには、Apacheを再起動します。
- sudo systemctl restart apache2
これで有効になりました .htaccess
アプリケーションに使用するには、を作成する必要があります .htaccess
実際にセキュリティを実装するためのファイル。
これを成功させるには、ファイルをアプリケーションディレクトリ内に作成する必要があります。 次のように入力して、必要なファイルを作成し、root権限でテキストエディタで開くことができます。
- sudo nano /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
作成するユーザーのパスワードを選択して確認するように求められます。 その後、入力したハッシュパスワードを使用してファイルが作成されます。
追加のユーザーを入力する場合は、をなしで入力する必要があります。 -c
このようなフラグ:
- sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
これで、phpMyAdminサブディレクトリにアクセスすると、設定した追加のアカウント名とパスワードの入力を求められます。
https://domain_name_or_IP/phpmyadmin
Apache認証を入力すると、通常のphpMyAdmin認証ページに移動してMySQLクレデンシャルを入力します。 この設定により、セキュリティの層が追加されます。これは、phpMyAdminが過去に脆弱性に悩まされていたため、望ましいことです。
結論
これで、phpMyAdminが構成され、Ubuntu18.04サーバーで使用できるようになります。 このインターフェースを使用すると、データベース、ユーザー、テーブルなどを簡単に作成し、構造やデータの削除や変更などの通常の操作を実行できます。