phpMyAdmin 安装配置教程及安全策略

A kitten
蒋川
B 端产品经理,卡拉云联合创始人
阅读时长 2 分钟

phpMyAdmin 安装配置教程及安全策略

phpMyAdmin 是 MySQL 的图形界面版管理软件,用户可通过图形界面轻松的控制 MySQL 数据库。本教程将详细讲解如何在服务器中安装 phpMySQL 管理软件及对它的安全配置。

如果你需要针对自己的工作流对数据库操作,定制开发,推荐一下卡拉云。卡拉云是新一代低代码开发工具,不仅可以完成 phpMyadmin 所有功能,还免安装部署,可一键接入包括 MySQL 在内的常见数据库及 API。无需繁琐的前端开发,只需要简单拖拽,即可快速搭建企业内部工具。数月的开发工作量,使用卡拉云后可缩减至数天,欢迎免费试用卡拉云详情见本文文末

先决条件

在跟随本教程学习前,你需要准备:

第一步:安装 phpMyAdmin

登录你的 Linux 服务器,更新 apt 列表

sudo apt update

接着我们来安装phpmyadmin软件包,除此之外,我们也根据官方文档还建议,在服务器上安装 PHP 扩展,以提高某些功能的性能。

如果你已经按照我们《如何搭建 PHP 开发环境(Apache+PHP+MySQL)配置安装教程》教程学习,那么其中几个模块已经安装,但还是建议安装以下这些扩展。

  • php-mbstring: 用于管理非 ASCII 字符串并将字符串转换为不同编码的模块
  • php-zip.zip: 支持上传 .zip 文件到phpMyAdmin
  • php-gd: 启用对GD 图形库的支持
  • php-json: 为 PHP 提供对 JSON 序列化的支持
  • php-curl: 允许 PHP 与使用不同协议的不同类型的服务器交互

运行这段代码,一篮子安装以上所有扩展:

sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

选择 Y 继续安装

install-phpmyadmin

使用空格键选中apache2,切记前面要有* 号显示才是选中,然后使用 Tab 键选择<ok>继续。

02-dbconfig-common.jpg

使用dbconfig-common建立数据库,选择 Yes

03-Validate-Password-plugin.jpg

特别提醒:假设你睡是按照《如何搭建 PHP 开发环境(Apache+PHP+MySQL)配置安装教程》安装了 MySQL ,你可能已经打开了Validate_Password_plugin认证插件。

这会导致安装 phpMyadmin 时触发以下错误:

04-abort.jpg

要解决此问题,请选择abort选项以停止安装过程。然后进入 MySQL:

sudo mysql

如果你的 root 用户是使用密码验证登录的话,可用这个命令登录:

mysql -u root -p

接着我们在 mysql> 里,禁用验证密码组件,仅仅是禁用,不是卸载,后面我们还会打开它。

UNINSTALL COMPONENT "file://component_validate_password";

执行成功之后,退出 MySQL:

exit

返回值:

mysql> UNINSTALL COMPONENT "file://component_validate_password";
Query OK, 0 rows affected (0.09 sec)

mysql> exit

然后我们继续安装phpmyadmin

sudo apt install phpmyadmin

安装 phpMyAdmin 成功后,我们再次进入 MySQL ,再次把刚刚关掉的验证密码组件打开:

sudo mysql
INSTALL COMPONENT "file://component_validate_password";

退出 MySQL:

exit

安装过程会将 phpMyAdmin Apache 配置文件添加到/etc/apache2/conf-enabled/目录中,然后自动读取该文件。

要完成配置 Apache 和 PHP 与 phpMyAdmin 一起使用,我们可以启用mbstring

sudo phpenmod mbstring

之后,重新启动 Apache 更改配置:

sudo systemctl restart apache2

至此,phpMyAdmin 已经安装完成,接着我们要确保 phpMyAdmin 有 MySQL 数据库读写权限。

第 2 步:设置 phpMyAdmin 登录账户及权限

在安装 phpMyAdmin 时,安装脚本会自动创建用户名为phpmyadmin 的 MySQL 账号,这个账号可执行某些底层进程。它的密码就是上文中安装过程中你输入的密码。我们暂时不使用这个账号。我们使用 root 账号来登录 phpMyAdmin。

1.为 root 帐户配置密码访问

在 MySQL 5.7 或更高版本中,root 账号使用auth_socket插件作为身份验证方式,而不是使用密码。在许多情况下它更安全和简便(不用输入长密码),但当外部程序访问 MySQL 时,有必须使用密码。

这时,我们要把auth_socket登录方式切换成使用密码登录:

sudo mysql

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

SELECT user,authentication_string,plugin,host FROM mysql.user;

05-authentication-string.png

如上图所示,我们可以看到 root 账号实际使用auth_socket插件进行了身份验证。要将root帐户配置为使用密码进行身份验证,可使用ALTER USER命令。password请使用「大写字母+小写字母+数字+符号」的强密码。

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '6Ysce*j7';

06-root.png

特别提示:上面的ALTER USER语句将root 账号认证方式改为caching_sha2_password

根据官方 MySQL 文档caching_sha2_password是 MySQL 的首选身份验证插件,因此它比早期版本中 mysql_native_password 使用更广泛。

但某些 PHP 版本可能与此认证方式不兼容,如果一会在连接 phpMyAdmin 时遇到错误,可将 root 账号身份验证方式改为mysql_native_password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '6Ysce*j7';

好,我们再次检查一下各账号的身份验证方式:

