Debian 10でソースからphpMyAdminをインストールする方法

前書き

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

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

前提条件

このガイドを始める前に、次のものが必要です。

  • Debian 10サーバーへのアクセス。 このサーバーには、 `+ sudo `権限を持つ非rootユーザーと、 ` ufw +`で設定されたファイアウォールが必要です。 これを設定するには、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10 [Debian 10の初期サーバー設定ガイド]に従ってください。

  • Debian 10サーバーにインストールされたLAMP( L inux、 A pache、 M ariaDB、 P HP)スタック。 Debian 10へのLAMPスタックのインストールのガイドに従ってくださいこれを設定します。

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

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

  • MariaDB資格情報を使用して認証を処理します

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

これらの理由により、また攻撃の対象となることが多い、広く配備されたPHPアプリケーションであるため、プレーンHTTP接続を介してリモートシステムでphpMyAdminを実行しないでください。

SSL / TLS証明書で構成された既存のドメインがない場合は、https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-でこのガイドに従うことができます。 encrypt-on-debian-10 [Debian 10でLet’s Encryptを使用してApacheを確保]を設定します。 これには、https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from-common-domain-registrars [ドメイン名を登録]、https:// wwwが必要です。 .digitalocean.com / community / tutorials / an-introduction-to-digitalocean-dns [サーバーのDNSレコードを作成]、およびhttps://www.digitalocean.com/community/tutorials/how-to-install-linux- apache-mariadb-php-lamp-stack-on-debian-10#step-4-%E2%80%94-creating-a-virtual-host-for-your-website [Apache仮想ホストのセットアップ]。

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

ステップ1-phpMyAdminと推奨パッケージのインストール

phpMyAdminをインストールおよび構成する前に、https://docs.phpmyadmin.net/en/latest/require.html [公式ドキュメントが推奨]では、特定の機能を有効にしてパフォーマンスを向上させるために、サーバーにいくつかのPHP拡張機能をインストールすることを推奨しています。

前提条件https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mariadb-php-lamp-stack-on-debian-10[LAMPスタックチュートリアル]に従っている場合、これらのモジュールは、 `+ php +`パッケージとともにインストールされます。 ただし、次のパッケージもインストールすることをお勧めします。

  • + php-mbstring +:非ASCII文字列を管理し、文字列を異なるエンコーディングに変換するために使用されるPHP拡張

  • + php-zip:` + .zip`ファイルのphpMyAdminへのアップロードをサポートするPHPモジュール

  • + php-gd +:別のPHPモジュール。これはhttps://en.wikipedia.org/wiki/GD_Graphics_Library[GDグラフィックライブラリ]のサポートを有効にします

最初に、サーバーのパッケージインデックスを最近更新していない場合は更新します。

sudo apt update

次に、「+ apt +」を使用してファイルをプルダウンし、システムにインストールします。

sudo apt install php-mbstring php-zip php-gd

次に、phpMyAdminをインストールできます。 この記事の執筆時点では、phpMyAdminはデフォルトのDebianリポジトリからは利用できないため、phpMyAdminサイトからソースコードをサーバーにダウンロードする必要があります。

そのためには、https://www.phpmyadmin.net/downloads/ [phpMyAdmin Downloads page]に移動し、最新の安定版リリースのダウンロードリンクが記載された表までスクロールし、「+」で終わるダウンロードリンクをコピーします。 tar.gz + `。 このリンクは、_tarball_と呼ばれるアーカイブファイルを指します。これは、抽出されると、システム上に多数のファイルを作成します。 この記事の執筆時点では、最新リリースはバージョン4.9.0.1です。

次の `+ wget `コマンドのリンクをコピーしたばかりのダウンロードリンクに置き換え、 ` ENTER +`を押します。 これにより、コマンドが実行され、tarballがサーバーにダウンロードされます。

wget https://files.phpmyadmin.net/phpMyAdmin//phpMyAdmin--.tar.gz

次に、tarballを抽出します。

tar xvf phpMyAdmin--.tar.gz

これにより、サーバー上の「+ phpMyAdmin-+」という名前の親ディレクトリの下に、多数の新しいファイルとディレクトリが作成されます。

次に、次のコマンドを実行します。 これにより、 `+ phpMyAdmin-`ディレクトリとそのすべてのサブディレクトリが、デフォルトでphpMyAdminが設定ファイルを見つけると予想される場所である ` / usr / share / `ディレクトリに移動します。 また、所定の場所にあるディレクトリの名前を ` phpmyadmin`に変更します。

sudo mv phpMyAdmin--/ /usr/share/phpmyadmin

これでphpMyAdminをインストールしましたが、WebブラウザーからphpMyAdminにアクセスできるようにするには、いくつかの構成変更が必要です。

ステップ2-phpMyAdminの手動設定

