linux环境下如果掌控了系统root账户就能对上面安装的MySQL数据为所欲为了吗

前言

根据我目前测试的情况来看,这个问题的答案是【确实可以为所欲为】,事情的起因是这样的,一次偶然的机会我发现Ubuntu20.04系统上通过 sudo apt install mysql-server 命令安装的MySQL服务器,使用root账号登录无论输入什么密码都可以成功进入,多次尝试后才知道原来root用户默认没有密码,这可是让我惊呆了,居然还可以这样,为了服务器的安全,我必须给他设置个密码,在不断尝试的过程中引发了标题中的疑问。

修改root密码

修改MySQL用户root密码在网络上充斥着各种各样的版本,最常见的这种在MySQL8.0中已经不生效了,错误示例如下:

1
UPDATE user SET authentication_string = PASSWORD('iL1jfLqUSfmTECXRi4nO') WHERE User = 'root';

目前测试在MySQL8.0版本中可行的设置root密码的方式为:

1
2
3
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'iL1jfLqUSfmTECXRi4nO';
FLUSH PRIVILEGES;

产生疑问

root用户的密码是设置好了,这么长的密码估计破解个几年也破解不开,但是我发现安装完毕提示了这样一样配置文件 /etc/mysql/debian.cnf,打开文件内容展示如下:

1
2
3
4
5
6
7
8
9
10
11
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = xg9vyvjNly3vUSsm
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = xg9vyvjNly3vUSsm
socket = /var/run/mysqld/mysqld.sock

居然是一个包含了MySQL用户和密码的未加密的文本文件,这不是在大门口的脚垫底下放上了大门的钥匙吗?关键这个debian-sys-maint虽然设计上是用于数据库维护和管理,但权限上与root几乎相同,通常在 Debian 或基于 Debian 的 Linux 发行版比如Ununtu上安装MySQL就会自动生成这个文件,看起来有点不安全啊?

于是查了相关的处理方法,都说要控制这个文件的权限,只让系统root用户可以访问它,这时我就产生了疑问,这样做安全吗?如果系统root用户被窃取了呢?那是不是完全可以通过这个文件来操控MySQL数据了,答案是很显然的。

渐渐明白

虽然说掌握了root用户就可以任意修改MySQL数据让人难以接受,但是换个角度或许就可以释然了,root可是系统里的上帝啊,控制了root用户可以任意执行 rm -rf /*,如果你知道银行卡密码当然就可以从取款机里取钱,对于操作系统也是一样,既然你是root你就掌控了这个系统里的一切。

即便没有这个/etc/mysql/debian.cnf文件,root用户还可以先关闭MySQL服务,然后通过 sudo mysqld_safe --skip-grant-tables &以跳过授权表的方式启动MySQL,此时允许你在不知道密码的情况下以 root 身份登录 MySQL,这还有什么隐私可言。再换种方式,作为root用户的我从磁盘上把MySQL存储的文件拿到其他MySQL服务器上都是可以的,所以你是防不住root上帝的。

所以刚刚那个【大门口的脚垫底下放上了大门的钥匙】的比喻不太恰当,应该是/etc/mysql/debian.cnf就像屋里的桌子上摆着的保险柜的钥匙,而你要保证大门的钥匙(root密码)不要轻易被人搞到手,像 --skip-grant-tables 这种看起来很像是后门,或者叫应急开关,实际上它的设计就是为了提供一种紧急的修复机制,用于在丧失所有密码或无法登录到 MySQL 数据库时进行数据库恢复和修复,比如紧急恢复、密码重置、修复数据库权限等等

这种设计就像是各司其职,我只负责我数据的管理与权限的分配,而用户需要保证系统很牢固,一旦你的系统被攻破我将束手就擒,做的再多也是徒劳。

总结

  • MySQL8.0修改密码的方式ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxx';
  • 文件/etc/mysql/debian.cnf是Debian系列系统上安装MySQL时自动生成的,其中的用户用于用于数据库维护和管理
  • 如果忘了MySQL中root用户的密码可以通过 sudo mysqld_safe --skip-grant-tables & 启动服务来进行免密登录
  • 控制了系统的root用户,你就掌控了操作系统的一切
==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

假期归来又看了很多,也不安分了许多,或许只有通过打破常规才能获得额外的收益,否则只能是一直保持饿不死的状态

2023-10-7 20:47:41

Albert Shi wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客