前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 18.04上安装和保护phpMyAdmin

如何在Ubuntu 18.04上安装和保护phpMyAdmin

原创
作者头像
新巴子
修改2018-07-30 11:09:56
1.4K0
修改2018-07-30 11:09:56
举报

介绍

phpMyAdmin让用户可以通过Web界面与MySQL进行交互。在本教程中,我们将讨论如何安装和保护phpMyAdmin,以便您可以安全地使用它来管理Ubuntu 18.04系统上的数据库。

准备

在开始使用本指南之前,您需要完成一些基本步骤。

首先,我们假设您的服务器是具有sudo权限的非root用户并配置了ufw的防火墙。我们还假设您已经在Ubuntu 18.04服务器上完成了LAMP(Linux,Apache,MySQL和PHP)安装,不会安装的用户可以参考腾讯云社区Ubuntu配置LAMP环境的安装教程。

最后,使用phpMyAdmin这样的软件时有一些重要的安全注意事项,因为它:

  • 直接与MySQL安装通信
  • 使用MySQL凭据处理身份验证
  • 执行并返回任意SQL查询的结果

因为phpMyAdmin是一个广泛部署的PHP应用程序,经常被作为攻击目标,所以不应该通过普通的HTTP连接在远程系统上运行phpMyAdmin。

完成这些步骤后,您就可以开始使用本指南了。

第1步 - 安装phpMyAdmin

首先,我们将从默认的Ubuntu存储库安装phpMyAdmin。

这是通过更新服务器的软件包索引,然后使用apt打包系统下拉文件并将其安装在您的系统上来完成的:

代码语言:txt
复制
$ sudo apt update
$ sudo apt install phpmyadmin php-mbstring php-gettext

警告:提示中的“Apache2”只是被高亮了,而没有被选中。如果您没有按下SPACE选择Apache,安装程序将不会在安装期间移动必要的文件。点击SPACETAB然后ENTER选择Apache。

  • 对于服务器选择,请选择 apache2
  • 是否使用dbconfig-common建立数据库,选择Yes
  • 然后,系统会要求您选择并确认phpMyAdmin的MySQL应用程序密码

安装过程将phpMyAdmin Apache配置文件添加到/etc/apache2/conf-enabled/目录中,并自动读取该文件。您需要做的唯一事情是启用mbstringPHP扩展,您可以通过键入以下内容来执行:

代码语言:txt
复制
$ sudo phpenmod mbstring

然后,重新启动Apache以便识别您的更改:

代码语言:txt
复制
$ sudo systemctl restart apache2

phpMyAdmin现已安装并配置完毕。但是,在您登录并开始与MySQL数据库交互之前,您需要确保您的MySQL用户具有与程序交互所需的权限。

第2步 - 调整用户身份验证和权限

当您将phpMyAdmin安装到服务器上时,它会自动创建一个数据库用户phpmyadmin,该用户会执行该程序的基础进程。不要使用您在安装期间设置的管理密码登录,而是建议您以root用户身份或专用于通过phpMyAdmin界面管理数据库的用户身份登录。

配置MySQL Root帐户的密码访问权限

在运行MySQL 5.7(及更高版本)的Ubuntu系统中,MySQL的root用户设置为auth_socket默认使用插件进行身份验证。在许多情况下,这保证了更高的安全性和可用性,但是当您需要允许外部程序(如phpMyAdmin)访问用户时,这会令过程变得复杂。

要以root用户身份登录phpMyAdmin,您需要将其身份验证方法切换为auth_socketmysql_native_password。打开MySQL:

代码语言:txt
复制
$ sudo mysql

接下来,使用以下命令检查每个MySQL用户帐户使用的身份验证方法:

代码语言:txt
复制
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
代码语言:txt
复制
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

在此示例中,您可以看到root用户确实使用auth_socket插件进行身份验证。要配置root帐户以使用密码进行身份验证,请运行以下ALTER USER命令。请务必更改password为您选择的强密码:

代码语言:txt
复制
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

然后,运行FLUSH PRIVILEGES告诉服务器重新加载授权表并使您的新更改生效:

代码语言:txt
复制
mysql> FLUSH PRIVILEGES;

再次检查每个用户使用的身份验证方法,以确认root用户不再使用该auth_socket插件进行身份验证:

代码语言:txt
复制
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
代码语言:txt
复制
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

您可以从此输出中看到root用户将使用密码进行身份验证。您现在可以使用您在此处为其设置的密码以root用户身份登录phpMyAdmin界面。

