如何在 Debian 10 上从源代码安装 phpMyAdmin
介绍
虽然许多用户需要像 MariaDB 这样的数据库管理系统的功能,但他们可能不习惯仅通过 MariaDB 提示符与系统交互。
创建 phpMyAdmin 以便用户可以通过 Web 界面与 MariaDB 交互。在本指南中,我们将讨论如何安装和保护 phpMyAdmin,以便您可以安全地使用它来管理 Debian 10 系统上的数据库。
先决条件
在开始使用本指南之前,您需要具备以下条件:
- 访问 Debian 10 服务器。此服务器应具有具有
sudo
权限的非根用户和配置有ufw
的防火墙。要进行设置,请遵循我们的 Debian 10 初始服务器设置指南。 - 在您的 Debian 10 服务器上安装了一个 LAMP(Linux、Apache、MariaDB 和 PHP)堆栈。按照我们在 Debian 10 上安装 LAMP 堆栈的指南进行设置。
注意:MariaDB 是 MySQL 的社区开发分支,虽然这两个程序密切相关,但它们不能完全互换。虽然 phpMyAdmin 专为管理 MySQL 数据库而设计,并在各种对话框中引用 MySQL,但请放心,您安装的 MariaDB 将与 phpMyAdmin 一起正常工作。
最后,在使用像 phpMyAdmin 这样的软件时,还有一些重要的安全注意事项,因为它:
- 直接与您的 MariaDB 安装通信
- 使用 MariaDB 凭据处理身份验证
- 执行并返回任意 SQL 查询的结果
由于这些原因,并且因为它是一个广泛部署的 PHP 应用程序,经常成为攻击的目标,所以您永远不应该通过普通 HTTP 连接在远程系统上运行 phpMyAdmin。
如果您没有使用 SSL/TLS 证书配置的现有域,则可以按照本指南设置 Apache 虚拟主机。
完成这些步骤后,您就可以开始使用本指南了。
第 1 步 — 安装 phpMyAdmin 和推荐的软件包
在安装和配置 phpMyAdmin 之前,官方文档建议您在服务器上安装一些 PHP 扩展以启用某些功能并提高性能。
如果您遵循了先决条件 LAMP 堆栈教程,那么其中的几个模块将与 php
包一起安装。但是,建议您还安装这些软件包:
php-mbstring
:用于管理非ASCII字符串并将字符串转换为不同编码的PHP扩展php-zip
: PHP模块,支持上传.zip
文件到phpMyAdminphp-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
链接将下载一个版本的 phpMyAdmin,您可以从 72 种可用语言中选择一种,而 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-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 等网络服务器在 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
身份验证方法,这允许您在临时 cookie 中的高级加密标准 (AES) 算法的帮助下,以任何有效的 MariaDB 用户身份登录 phpMyAdmin。
过去,phpMyAdmin 为此目的使用了 Blowfish 密码,这仍然反映在其配置文件中。向下滚动到以 $cfg[blowfish_secret]
开头的行。它看起来像这样:
. . .
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .
在单引号之间,输入 32 个随机字符的字符串。这不是您需要记住的密码,它只会由 AES 算法在内部使用:
. . .
$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,则不需要此特殊用户帐户,但建议在多用户场景中使用。
通过删除前面的斜杠取消注释 controluser
和 controlpass
指令。然后更新 controlpass
指令以指向您选择的安全密码。如果您不这样做,默认密码将保留,未知用户可以通过 phpMyAdmin 界面轻松访问您的数据库。
进行这些更改后,文件的这一部分将如下所示:
. . .
/* 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 生成等。
通过删除每行开头的斜杠来取消注释本节中的每一行,如下所示:
. . .
/* 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 将使用此临时目录作为模板缓存,以加快页面加载速度:
. . .
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
添加此行后保存并关闭文件。如果您使用了 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 用户并授予其适当的权限。请务必更改 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
然后在文件中添加以下内容
# 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
之后,您将能够通过在网络浏览器中导航到以下 URL 来访问 phpMyAdmin 登录屏幕:
https://your_domain/phpmyadmin
您将看到以下登录屏幕:

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

现在您可以连接 phpMyAdmin 并与之交互,剩下要做的就是加强系统的安全性以保护它免受攻击者的侵害。
第 4 步 — 保护您的 phpMyAdmin 实例
由于其无处不在,phpMyAdmin 是攻击者的热门目标,您应该格外小心以防止未经授权的访问。最简单的方法之一是使用 Apache 的内置 .htaccess
身份验证和授权功能在整个应用程序前面放置一个网关。
为此,您必须首先通过编辑 Apache 配置文件启用 .htaccess
文件覆盖。
编辑已放置在 Apache 配置目录中的链接文件:
- sudo nano /etc/apache2/conf-available/phpmyadmin.conf
在配置文件的
部分添加一个 AllowOverride All
指令,如下所示:
<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
在此文件中,输入以下内容:
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 服务器上使用了。使用此接口,您可以轻松地创建数据库、用户、表等,并执行删除和修改结构和数据等常用操作。