介绍
虽然许多用户需要像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字符串并将字符串转换为不同的encodingsphp-zip
:支持上传.zip
文件到 phpMyAdminphp-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 中执行某些管理任务。
通过删除前面的剪辑删除controluser
和controlpass
指令,然后更新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
你会看到下面的登录屏幕:
使用您配置的 MariaDB 用户名和密码登录接口. 登录后,您将看到用户界面,它将看起来像这样:
现在你可以连接和与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
输入 Apache 身份验证后,您将被带到常规的 phpMyAdmin 身份验证页面,以输入您的 MariaDB 凭证。
结论
您现在应该在您的 Debian 10 服务器上配置并准备使用 phpMyAdmin. 使用此界面,您可以轻松创建数据库、用户、表等,并执行通常的操作,如删除和修改结构和数据。