配置专用MySQL用户的密码访问权限

或者,使用专用用户连接到phpMyAdmin。为此,再次打开MySQL shell:

代码语言:txt
复制
$ sudo mysql

注意:如果启用了密码身份验证,如上一节所述,则需要使用其他命令来访问MySQL shell。以下将使用常规用户权限运行您的MySQL客户端,并且您只能通过身份验证获得数据库中的管理员权限:

代码语言:txt
复制
$ mysql -u root -p

创建一个新用户并设置一个复杂的密码:

代码语言:txt
复制
mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

然后,为您的新用户授予适当的权限。例如,您可以使用以下命令向用户授予数据库中所有表的权限,以及添加,更改和删除用户权限的权限:

代码语言:txt
复制
mysql> GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

然后,退出MySQL shell:

代码语言:txt
复制
mysql> exit

您现在可以通过访问服务器的域名/phpmyadmin或公共IP地址来访问Web界面,然后执行以下操作:

代码语言:txt
复制
https://your_domain_or_IP/phpmyadmin
phpmyadmin 登陆界面
phpmyadmin 登陆界面

root身份或使用刚刚配置的新用户名和密码登录界面。

登录时,您将看到:

phpmyadmin 管理页面
phpmyadmin 管理页面

既然您已经能够与phpMyAdmin进行连接和交互,那么剩下要做的就是强化您的系统安全性以保护其免受攻击者的攻击。

第3步 - 保护您的phpMyAdmin实例

phpMyAdmin是攻击者的热门目标,你应该格外小心以防止未经授权的访问。最简单的方法之一是使用Apache的内置.htaccess身份验证和授权功能将网关放在整个应用程序的前面。

为此,您必须首先通过编辑Apache配置文件来启用.htaccess文件的覆盖和使用。

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

代码语言:txt
复制
$ sudo nano /etc/apache2/conf-available/phpmyadmin.conf

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

/etc/apache2/conf-available/phpmyadmin.conf

代码语言:txt
复制
<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

添加此行后,保存并关闭该文件,要实现您所做的更改,请重新启动Apache:

代码语言:txt
复制
$ sudo systemctl restart apache2

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

为了使其成功,必须在应用程序目录中创建该文件。您可以通过键入以下内容创建必要的文件并使用root权限在文本编辑器中打开它

代码语言:txt
复制
$ sudo nano /usr/share/phpmyadmin/.htaccess

在此文件中,输入以下信息:

/usr/share/phpmyadmin/.htaccess

代码语言:txt
复制
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

以下是每条线的含义:

  • AuthType Basic:此行指定要实现的身份验证类型。此类型将使用密码文件实现身份验证。
  • AuthName:这将设置身份验证对话框的消息。您应该保持这种通用性,以便未经授权的用户不会获得有关受保护内容的任何信息。
  • AuthUserFile:这将设置用于身份验证的密码文件的位置。
  • Require valid-user:这指定为经过身份验证的用户授予对此资源的访问权限。这实际上阻止了未经授权的用户进入。

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

您为密码文件选择的位置是/etc/phpmyadmin/.htpasswd。您现在可以创建此文件并使用htpasswd传递初始用户:

代码语言:txt
复制
$ sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

系统将提示您为正在创建的用户选择并确认密码。然后,使用您输入的散列密码创建文件。

如果要输入其他用户,则需要去除-c标志并执行此操作,如下所示:

代码语言:txt
复制
$ sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

现在,当您访问phpMyAdmin子目录时,系统将提示您输入刚刚配置的其他帐户名和密码:

代码语言:txt
复制
https://domain_name_or_IP/phpmyadmin

进入Apache身份验证后,您将进入常规的phpMyAdmin身份验证页面以输入您的MySQL凭据。此设置添加了额外的安全层,因为phpMyAdmin过去曾遭受过漏洞攻击。

结论

您现在应该已经配置了phpMyAdmin并准备好在您的Ubuntu 18.04服务器上使用。使用此界面,您可以轻松创建数据库,用户,表等。并执行常规操作,如删除和修改结构和数据。如果使用的CentOS系统安装phpMyAdmin,可以参考腾讯云的安装教程


参考文献:《How To Install and Secure phpMyAdmin on Ubuntu 18.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第1步 - 安装phpMyAdmin
  • 第2步 - 调整用户身份验证和权限
    • 配置MySQL Root帐户的密码访问权限
      • 配置专用MySQL用户的密码访问权限
      • 第3步 - 保护您的phpMyAdmin实例
      • 结论
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档