SELECT user,authentication_string,plugin,host FROM mysql.user;

从返回值可以看到,root 账号的身份认证方式已经改为caching_sha2_password

07-caching-sha2-password.png

2.为 phpMyAdmin 配置一个专用账号

某些工作场景中,我们更适合给 phpMyAdmin 配置一个专属账号,我们先登录 MySQL:

sudo mysql

如果你已经根据上文调整了 root 的密码,可用以下代码登录:

mysql -u root -p6Ysce*j7

我们创建一个新用户,使用强密码:

CREATE USER 'kalacloud'@'localhost' IDENTIFIED WITH caching_sha2_password BY '6Ysce*j7';

特别提示:同样,根据你安装的 PHP 版本,你可以选择mysql_native_password,而不是caching_sha2_password作为账号的验证方式(取决于你的 PHP 是否支持caching_sha2_password):

ALTER USER 'kalacloud'@'localhost' IDENTIFIED WITH mysql_native_password BY '6Ysce*j7';

然后,我们给kalacloud 足够的权限:

GRANT ALL PRIVILEGES ON *.* TO 'kalacloud'@'localhost' WITH GRANT OPTION;

之后,退出 MySQL:

exit

特别提示:经常有同学问「phpmyadmin用户名和密码在哪」,其实就是 MySQL 的账号。

现在,你可以通过你的服务器 IP 地址加上/phpmyadmin 来访问 phpmyadmin 了。

https://your_domain_or_IP/phpmyadmin

08-phpmyadmin.jpg

本教程在虚拟机上完成,所以浏览器中的 IP 地址是一个内网 IP。

特别提示:有关 phpmyadmin 访问时显示 404 错误

09-404.jpg

如果打开浏览器,网址没有输错,但显示 404 错误。说明在安装 phpmyadmin 时,你没有选中apache2,切记显示* 号才是选中。

10-404-apache2.jpg

你可以使用以下代码重新选择:

sudo dpkg-reconfigure phpmyadmin

现在,我们使用 root 或刚刚创建的专属账号登录:

11-phpMyAdmin.jpg

到这里,phpMyAdmin 已经可以使用了,接下来,我们来讲解如何加强系统安全,以避免被攻击。

第 3 步 - 保护你的 phpMyAdmin 实例

phpMyAdmin 使用非常广泛,这也导致它成为热门的攻击目标,所以我们应该格外小心。接下来,本教程将详细讲解如何使用 Apache 的内置.htaccess身份验证和授权功能保护 phpMyAdmin

首先,我们先编辑 phpmyadmin.conf 配置文件:

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

<Directory /usr/share/phpmyadmin>下面添加,AllowOverride All

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php AllowOverride All
    . . .

12-AllowOverride.jpg

保存退出编辑器,然后重启启动apache2,使配置生效:

sudo systemctl restart apache2

接着我们来创建一个.htaccess 文件

sudo nano /usr/share/phpmyadmin/.htaccess

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

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

复制粘贴进去,完成后,保存并关闭文件。

  • AuthType Basic:此行指定正在实施的身份验证类型。此类型将使用密码文件实现密码认证。
  • AuthName:设置身份验证对话框的消息。
  • AuthUserFile:设置用于身份验证的密码文件的位置。
  • Require valid-user:指定只有经过身份验证的用户才能访问此资源。这实际上是阻止未经授权的用户进入。

我们把密码存放在 /etc/phpmyadmin/.htpasswd 。现在我们来创建这个密码:

sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

输入两次密码,生产并保存密码文件。

如果你还想再建一个用户,切记要去掉-c-c 是创建密码文件,如果文件存在,那么内容会被请看重写。

sudo htpasswd /etc/phpmyadmin/.htpasswd kalacloud

最后,重启 Apache 使.htaccess身份验证生效:

sudo systemctl restart apache2

现在,当你访问 phpMyAdmin 目录时,系统会提示你输入刚刚配置的帐户名和密码:

https://domain_name_or_IP/phpmyadmin

13-htpasswd.jpg

现在我们给 phpMyAdmin 添加了多一层保护,可不要小看这一层保护,过滤掉非常多的安全隐患。

总结

现在我们已经完成 phpMyAdmin 的部署,phpMyAdmin 与本地 MySQL 软件非常类似,只能做较底层的数据库操作。对于「构建在数据库之上,做前端定制开发」的需求,并不适用。

这里推荐一下卡拉云,卡拉云是新一代低代码开发工具,免安装部署,可一键接入包括 MySQL 在内的常见数据库及 API。不仅可以完成 phpMyadmin 所有功能,还可根据自己的工作流,定制开发。无需繁琐的前端开发,只需要简单拖拽,即可快速搭建企业内部工具。数月的开发工作量,使用卡拉云后可缩减至数天,欢迎免费试用卡拉云

卡拉云接入的数据库

卡拉云可一键接入常见的数据库及 API

卡拉云 - 新一代低代码开发工具

下图为使用卡拉云在 5 分钟内搭建的「优惠券发放核销」后台,仅需要简单拖拽即可快速生成前端组件,只要会写 SQL,便可搭建一套趁手的数据库工具。欢迎免费试用卡拉云

优惠券信息

如果你还有什么疑问,欢迎一起讨论。我的微信 HiJiangChuan。更多数据库相关教程可访问 卡拉云 查看。

wechat-jiangchuan.jpg

有关 MySQL 教程,可继续拓展学习:

© 2021 卡拉云 Built with ❤️ in Beijing

京ICP备15049164号-9