如何在 Debian 10 上从源代码安装 phpMyAdmin

介绍

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

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

先决条件

在开始使用本指南之前,您需要具备以下条件:

注意: MariaDB是 MySQL 的一个社区开发的分支,虽然这两个程序密切相关,但它们并不是完全可以互换的。虽然 phpMyAdmin 是专门为管理 MySQL 数据库而设计的,并在各种对话框中引用 MySQL,但请放心,您安装的 MariaDB 将与 phpMyAdmin 一起正常工作。

最后,在使用像 phpMyAdmin 这样的软件时还有一些重要的安全考虑,因为它:

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

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

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

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

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

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

  • php-mbstring: 用于管理非 ASCII 字符串并将字符串转换为不同编码的 PHP 扩展
  • php-zip: 一个支持上传.zip文件到phpMyAdmin的PHP模块
  • 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-languages和 的下载链接english这些all-languages链接将下载一个允许您选择 72 种可用语言之一的 phpMyAdmin 版本,而这些english链接将只允许您使用英文版的 phpMyAdmin。

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

将以下wget命令中的链接替换为您刚刚复制的下载链接,然后按ENTER这将运行命令并将 tarball 下载到您的服务器:

  • 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 期望在目录中找到其配置文件。它还将就地将目录重命名为phpMyAdmin-4.9.7-all-languages/usr/share/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

phpMyAdmincookie默认使用身份验证方法,它允许您在cookie的帮助下以任何有效的 MariaDB 用户身份登录到 phpMyAdmin 在这种方法中,MariaDB 用户密码存储在临时 cookie 中,并使用高级加密标准 (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程序:

  • sudo apt install pwgen

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

  • pwgen -s 32 1

接下来,向下滚动到评论阅读/* User used to manipulate with storage */本节包括一些定义名为pma的 MariaDB 数据库用户的指令,该用户在 phpMyAdmin 中执行某些管理任务。根据官方文档,在只有一个用户访问phpMyAdmin的情况下不需要这个特殊的用户帐户,但在多用户场景中推荐使用。

通过删除前面的斜杠来取消对controluserandcontrolpass指令的注释然后更新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,所以我们需要手动创建和启用此文件。

phpmyadmin.conf/etc/apache2/conf-available/目录中创建一个名为文件:

  • 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

您将看到以下登录屏幕:

phpMyAdmin 登录屏幕

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

phpMyAdmin 用户界面

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

第 4 步 – 保护您的 phpMyAdmin 实例

由于其无处不在,phpMyAdmin 是攻击者的热门目标,您应该格外小心以防止未经授权的访问。执行此操作的最简单方法之一是使用 Apache 的内置.htaccess身份验证和授权功能在整个应用程序前面放置一个网关

为此,您必须首先.htaccess通过编辑 Apache 配置文件来启用文件覆盖的使用

编辑已放置在 Apache 配置目录中的链接文件:

  • 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:

  • 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

phpMyAdmin apache 密码

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

结论

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

觉得文章有用?

点个广告表达一下你的爱意吧 !😁