如何在Debian10上从源代码安装phpMyAdmin

来自菜鸟教程
跳转至:导航、​搜索

介绍

虽然许多用户需要像 MariaDB 这样的数据库管理系统的功能,但他们可能不习惯仅通过 MariaDB 提示符与系统交互。

phpMyAdmin 的创建是为了让用户可以通过 Web 界面与 MariaDB 进行交互。 在本指南中,我们将讨论如何安装和保护 phpMyAdmin,以便您可以安全地使用它来管理 Debian 10 系统上的数据库。

先决条件

在开始使用本指南之前,您需要以下内容:

  • 访问 Debian 10 服务器。 此服务器应具有具有 sudo 权限的非 root 用户和配置有 ufw 的防火墙。 要进行此设置,请遵循我们的 Debian 10 初始服务器设置指南。
  • 安装在 Debian 10 服务器上的 LAMP(Linux、Apache、MariaDB 和 PHP)堆栈。 按照我们关于 在 Debian 10 上安装 LAMP 堆栈的指南进行设置。

笔记: 玛丽亚数据库 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 这样的软件时,还有一些重要的安全注意事项,因为它:

  • 直接与您的 MariaDB 安装进行通信
  • 使用 MariaDB 凭证处理身份验证
  • 执行并返回任意 SQL 查询的结果

由于这些原因,并且因为它是一个广泛部署的 PHP 应用程序,并且经常成为攻击的目标,所以您永远不应该通过普通的 HTTP 连接在远程系统上运行 phpMyAdmin。

如果您没有配置 SSL/TLS 证书的现有域,您可以按照 使用 Debian 10 上的 Let's Encrypt 保护 Apache 的指南进行设置。 这将需要您注册一个域名为您的服务器创建DNS记录,并且设置一个Apache虚拟主机

完成这些步骤后,您就可以开始使用本指南了。

第 1 步 — 安装 phpMyAdmin 和推荐的软件包

在安装和配置 phpMyAdmin 之前, 官方文档建议 在您的服务器上安装一些 PHP 扩展,以启用某些功能并提高性能。

如果您遵循先决条件 LAMP 堆栈教程 ,其中几个模块将与 php 软件包一起安装。 但是,建议您也安装这些软件包:

  • php-mbstring:一个 PHP 扩展,用于管理非 ASCII 字符串并将字符串转换为不同的编码
  • php-zip:一个PHP模块,支持上传.zip文件到phpMyAdmin
  • php-gd:另一个 PHP 模块,这个模块支持 GD 图形库

首先,如果您最近没有这样做,请更新服务器的包索引:

sudo apt update

然后使用 apt 下载文件并将它们安装到您的系统上:

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

接下来,我们可以安装 phpMyAdmin。 在撰写本文时,默认的 Debian 存储库中不提供 phpMyAdmin,因此您需要从 phpMyAdmin 站点将源代码下载到您的服务器。

为此,请导航到 phpMyAdmin 下载页面 ,向下滚动到包含最新稳定版本的下载链接的表格,然后复制以 tar.gz 结尾的下载链接。 此链接指向一个称为 tarball 的存档文件,提取该文件后,将在您的系统上创建许多文件。 在撰写本文时,最新版本是 4.9.7 版。

注意: 在这个下载页面,你会注意到有标记为all-languagesenglish的下载链接。 all-languages 链接将下载 phpMyAdmin 版本,该版本允许您选择 72 种可用语言中的一种,而 english 链接仅允许您使用英文版 phpMyAdmin。

本指南将使用 all-languages 包来说明如何安装 phpMyAdmin,但如果您打算使用英文版的 phpMyAdmin,则可以安装 english 包。 请务必在以下命令中根据需要替换链接和文件名。


将下面wget命令中的链接替换为刚才复制的下载链接,然后按ENTER。 这将运行命令并将压缩包下载到您的服务器:

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

然后解压压缩包:

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

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

至此,您已经安装了 phpMyAdmin,但是您必须进行一些配置更改才能通过 Web 浏览器访问 phpMyAdmin。

