序章

多くのユーザーはMariaDBのようなデータベース管理システムの機能を必要としていますが、MariaDBプロンプトだけからシステムを操作することに抵抗を感じる場合があります。

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

前提条件

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

  • Debian10サーバーへのアクセス。 このサーバーには、root以外のユーザーが必要です。 sudo 特権とで構成されたファイアウォール ufw. これを設定するには、Debian10初期サーバー設定ガイドに従ってください。
  • Debian 10サーバーにインストールされたLAMP( L inux、 A pache、 M ariaDB、および P HP)スタック。 Debian10へのLAMPスタックのインストールに関するガイドに従ってこれを設定してください。

注: MariaDB はコミュニティで開発されたMySQLのフォークであり、2つのプログラムは密接に関連していますが、完全に互換性があるわけではありません。 phpMyAdminはMySQLデータベースを管理するために特別に設計されており、さまざまなダイアログボックスでMySQLを参照しますが、MariaDBのインストールはphpMyAdminで正しく機能しますのでご安心ください。

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

  • MariaDBインストールと直接通信します
  • MariaDBクレデンシャルを使用して認証を処理します
  • 任意のSQLクエリの結果を実行して返します

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

SSL / TLS証明書で構成された既存のドメインがない場合は、 Debian 10でLet’sEncryptを使用してApacheを保護するに関するこのガイドに従って、ドメインを設定できます。 これには、ドメイン名の登録サーバーのDNSレコードの作成、およびApache仮想ホストの設定が必要になります。

これらの手順を完了すると、このガイドを開始する準備が整います。

phpMyAdminをインストールして構成する前に、公式ドキュメントでは、特定の機能を有効にしてパフォーマンスを向上させるために、サーバーにいくつかのPHP拡張機能をインストールすることを推奨しています

前提条件のLAMPスタックチュートリアルに従った場合、これらのモジュールのいくつかは、 php パッケージ。 ただし、次のパッケージもインストールすることをお勧めします。

  • php-mbstring:非ASCII文字列を管理し、文字列を異なるエンコーディングに変換するために使用されるPHP拡張機能
  • php-zip:アップロードをサポートするPHPモジュール .zip phpMyAdminへのファイル
  • php-gd:別のPHPモジュール、これはGDグラフィックライブラリのサポートを有効にします

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

  1. sudo apt update

次に、 apt ファイルをプルダウンしてシステムにインストールするには:

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

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

これを行うには、 phpMyAdminダウンロードページに移動し、最新の安定版リリースのダウンロードリンクが記載された表までスクロールして、末尾が tar.gz. このリンクは、 tarball と呼ばれるアーカイブファイルを指しており、解凍すると、システム上に多数のファイルが作成されます。 この記事の執筆時点では、最新リリースはバージョン4.9.7です。

注:このダウンロードページには、ラベルの付いたダウンロードリンクがあることに気付くでしょう。 all-languagesenglish. The all-languages リンクは、利用可能な72の言語の1つを選択できるバージョンのphpMyAdminをダウンロードします。 english リンクでは、phpMyAdminを英語でのみ使用できます。

このガイドでは、 all-languages phpMyAdminのインストール方法を説明するパッケージですが、英語でphpMyAdminを使用する場合は、 english パッケージ。 次のコマンドでは、必要に応じてリンクとファイル名を必ず置き換えてください。

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

  1. wget https://files.phpmyadmin.net/phpMyAdmin/4.9.7/phpMyAdmin-4.9.7-all-languages.tar.gz

次に、tarballを抽出します。

  1. tar xvf phpMyAdmin-4.9.7-all-languages.tar.gz

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

次に、次のコマンドを実行します。 これにより、 phpMyAdmin-4.9.7-all-languages ディレクトリとそのすべてのサブディレクトリ /usr/share/ ディレクトリ、phpMyAdminがデフォルトで設定ファイルを見つけることを期待する場所。 また、所定の場所にあるディレクトリの名前を phpmyadmin:

  1. sudo mv phpMyAdmin-4.9.7-all-languages/ /usr/share/phpmyadmin

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

ステップ2—phpMyAdminを手動で設定する

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

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

  1. sudo mkdir -p /var/lib/phpmyadmin/tmp

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

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

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

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

お好みのテキストエディタを使用してこのファイルを開きます。 ここでは、 nano:

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

phpMyAdminは cookie デフォルトの認証方法。cookiesを使用して、有効なMariaDBユーザーとしてphpMyAdminにログインできます。 この方法では、MariaDBユーザーパスワードが保存され、 Advanced Encryption Standard(AES)アルゴリズムを使用して一時的なCookieに暗号化されます。

