在我的 CentOS 测试服务器上,有人更改了 MySQL root 密码。有什么方法可以查明谁在何时更改了密码?
答案1
首先,如果用户从远程计算机执行了“root”密码更改,并且未启用 MySQL 日志记录,则基本上不会有任何有价值的日志可供您访问,从而将用户与该特定操作联系起来。但假设用户是通过命令行会话登录的,您可以检查一些事项,这些事项可能会提供一些线索。
由于任何从命令行运行 MySQL 的用户都会自动.mysql_history
在其主目录中创建一个,因此您可以在系统上运行如下命令来查看它是否会阻碍任何事情:
grep -i -e "password" /home/*/.mysql_history
这将对每个用户的文件进行不区分大小写的搜索,.mysql_history
查找单词password
,假设他们通过在 MySQL 客户端本身中更改密码并使用客户端本身来更改密码。
但你也可以查看是否.bash_history
有人使用过 MySQL,然后可能将他们作为潜在嫌疑人
grep -i -e "mysql" /home/*/.bash_history
这将不区分大小写地通过每个用户的.bash_history
文件来查找单词mysql
,这意味着他们运行了(或试图运行)MySQL 从命令行连接的某些东西。
但这一切都假设相关用户没有删除或更改他们的.bash_history
文件.mysql_history
以掩盖他们的踪迹。如果他们足够了解并删除了这些历史文件,除非启用了 MySQL 日志记录,否则不太确定您是否可以跟踪他们。并且 MySQL 日志记录通常默认禁用,因为它会对系统产生负面性能影响。
尽管如此,如果这个 MySQL 设置启用了其他用户,那么可以假设有人被分配了一个用户,可能与“根”不同,但实际上被授予相同的权限级别为“root”。这意味着他们可以使用所谓的非“root”帐户来做任何他们想做的事情。
快速、宽松且不安全的 MySQL 授权非常普遍,通常由数据库管理员实施,无论出于何种原因,他们只需设置一个单独的“非 root”帐户,然后GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
在为新用户分配权限时使用。这个想法很糟糕,因为这GRANT ALL PRIVILEGES ON *.*
基本上意味着“让此用户在任何数据库上执行任何操作,就像他们是 root 用户一样。”