開発者ドキュメント

Debian10のソースからphpMyAdminをインストールする方法

序章

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

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

前提条件

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

ノート: MariaDB is a community-developed fork of MySQL, and although the two programs are closely related, they are not completely interchangeable. While phpMyAdmin was designed specifically for managing MySQL databases and makes reference to MySQL in various dialogue boxes, rest assured that your installation of MariaDB will work correctly with phpMyAdmin.

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

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

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

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

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

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

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

  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-languagesおよびenglishというラベルの付いたダウンロードリンクがあります。 all-languagesリンクは、利用可能な72の言語のいずれかを選択できるバージョンの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ユーザーパスワードが一時的なCookieに Advanced Encryption Standard(AES)アルゴリズムで保存および暗号化されます。

歴史的に、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にアクセスする場合には必要ありませんが、マルチユーザーシナリオでは推奨されます。

前のスラッシュを削除して、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'] = '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';
. . .

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

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

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

この行を追加したら、ファイルを保存して閉じます。 nanoを使用した場合は、CTRL + XYENTERの順に押すと使用できます。

次に、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をインストールしたため、このファイルを手動で作成して有効にする必要があります。

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

  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認証および承認機能を使用して、アプリケーション全体の前にゲートウェイを配置することです。

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

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

  1. 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
    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

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

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

パスワードファイル用に選択した場所は/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サーバーで使用できるようになります。 このインターフェースを使用すると、データベース、ユーザー、テーブルなどを簡単に作成し、構造やデータの削除や変更などの通常の操作を実行できます。

モバイルバージョンを終了