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


    前言

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

    修改root密码

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

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

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

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

    产生疑问

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

    # 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    居然是一个包含了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用户,你就掌控了操作系统的一切
    ==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

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

  • 相关阅读:
    c语言练习42:判断回文数
    嵌入式驱动学习第一周——内核的中断机制
    盘点近年来面试常见的spring面试真题
    【pytorch】目标检测:一文搞懂如何利用kaggle训练yolov5模型
    知识储备--基础算法篇-链表
    # LoongArch 内存模型与栅障
    具有用于外部阻断 FET 的驱动器TPS259240DRCR
    国内最受欢迎的电商API接口调用京东商品详情数据
    【硬核攻略】SQL Server全接触:手把手教你驾驭数据库巨轮,驶向高效查询的星辰大海!
    解决Vue前后端跨域问题的多种方式
  • 原文地址:https://blog.csdn.net/shihengzhen101/article/details/133655454