Ubuntu環境の場合のように、phpMyAdminをパッケージマネージャーでインストールする場合、phpMyAdminは、プログラムをセットアップするためにいくつかのアクションを自動的に実行する「ゼロ構成」モードにデフォルト設定されます。 このガイドではソースからインストールしたため、これらの手順を手動で実行する必要があります。

まず、phpMyAdminが一時ファイルを保存する新しいディレクトリを作成します。

sudo mkdir -p /var/lib/phpmyadmin/tmp
  • www-data *(ApacheなどのWebサーバーがUbuntuおよびDebianシステムでの通常の操作にデフォルトで使用するLinuxユーザープロファイル)をこのディレクトリの所有者として設定します。

sudo chown -R www-data:www-data /var/lib/phpmyadmin

以前に抽出したファイルには、基本構成ファイルとして使用できるサンプル構成ファイルが含まれています。 このファイルのコピーを作成して、 `+ / usr / share / phpmyadmin `ディレクトリに保存し、名前を ` config.inc.php +`に変更します。

sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

任意のテキストエディターを使用してこのファイルを開きます。 ここでは、 `+ nano +`を使用します。

sudo nano /usr/share/phpmyadmin/config.inc.php

phpMyAdminはデフォルトで `+ cookie +`認証方法を使用します。これにより、有効なMariaDBユーザーとしてhttps://en.wikipedia.org/wiki/HTTP_cookie[cookies]を使用してphpMyAdminにログインできます。 この方法では、MariaDBユーザーパスワードは一時的なCookieに保存され、https://en.wikipedia.org/wiki/Advanced_Encryption_Standard [Advanced Encryption Standard(AES)algorithm]で暗号化されます。

歴史的に、phpMyAdminは代わりにhttps://en.wikipedia.org/wiki/Blowfish_(cipher)[Blowfish cipher]をこの目的に使用していましたが、これはまだ構成ファイルに反映されています。 `+ $ cfg ['blowfish_secret'] +`で始まる行までスクロールします。 これは次のようになります。

/usr/share/phpmyadmin/config.inc.php

. . .
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .

単一引用符の間に、ランダムな32文字の文字列を入力します。 これは覚えておく必要があるパスフレーズではなく、AESアルゴリズムによって内部的に使用されるだけです。

/usr/share/phpmyadmin/config.inc.php

. . .
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .

次に、「+ / ストレージでの操作に使用されるユーザー / +」と表示されているコメントまでスクロールします。 このセクションには、phpMyAdmin内で特定の管理タスクを実行する* pma *というMariaDBデータベースユーザーを定義するいくつかのディレクティブが含まれています。 https://docs.phpmyadmin.net/en/latest/config.html#cfg_Servers_controlpass [公式ドキュメントによると]、この特別なユーザーアカウントは、1人のユーザーのみがphpMyAdminにアクセスする場合には必要ありませんが、マルチユーザーシナリオ。

前にあるスラッシュを削除して、 `+ controluser `および ` controlpass `ディレクティブのコメントを外します。 次に、選択した安全なパスワードを指すように、 ` controlpass +`ディレクティブを更新します。 これを行わないと、デフォルトのパスワードがそのまま残り、不明なユーザーがphpMyAdminインターフェースを介してデータベースに簡単にアクセスできます。

これらの変更を行った後、ファイルのこのセクションは次のようになります。

/usr/share/phpmyadmin/config.inc.php

. . .
/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = '';
. . .

このセクションの下には、「+ / ストレージデータベースとテーブル / +」というコメントが付いた別のセクションがあります。 このセクションには、https://docs.phpmyadmin.net/en/latest/setup.html#phpmyadmin-configuration-storage [phpMyAdmin構成ストレージ]、データベース、および管理* pmaで使用されるいくつかのテーブルを定義する多くのディレクティブが含まれます。 *データベースユーザー。 これらのテーブルは、ブックマーク、コメント、PDF生成など、phpMyAdminの多くの機能を有効にします。

このセクションの各行のコメントを解除するには、各行の先頭にあるスラッシュを削除して、次のようにします。

/usr/share/phpmyadmin/config.inc.php

. . .
/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
. . .

これらのテーブルはまだ存在しませんが、すぐに作成します。

最後に、ファイルの一番下までスクロールし、次の行を追加します。 これにより、先ほど作成した `+ / var / lib / phpmyadmin / tmp +`ディレクトリを一時ディレクトリとして使用するようにphpMyAdminが設定されます。 phpMyAdminは、この一時ディレクトリをテンプレートキャッシュとして使用して、ページの読み込みを高速化します。

/usr/share/phpmyadmin/config.inc.php

. . .

この行を追加した後、ファイルを保存して閉じます。 + nano +`を使用した場合は、 `+ CTRL + X ++ Y +、次に `+ ENTER +`を押すことで使用できます。