第 2 步 — 手动配置 phpMyAdmin

当使用包管理器安装 phpMyAdmin 时,就像在 Ubuntu 环境中一样,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 身份验证方法,允许您在 cookies 的帮助下以任何有效的 MariaDB 用户身份登录 phpMyAdmin。 在这种方法中,MariaDB 用户密码被存储并使用 高级加密标准 (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 程序:

sudo apt install pwgen

默认情况下,pwgen 创建易于发音但安全性较低的密码。 但是,通过包含 -s 标志,如以下命令所示,您可以创建一个完全随机的、难以记忆的密码。 注意此命令的最后两个参数:32,它指示密码字符串 pwgen 将生成多长时间; 和 1 告诉 pwgen 它应该生成多少个字符串:

pwgen -s 32 1

接下来,向下滚动到阅读 /* User used to manipulate with storage */ 的评论。 本节包括一些定义名为 pma 的 MariaDB 数据库用户的指令,该用户在 phpMyAdmin 中执行某些管理任务。 根据官方文档,只有一个用户访问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 数据库用户使用的表。 这些表启用了 phpMyAdmin 中的许多功能,包括书签、评论、PDF 生成等。

通过删除每行开头的斜杠取消注释本节中的每一行,使其看起来像这样:

/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 + XY,然后按 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 用户并授予它适当的权限。 请务必更改 password 以与您在 config.inc.php 文件中定义的密码一致:

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

如果还没有创建,您还应该创建一个普通的 MariaDB 用户,以便通过 phpMyAdmin 管理数据库,因为建议您使用 pma 用户以外的其他帐户登录。 您可以使用此命令创建一个对数据库中所有表具有权限的用户,以及添加、更改和删除用户权限的权力。 无论您为该用户分配什么权限,请务必同时为其提供一个强密码:

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

之后,退出 MariaDB shell:

exit

phpMyAdmin 现在已在您的服务器上完全安装和配置。 但是,您的 Apache 服务器还不知道如何为应用程序提供服务。 为了解决这个问题,我们将为它创建一个 Apache 配置文件。

第 3 步 — 配置 Apache 以服务 phpMyAdmin

从默认存储库安装 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://your_domain/phpmyadmin

您将看到以下登录屏幕:

使用您配置的 MariaDB 用户名和密码登录界面。 登录后,您将看到用户界面,如下所示:

现在您可以连接并与 phpMyAdmin 交互,剩下要做的就是加强系统的安全性以保护它免受攻击者的侵害。

第 4 步 — 保护您的 phpMyAdmin 实例

由于其无处不在,phpMyAdmin 是攻击者的热门目标,您应格外小心以防止未经授权的访问。 最简单的方法之一是使用 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
    AllowOverride All

    <IfModule mod_php5.c>
    . . .

添加此行后,保存并关闭文件。

要实施您所做的更改,请重新启动 Apache:

sudo systemctl restart apache2

现在您已经为您的应用程序启用了 .htaccess 使用,您需要创建一个来实际实现一些安全性。

为了成功,必须在应用程序目录中创建该文件。 您可以创建必要的文件并在您的文本编辑器中通过键入以下命令以 root 权限打开它:

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 实用程序将其传递给初始用户:

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

系统将提示您选择并确认您正在创建的用户的密码。 之后,使用您输入的散列密码创建文件。

如果你想输入一个额外的用户,你需要这样做没有-c标志,像这样:

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

现在,当您访问 phpMyAdmin 子目录时,系统将提示您输入刚刚配置的附加帐户名和密码:

https://your_domain_or_IP/phpmyadmin

输入 Apache 身份验证后,您将被带到常规的 phpMyAdmin 身份验证页面以输入您的 MariaDB 凭据。 此设置增加了额外的安全层,这是可取的,因为 phpMyAdmin 过去曾遭受过漏洞的困扰。

结论

您现在应该已配置好 phpMyAdmin 并准备好在您的 Debian 10 服务器上使用。 使用该界面,您可以轻松创建数据库、用户、表等,并执行删除和修改结构和数据等常用操作。