介绍
虽然许多用户需要像 MySQL 这样的数据库管理系统的功能,但他们可能并不感到舒适地与系统仅从 MySQL 命令行客户端进行交互。
phpMyAdmin是为了让用户可以通过Web界面与MySQL进行交互而创建的,在本指南中,我们将讨论如何安装和保护phpMyAdmin,以便您可以安全地使用它来管理Ubuntu 18.04系统上的数据库。
前提条件
要完成本教程,您将需要以下内容:
- 运行Ubuntu 18.04 的服务器本服务器应该有一个非root 的管理用户,具有
sudo
的权限,以及与UFW配置的防火墙。 要设置此功能,请遵循我们的 Ubuntu 18.04 的初始服务器设置指南。 - LAMP 堆栈安装在您的服务器上。
最后,在使用phpMyAdmin等软件时,有重要的安全考虑,因为它:
- 直接与您的 MySQL 安装通信
- 使用 MySQL 凭证处理身份验证
- 执行并返回任意 SQL 查询的结果
出于这些原因,并且因为它是一个广泛部署的PHP应用程序,通常是针对攻击的,你不应该在远程系统上运行phpMyAdmin通过简单的HTTP连接. 如果你没有一个现有的域配置与SSL/TLS证书,你可以遵循这个指南在 保护Apache使用Ubuntu 18.04的Let's Encrypt。
一旦你完成了这些步骤,你已经准备好开始这个指南。
第1步:安装phpMyAdmin
要开始,我们将从默认的Ubuntu存储库中安装phpMyAdmin。
首先,更新您的服务器的包索引:
1sudo apt update
然后使用apt
来拖下文件并在您的系统上安装它们:
1sudo apt install phpmyadmin php-mbstring php-gettext
这将问你几个问题,以便正确配置您的安装。
<$>[警告]
警告: 当提示出现时,将突出显示apache2
,但未选择**
。
如果您没有点击SPACE
,选择Apache,安装程序将在安装过程中移动所需的文件。
- 对于服务器选择,请选择
apache2
- 当被问及是否使用
dbconfig-common
来设置数据库 时,请选择并确认 phpMyAdmin 的 MySQL 应用程序密码
安装过程会将 phpMyAdmin Apache 配置文件添加到 /etc/apache2/conf-enabled/
目录中,在那里它会自动读取。
1sudo phpenmod mbstring
之后,重新启动 Apache,以便您的更改被识别:
1sudo systemctl restart apache2
phpMyAdmin 现在已安装和配置,但是,在您可以登录并开始与您的 MySQL 数据库进行交互之前,您需要确保您的 MySQL 用户具有与该程序进行交互所需的权限。
步骤 2 – 调整用户身份验证和特权
当您在您的服务器上安装 phpMyAdmin 时,它会自动创建一个名为phpmyadmin
的数据库用户,该用户会执行该程序的某些基本流程,而不是使用您在安装过程中设置的管理密码登录这个用户,建议您作为您的 root MySQL 用户或通过 phpMyAdmin 界面管理数据库的用户登录。
配置 MySQL 根帐户的密码访问
在运行MySQL 5.7(和更高版本)的Ubuntu系统中,MySQL用户默认使用auth_socket
插件进行身份验证,而不是使用密码,这在许多情况下允许更大的安全性和可用性,但当您需要允许外部程序(如phpMyAdmin)访问用户时,它也可以使事情复杂化。
为了登录 phpMyAdmin 作为您的 root MySQL 用户,您将需要将其身份验证方法从auth_socket
更改为mysql_native_password
,如果您尚未这样做。
1sudo mysql
接下来,用以下命令检查您的每个MySQL用户帐户使用哪种身份验证方法:
1SELECT user,authentication_string,plugin,host FROM mysql.user;
1[secondary_label Output]
2+------------------+-------------------------------------------+-----------------------+-----------+
3| user | authentication_string | plugin | host |
4+------------------+-------------------------------------------+-----------------------+-----------+
5| root | | auth_socket | localhost |
6| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
7| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
8| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
9| phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |
10+------------------+-------------------------------------------+-----------------------+-----------+
115 rows in set (0.00 sec)
在本示例中, root 用户实际上使用auth_socket
插件进行身份验证。 若要配置 root 帐户以使用密码进行身份验证,请运行以下命令ALTER USER
。
1ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
然后,运行FLUSH PRIVILEGES
,告诉服务器重新加载补贴表并实施新更改:
1FLUSH PRIVILEGES;
再次检查每个用户使用的身份验证方法,以确认 root 不再使用auth_socket
插件进行身份验证:
1SELECT user,authentication_string,plugin,host FROM mysql.user;
1[secondary_label Output]
2+------------------+-------------------------------------------+-----------------------+-----------+
3| user | authentication_string | plugin | host |
4+------------------+-------------------------------------------+-----------------------+-----------+
5| root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost |
6| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
7| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
8| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
9| phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |
10+------------------+-------------------------------------------+-----------------------+-----------+
115 rows in set (0.00 sec)
此输出表示 root 用户将使用密码进行身份验证,您现在可以作为您的 root 用户登录phpMyAdmin界面,使用您在这里设置的密码。
配置专用MySQL用户的密码访问
或者,有些人可能会发现,与专用用户连接到 phpMyAdmin 更适合他们的工作流程。
1sudo mysql
<$>[注] 注: 如果您已启用密码身份验证,如上一节所述,则需要使用不同的命令访问MySQL壳。
1mysql -u root -p
美元
从那里,创建一个新的用户,并给它一个强大的密码:
1CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
例如,您可以向数据库中的所有表授予用户权限,以及使用此命令添加、更改和删除用户权限的权限:
1GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
然后,输出 MySQL 壳:
1exit
您现在可以通过访问您的服务器的域名或公共 IP 地址来访问 Web 界面,然后是 /phpmyadmin
:
1http://your_domain_or_IP/phpmyadmin
登录到界面,无论是作为 root ,还是使用您刚刚配置的新用户名和密码。
当您登录时,您将被带到phpMyAdmin用户界面:
现在你可以连接和与phpMyAdmin进行交互,剩下的只是加强系统的安全性,以保护它免受攻击者攻击。
步骤 3 – 保护您的 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 . . .
添加此行后,保存并关闭文件. 如果您使用nano
来编辑文件,请按CTRL + X
,Y
,然后按ENTER
。
要执行所做的更改,请重新启动 Apache:
1sudo systemctl restart apache2
现在你已经启用了您的应用程序的.htaccess
使用,你需要创建一个.htaccess
文件,以实际实现一些安全性。
要做到这一点,必须在应用程序目录中创建文件,您可以创建必要的文件,并在您的文本编辑器中打开它,通过键入:
1sudo nano /usr/share/phpmyadmin/.htaccess
在此文件中,输入以下信息:
1[label /usr/share/phpmyadmin/.htaccess]
2AuthType Basic
3AuthName "Restricted Files"
4AuthUserFile /etc/phpmyadmin/.htpasswd
5Require valid-user
以下是每个线条的含义:
AuthType Basic
: 此行指定您正在实施的身份验证类型. 此类型将使用密码文件执行密码身份验证。AuthName
: 此设置了身份验证对话框的信息。 您应该保留此通用信息,以便未经授权的用户不会获取任何有关被保护的东西的信息。AuthUserFile
: 此设置了用于身份验证的密码文件的位置。 这应该在被服务的目录之外。 我们将很快创建此文件。Require valid-user
: 此规定只允许授权的用户访问此资源。
完成后,保存并关闭文件。
您为您的密码文件选择的位置是 /etc/phpmyadmin/.htpasswd
. 您现在可以创建此文件并通过 htpasswd
实用程序将其传递给初始用户:
1sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
您将被要求选择并确认您正在创建的用户的密码。
如果你想输入一个额外的用户,你需要这样做 没有 的-c
旗,如下:
1sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
现在,当您访问您的 phpMyAdmin 子目录时,您将被提示提供您刚刚配置的额外帐户名称和密码:
1https://domain_name_or_IP/phpmyadmin
输入 Apache 身份验证后,您将被带到常规的 phpMyAdmin 身份验证页面来输入您的 MySQL 凭据。
结论
您现在应该有phpMyAdmin配置并准备在您的Ubuntu 18.04服务器上使用。 使用这个界面,您可以轻松创建数据库,用户,表等,并执行通常的操作,如删除和修改结构和数据。