次に、phpMyAdminストレージデータベースとテーブルを作成する必要があります。 前の手順でphpMyAdminをインストールすると、 `+ create_tables.sql +`という名前のファイルが付属していました。 このSQLファイルには、構成ストレージデータベースとテーブルを作成するために必要なすべてのコマンドと、phpMyAdminが正しく機能するために必要なテーブルが含まれています。

次のコマンドを実行して、 `+ create_tables.sql +`ファイルを使用して構成ストレージデータベースとテーブルを作成します。

sudo mariadb < /usr/share/phpmyadmin/sql/create_tables.sql

その後、管理* pma *ユーザーを作成する必要があります。 MariaDBプロンプトを開きます。

sudo mariadb

プロンプトから、次のコマンドを実行して* pma *ユーザーを作成し、適切な権限を付与します。 `+ config.inc.php `ファイルで定義したパスワードに合わせて `+`を変更してください:

GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY '';

まだ作成していない場合は、* pma *ユーザー以外のアカウントを使用してログインすることをお勧めします。 このコマンドを使用すると、データベース内のすべてのテーブルに対する特権を持つユーザーを作成でき、ユーザー特権を追加、変更、および削除することができます。 このユーザーにどの特権を割り当てる場合でも、強力なパスワードを必ず入力してください。

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

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

exit

これで、phpMyAdminがサーバーに完全にインストールおよび構成されました。 ただし、Apacheサーバーは、アプリケーションの提供方法を​​まだ認識していません。 これを解決するために、Apache構成ファイルを作成します。

ステップ3-phpMyAdminを提供するためのApacheの構成

デフォルトのリポジトリからphpMyAdminをインストールする場合、インストールプロセスはApache設定ファイルを自動的に作成し、それを `+ / etc / apache2 / conf-enabled / +`ディレクトリに配置します。 ただし、ソースからphpMyAdminをインストールしたため、このファイルを手動で作成して有効にする必要があります。

`+ / etc / apache2 / conf-available / `ディレクトリに ` phpmyadmin.conf +`という名前のファイルを作成します:

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

次に、ファイルに次のコンテンツを追加します

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

# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
   Options SymLinksIfOwnerMatch
   DirectoryIndex index.php

   <IfModule mod_php5.c>
       <IfModule mod_mime.c>
           AddType application/x-httpd-php .php
       </IfModule>
       <FilesMatch ".+\.php$">
           SetHandler application/x-httpd-php
       </FilesMatch>

       php_value include_path .
       php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
       php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
       php_admin_value mbstring.func_overload 0
   </IfModule>
   <IfModule mod_php.c>
       <IfModule mod_mime.c>
           AddType application/x-httpd-php .php
       </IfModule>
       <FilesMatch ".+\.php$">
           SetHandler application/x-httpd-php
       </FilesMatch>

       php_value include_path .
       php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
       php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
       php_admin_value mbstring.func_overload 0
   </IfModule>

</Directory>

# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
   <IfModule mod_authz_core.c>
       <IfModule mod_authn_file.c>
           AuthType Basic
           AuthName "phpMyAdmin Setup"
           AuthUserFile /etc/phpmyadmin/htpasswd.setup
       </IfModule>
       Require valid-user
   </IfModule>
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
   Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
   Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
   Require all denied
</Directory>

これはUbuntuインストールで見つかったデフォルトのphpMyAdmin Apache構成ファイルですが、Debianのセットアップにも適しています。

ファイルを保存して閉じ、次のように入力して有効にします。

sudo a2enconf phpmyadmin.conf

次に、 `+ apache2 +`サービスをリロードして、設定の変更を有効にします。

sudo systemctl reload apache2

その後、Webブラウザーで次のURLに移動して、phpMyAdminログイン画面にアクセスできます。

https:///phpmyadmin

次のログイン画面が表示されます。

image:https://assets.digitalocean.com/articles/phpmyadmin_deb10/phpmyadmin_login_blank.png [phpMyAdminログイン画面]

設定したMariaDBユーザー名とパスワードでインターフェースにログインします。 ログインすると、次のようなユーザーインターフェースが表示されます。

image:https://assets.digitalocean.com/articles/phpmyadmin_deb10/phpmyadmin_ui_deb10.png [phpMyAdminユーザーインターフェイス]

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

ステップ4-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

<Directory /usr/share/phpmyadmin>
   Options FollowSymLinks
   DirectoryIndex index.php


   <IfModule mod_php5.c>
   . . .

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

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

sudo systemctl restart apache2

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

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

sudo nano /usr/share/phpmyadmin/.htaccess

このファイル内で、次のコンテンツを入力します。

/usr/share/phpmyadmin/.htaccess

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

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

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

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

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

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

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

sudo htpasswd -c /usr/share/phpmyadmin/.htpasswd

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

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

sudo htpasswd /etc/phpmyadmin/.htpasswd

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

https:///phpmyadmin

image:https://assets.digitalocean.com/articles/phpmyadmin_deb10/pma_deb10_apache_auth.png [phpMyAdmin apache password]

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

結論

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