歴史的に、phpMyAdminは代わりに Blowfish暗号をこの目的で使用していましたが、これはまだ構成ファイルに反映されています。 で始まる行まで下にスクロールします $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'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .

注:ここに入力するパスフレーズの長さが32文字より短い場合、暗号化されたCookieの安全性が低下します。 ただし、32文字より長い文字列を入力しても、害はありません。

真にランダムな文字列を生成するには、 pwgen プログラム:

  1. sudo apt install pwgen

デフォルトでは、 pwgen 安全性は劣りますが、簡単に発音できるパスワードを作成します。 ただし、 -s 次のコマンドのように、フラグを立てると、完全にランダムで覚えにくいパスワードを作成できます。 このコマンドの最後の2つの引数に注意してください。 32、パスワード文字列の長さを指定します pwgen 生成する必要があります。 と 1 これは pwgen 生成する文字列の数:

  1. pwgen -s 32 1

次に、コメントを読むまで下にスクロールします /* User used to manipulate with storage */. このセクションには、phpMyAdmin内で特定の管理タスクを実行するpmaという名前のMariaDBデータベースユーザーを定義するいくつかのディレクティブが含まれています。 公式ドキュメントによると、この特別なユーザーアカウントは、1人のユーザーのみがphpMyAdminにアクセスする場合には必要ありませんが、マルチユーザーシナリオでは推奨されます。

コメントを外す controlusercontrolpass 前のスラッシュを削除することによるディレクティブ。 次に、を更新します 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'] = 'password';
. . .

このセクションの下には、コメントが前に付いた別のセクションがあります。 /* Storage database and tables */. このセクションには、 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';
. . .

これらのテーブルはまだ存在していませんが、まもなく作成します。

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

/usr/share/phpmyadmin/config.inc.php
. . .
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';

この行を追加したら、ファイルを保存して閉じます。 使用した場合 nano、を押すことでそうすることができます CTRL + X, Y、 それから ENTER.

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

次のコマンドを実行して、 create_tables.sql 構成ストレージデータベースとテーブルを作成するためのファイル:

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

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

  1. sudo mariadb

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

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

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

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

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

  1. exit

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

ステップ3—phpMyAdminを提供するようにApacheを設定する

デフォルトのリポジトリからphpMyAdminをインストールすると、インストールプロセスによってApache構成ファイルが自動的に作成され、 /etc/apache2/conf-enabled/ ディレクトリ。 ただし、ソースからphpMyAdminをインストールしたため、このファイルを手動で作成して有効にする必要があります。

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

  1. 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セットアップにも十分です。

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

  1. sudo a2enconf phpmyadmin.conf

次に、リロードします apache2 構成の変更を有効にするサービス:

  1. sudo systemctl reload apache2

その後、Webブラウザで次のURLに移動すると、phpMyAdminのログイン画面にアクセスできるようになります。

https://your_domain/phpmyadmin

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

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

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

ステップ4—phpMyAdminインスタンスを保護する

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

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

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

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

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

/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All

    <IfModule mod_php5.c>
    . . .

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

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

  1. sudo systemctl restart apache2

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

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

  1. sudo nano /usr/share/phpmyadmin/.htaccess

このファイル内に、次の内容を入力します。

/usr/share/phpmyadmin/.htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /usr/share/phpmyadmin/.htpasswd
Require valid-user

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

  • AuthType Basic:この行は、実装している認証タイプを指定します。 このタイプは、パスワードファイルを使用してパスワード認証を実装します。
  • AuthName:認証ダイアログボックスのメッセージを設定します。 許可されていないユーザーが保護対象に関する情報を取得しないように、この汎用を維持する必要があります。
  • AuthUserFile:認証に使用するパスワードファイルの場所を設定します。 これは、提供されているディレクトリの外にある必要があります。 このファイルはまもなく作成されます。
  • Require valid-user:これは、認証されたユーザーのみにこのリソースへのアクセスを許可する必要があることを指定します。 これは、許可されていないユーザーの侵入を実際に阻止するものです。

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

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

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

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

追加のユーザーを入力する場合は、なしで入力する必要があります。 -c このようなフラグ:

  1. sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

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

https://your_domain_or_IP/phpmyadmin

Apache認証を入力すると、通常のphpMyAdmin認証ページが表示され、MariaDBの資格情報を入力できます。 この設定により、セキュリティの層が追加されます。これは、phpMyAdminが過去に脆弱性に悩まされていたため、望ましいことです。

結論

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