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

介绍

虽然许多用户需要像MariaDB这样的数据库管理系统的功能,但他们可能并不感到舒适地与系统单独从MariaDB提示器进行交互。

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

前提条件

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

  • 访问 Debian 10 服务器. 该服务器应该有一个非根用户,具有sudo权限和与ufw配置的防火墙。 要设置此功能,请遵循我们的 Debian 10 初始服务器设置指南
  • 在您的 Debian 10 服务器上安装了 LAMP (L inux, ** A** pache, ** MariaDB 和 ** P** HP) 堆栈。

<$>[注] 注: MariaDB是一个社区开发的MySQL叉子,尽管这两个程序密切相关,但它们不是完全可互换的。

最后,在使用phpMyAdmin等软件时,有重要的安全考虑,因为它:

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

出于这些原因,并且因为它是一个广泛部署的PHP应用程序,经常受到攻击的攻击,你不应该在远程系统上运行phpMyAdmin通过简单的HTTP连接。

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

一旦你完成了这些步骤,你已经准备好开始这个指南。

步骤 1 — 安装 phpMyAdmin 和推荐包

在安装和配置 phpMyAdmin 之前,官方文档(https://docs.phpmyadmin.net/en/latest/require.html)建议您在服务器上安装几个 PHP 扩展,以启用某些功能并提高性能。

如果您遵循了 LAMP stack 教程的先决条件,那么这些模块中的几个模块将与php包一起安装。

  • php-mbstring:用于管理非ASCII字符串并将字符串转换为不同的encodings
  • php-zip:支持上传 .zip 文件到 phpMyAdmin
  • php-gd的 PHP 模块:另一个 PHP 模块,此模块可支持 GD Graphics Library

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

1sudo apt update

然后使用apt来拖下文件并在您的系统上安装它们:

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

接下来,我们可以安装 phpMyAdmin. 从本文写作开始, phpMyAdmin 无法从默认的 Debian 存储库中使用,因此您需要从 phpMyAdmin 网站下载源代码到您的服务器。

要做到这一点,请导航到 phpMyAdmin 下载页面,向下滚动到下载链接的表格,以获取最新的稳定版本,并复制以 tar.gz 结束的下载链接。

<$>[note] 注: 在此下载页面上,您会注意到有下载链接标记为所有语言英语

本指南将使用All-languages包来说明如何安装phpMyAdmin,但如果您打算用英语使用phpMyAdmin,您可以安装English包。

将下列wget命令中的链接替换为您刚刚复制的下载链接,然后按ENTER

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

然后提取Tarball:

1tar xvf phpMyAdmin-4.9.7-all-languages.tar.gz

这将在您的服务器上创建一系列新的文件和目录,名为phpMyAdmin-4.9.7-all-languages的母目录。

然後執行下列命令. 這將會將『phpMyAdmin-4.9.7-all-languages』目錄及其所有子目錄移至『/usr/share/』目錄,即 phpMyAdmin 預期預設會找到其配置檔案的位置。

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

有了这个,你已经安装了phpMyAdmin,但你必须做一些配置更改,以便通过Web浏览器访问phpMyAdmin。

步骤 2 — 手动配置 phpMyAdmin

当使用包管理器安装phpMyAdmin时,就像在Ubuntu环境中一样,phpMyAdmin会默认设置为零配置模式,该模式会自动执行多个操作来设置程序,因为我们在本指南中从源头安装了它,我们需要手动执行这些步骤。

首先,创建一个新目录,在那里 phpMyAdmin 会存储临时文件:

1sudo mkdir -p /var/lib/phpmyadmin/tmp

设置 www-data - 像Apache这样的Web服务器默认情况下在Ubuntu和Debian系统中的正常操作中使用的Linux用户配置文件 - 作为本目录的所有者:

1sudo chown -R www-data:www-data /var/lib/phpmyadmin

您之前提取的文件包括一个样本配置文件,您可以使用作为您的基本配置文件。 复制此文件,将其保存在 /usr/share/phpmyadmin 目录中,并重命名为 `config.inc.php:

1sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

使用您喜爱的文本编辑器打开此文件. 在这里,我们将使用nano:

1sudo nano /usr/share/phpmyadmin/config.inc.php

phpMyAdmin 默认使用cookie身份验证方法,它允许您登录 phpMyAdmin 作为任何有效的 MariaDB 用户,使用 cookies

历史上,phpMyAdmin 使用了 [Blowfish 加密器](https://en.wikipedia.org/wiki/Blowfish_(cipher)这个用途,这仍然反映在其配置文件中。

1[label /usr/share/phpmyadmin/config.inc.php]
2. . .
3$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
4. . .

在单个引文之间,输入32个随机字符串,这不是你需要记住的短语,它只会被AES算法内部使用:

1[label /usr/share/phpmyadmin/config.inc.php]
2. . .
3$cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
4. . .

<$>[注] 注: 如果您在这里输入的密码短于32个字符,则会导致加密的cookie不那么安全。

要生成一个真正的随机字符串,你可以安装并使用pwgen程序:

1sudo apt install pwgen

默认情况下,pwgen会创建易于发音的,但不那么安全的密码,但是,如下命令所示,你可以创建一个完全随机的,难以记忆的密码,请注意这个命令的最后两个参数:32指示pwgen应生成密码字符串的长度;1指示pwgen应该生成多少字符串:

1pwgen -s 32 1

美元

接下来,转到评论读取 /* 使用者操纵存储 */. 本节包含一些指令,定义一个名为 pma 的MariaDB数据库用户,该用户在 phpMyAdmin 中执行某些管理任务。

通过删除前面的剪辑删除controlusercontrolpass指令,然后更新controlpass指令以指向您选择的安全密码。

进行这些更改后,该文件的这个部分将看起来像这样:

1[label /usr/share/phpmyadmin/config.inc.php]
2. . .
3/* User used to manipulate with storage */
4// $cfg['Servers'][$i]['controlhost'] = '';
5// $cfg['Servers'][$i]['controlport'] = '';
6$cfg['Servers'][$i]['controluser'] = 'pma';
7$cfg['Servers'][$i]['controlpass'] = 'password';
8. . .

在本节下方,你会发现另一个部分,前面的评论读 /* 存储数据库和表 */. 此部分包含了一些指令,定义了 phpMyAdmin配置存储,一个数据库和几个表,使用的管理 pma 数据库用户. 这些表允许 phpMyAdmin的一些功能,包括图标,评论,PDF生成,等等。

在本节中的每个行中,通过在每个行开始时删除切片,以便它看起来像这样:

 1[label /usr/share/phpmyadmin/config.inc.php]
 2. . .
 3/* Storage database and tables */
 4$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
 5$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
 6$cfg['Servers'][$i]['relation'] = 'pma__relation';
 7$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
 8$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
 9$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
10$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
11$cfg['Servers'][$i]['history'] = 'pma__history';
12$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
13$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
14$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
15$cfg['Servers'][$i]['recent'] = 'pma__recent';
16$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
17$cfg['Servers'][$i]['users'] = 'pma__users';
18$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
19$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
20$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
21$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
22$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
23$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
24. . .

这些表尚不存在,但我们将很快创建它们。

最后,滚到文件的底部并添加下面的行. 这将配置phpMyAdmin以使用您之前创建的 /var/lib/phpmyadmin/tmp目录作为临时目录。

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

如果您使用了nano,则可以通过按CTRL + X,Y,然后按ENTER来完成。

接下来,您需要创建 phpMyAdmin 存储数据库和表. 在上一个步骤中安装 phpMyAdmin 时,它带来了一个名为 create_tables.sql 的文件。

运行以下命令,使用「create_tables.sql」文件创建配置存储数据库和表:

1sudo mariadb < /usr/share/phpmyadmin/sql/create_tables.sql

接下来,您需要创建管理 pma 用户。

1sudo mariadb

从提示中运行以下命令来创建 pma 用户并授予适当的权限. 请确保更改密码,以与您在config.inc.php文件中定义的密码匹配:

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

如果你还没有创建一个,你还应该创建一个正常的MariaDB用户,以便通过phpMyAdmin管理数据库,因为建议你使用不同的帐户登录,而不是pma用户。

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

接下来,输出 MariaDB 壳:

1exit

phpMyAdmin 现在已经完全安装并配置在您的服务器上,但是您的 Apache 服务器还不知道如何服务该应用程序。

步骤 3 — 配置 Apache 以服务 phpMyAdmin

在从默认存储库中安装 phpMyAdmin 时,安装过程会自动创建一个 Apache 配置文件,并将其放入 /etc/apache2/conf-enabled/ 目录。

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

1sudo nano /etc/apache2/conf-available/phpmyadmin.conf

然后将以下内容添加到文件中

 1[label /etc/apache2/conf-available/phpmyadmin.conf]
 2# phpMyAdmin default Apache configuration
 3
 4Alias /phpmyadmin /usr/share/phpmyadmin
 5
 6<Directory /usr/share/phpmyadmin>
 7    Options SymLinksIfOwnerMatch
 8    DirectoryIndex index.php
 9
10    <IfModule mod_php5.c>
11        <IfModule mod_mime.c>
12            AddType application/x-httpd-php .php
13        </IfModule>
14        <FilesMatch ".+\.php$">
15            SetHandler application/x-httpd-php
16        </FilesMatch>
17
18        php_value include_path .
19        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
20        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/
21        php_admin_value mbstring.func_overload 0
22    </IfModule>
23    <IfModule mod_php.c>
24        <IfModule mod_mime.c>
25            AddType application/x-httpd-php .php
26        </IfModule>
27        <FilesMatch ".+\.php$">
28            SetHandler application/x-httpd-php
29        </FilesMatch>
30
31        php_value include_path .
32        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
33        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/
34        php_admin_value mbstring.func_overload 0
35    </IfModule>
36
37</Directory>
38
39# Authorize for setup
40<Directory /usr/share/phpmyadmin/setup>
41    <IfModule mod_authz_core.c>
42        <IfModule mod_authn_file.c>
43            AuthType Basic
44            AuthName "phpMyAdmin Setup"
45            AuthUserFile /etc/phpmyadmin/htpasswd.setup
46        </IfModule>
47        Require valid-user
48    </IfModule>
49</Directory>
50
51# Disallow web access to directories that don't need it
52<Directory /usr/share/phpmyadmin/templates>
53    Require all denied
54</Directory>
55<Directory /usr/share/phpmyadmin/libraries>
56    Require all denied
57</Directory>
58<Directory /usr/share/phpmyadmin/setup/lib>
59    Require all denied
60</Directory>

这是在 Ubuntu 安装中找到的默认 phpMyAdmin Apache 配置文件,尽管它也适用于 Debian 安装。

保存和关闭文件,然后通过键入启用它:

1sudo a2enconf phpmyadmin.conf

然后重新加载apache2服务,将配置更改生效:

1sudo systemctl reload apache2

接下来,您将能够访问phpMyAdmin登录屏幕,通过在您的Web浏览器中导航到以下URL:

1https://your_domain/phpmyadmin

你会看到下面的登录屏幕:

phpMyAdmin login screen

使用您配置的 MariaDB 用户名和密码登录接口. 登录后,您将看到用户界面,它将看起来像这样:

phpMyAdmin user interface

现在你可以连接和与phpMyAdmin进行交互,剩下的只是加强系统的安全性,以保护它免受攻击者攻击。

步骤 4 – 保护您的 phpMyAdmin 实例

由于它的普遍性,phpMyAdmin是攻击者最受欢迎的目标,你应该特别小心,以防止未经授权的访问。

要做到这一点,您必须首先通过编辑 Apache 配置文件来启用使用.htaccess 文件翻译。

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

1sudo nano /etc/apache2/conf-available/phpmyadmin.conf

在配置文件的<Directory /usr/share/phpmyadmin>部分中添加一个AllowOverride All指令,如下:

1[label /etc/apache2/conf-available/phpmyadmin.conf]
2<Directory /usr/share/phpmyadmin>
3    Options FollowSymLinks
4    DirectoryIndex index.php
5    AllowOverride All
6
7    <IfModule mod_php5.c>
8    . . .

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

要执行所做的更改,请重新启动 Apache:

1sudo systemctl restart apache2

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

要做到这一点,必须在应用程序目录中创建文件,您可以创建必要的文件,并在您的文本编辑器中打开它,通过键入:

1sudo nano /usr/share/phpmyadmin/.htaccess

在此文件中,输入以下内容:

1[label /usr/share/phpmyadmin/.htaccess]
2AuthType Basic
3AuthName "Restricted Files"
4AuthUserFile /usr/share/phpmyadmin/.htpasswd
5Require valid-user

以下是每个线条的含义:

  • AuthType Basic: 此行指定您正在实施的身份验证类型。 此类型将使用密码文件执行密码验证。
  • AuthName: 此设置了身份验证对话框的信息。 您应该保留此通用信息,以便未经授权的用户不会获取有关被保护的内容的任何信息。
  • AuthUserFile: 此设置了用于身份验证的密码文件的位置。 这应该在被服务的目录之外。 我们将很快创建此文件。
  • 需要有效的用户: 此规定只允许授权的用户访问此资源。

完成后,保存并关闭文件。

您为您的密码文件选择的位置是 /usr/share/phpmyadmin/.htpasswd. 您现在可以创建此文件并通过 htpasswd 实用程序将其传递给初始用户:

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

您将被要求选择并确认您正在创建的用户的密码。

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

1sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

现在,当您访问您的 phpMyAdmin 子目录时,您将被提示提供您刚刚配置的额外帐户名称和密码:

1https://your_domain_or_IP/phpmyadmin

phpMyAdmin apache password

输入 Apache 身份验证后,您将被带到常规的 phpMyAdmin 身份验证页面,以输入您的 MariaDB 凭证。

结论

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

Published At
Categories with 技术
comments powered by Disqus