介绍
虽然许多用户需要像 MariaDB 这样的数据库管理系统的功能,但他们可能觉得仅仅通过 MariaDB 提示与系统交互并不舒服。
phpMyAdmin 的创建是为了让用户可以通过 Web 界面与 MariaDB 进行交互。在本指南中,我们将讨论如何安装和保护 phpMyAdmin,以便您可以安全地使用它来管理 Debian 10 系统上的数据库。
先决条件
在开始使用本指南之前,您需要具备以下条件:
- 访问 Debian 10 服务器。此服务器应具有具有
sudo
特权的非 root 用户和配置为ufw
. 要进行设置,请按照我们的 Debian 10 初始服务器设置指南进行操作。 - 灯管(大号inux下,一个帕什,中号ariaDB和P HP)堆叠安装您的Debian 10的服务器上。按照我们在 Debian 10上安装 LAMP 堆栈的指南进行设置。
注意: MariaDB是 MySQL 的一个社区开发的分支,虽然这两个程序密切相关,但它们并不是完全可以互换的。虽然 phpMyAdmin 是专门为管理 MySQL 数据库而设计的,并在各种对话框中引用 MySQL,但请放心,您安装的 MariaDB 将与 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
: 用于管理非 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']
。它看起来像这样:
. . .
$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
andcontrolpass
指令的注释。然后更新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,所以我们需要手动创建和启用此文件。
phpmyadmin.conf
在/etc/apache2/conf-available/
目录中创建一个名为的文件:
- 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
之后,您将能够通过在 Web 浏览器中导航到以下 URL 来访问 phpMyAdmin 登录屏幕:
https://your_domain/phpmyadmin
您将看到以下登录屏幕:
使用您配置的 MariaDB 用户名和密码登录界面。登录后,您将看到用户界面,如下所示:
既然您能够连接 phpMyAdmin 并与之交互,剩下要做的就是加强系统的安全性以保护它免受攻击者的侵害。
第 4 步 – 保护您的 phpMyAdmin 实例
由于其无处不在,phpMyAdmin 是攻击者的热门目标,您应该格外小心以防止未经授权的访问。执行此操作的最简单方法之一是使用 Apache 的内置.htaccess
身份验证和授权功能在整个应用程序前面放置一个网关。
为此,您必须首先.htaccess
通过编辑 Apache 配置文件来启用文件覆盖的使用。
编辑已放置在 Apache 配置目录中的链接文件:
- sudo nano /etc/apache2/conf-available/phpmyadmin.conf
在配置文件AllowOverride All
的<Directory /usr/share/phpmyadmin>
部分中添加一条指令,如下所示:
<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 服务器上使用。使用此界面,您可以轻松创建数据库、用户、表等,并执行删除和修改结构和数据等常用操作。