当前位置:   article > 正文

【安全加固】MySQL数据库安全加固_mysql 检查是否存在空密码

mysql 检查是否存在空密码

MySQL数据库安全加固

1、空密码与有效期

(1)检查空密码语句:SELECT user, host FROM mysql.user WHERE password=''; 该语句将会列出所有密码为空的账户和对应的主机地址。
(2)检查账户的有效期:SELECT user, host, account_locked FROM mysql.user WHERE DATE_SUB(NOW(), INTERVAL 180 DAY) > password_last_changed;
该语句将列出那些密码时间超过180天并且账户没有被锁定的账户以及对应的主机地址。可以根据实际情况修改时间间隔。如果account_locked的值为Y,则说明该账户已经被锁定。

2、检查弱口令

确保数据库不存在弱口令,提高数据库安全性
检测方法:

mysql>use mysql
mysql> select user,password from mysql.user;

  • 1
  • 2
  • 3

加固方法:
,执行以下命令修改密码(使用root 用户登录):
mysql>use mysql;
mysql>update user set password=password('复杂的新密码') where user='root';
mysql> flush privileges;

3、 检查匿名帐户

检测方法:检查匿名帐户是否存在

mysql>use mysql;
mysql> select user,password from mysql.user;

  • 1
  • 2
  • 3

存在user 和password 字段均为空的行
加固方法:删除匿名帐户

mysql>use mysql;
mysql>delete from user where user='';
mysql>flush privileges;

  • 1
  • 2
  • 3
  • 4

4、 删除无关帐号

如果与业务和数据库无关账号,应该删除该账号
检测方法:检查数据库中的帐号

mysql>use mysql
mysql> SELECT user, host FROM mysql.user;

  • 1
  • 2
  • 3

加固方法:删除相关账号

mysql>use mysql
mysql>DROP USER 'username'@'host';
mysql>flush privileges;
其中,'username'和'host'分别是要删除的用户名和主机名。

  • 1
  • 2
  • 3
  • 4
  • 5

5、 登录失败和连接超时

(1)登录数据库安装两个插件即可

  1. install plugin CONNECTION_CONTROL soname ‘connection_control.so’;
  2. install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname ‘connection_control.so’;

(2)查看安装的两个插件:show plugins;
(3)修改配置文件增加如下两行配置:vim /etc/my.cnf

connection-control-failed-connections-threshold=5   
登陆失败次数限制

  • 1
  • 2
  • 3
connection-control-min-connection-delay=1800000    
限制重试时间,此处为毫秒,注意按需求换算

  • 1
  • 2
  • 3

(4)查看配置是否生效

show global variables like 'interactive_timeout';
show global variables like 'wait_timeout';

  • 1
  • 2
  • 3

6、可信IP 地址访问控制

如非业务需要应该禁止远程登录或者禁止以root用户登录mysql。
查看可访问数据库的ip和账号
mysql> select user,host from mysql.user;
加固方法:
mysql>GRANT ALL PRIVILEGES ON *.* TO '可信任用户'@'可信任ip 地址' IDENTIFIED BY '可信用户密码' WITH GRANT OPTION;
回退方法:删除可信任ip
mysql> delete from user where host='ip 地址';

7、禁用local-infile选项

禁用local_infile选项会降低攻击者通过SQL注入漏洞读取敏感文件的能力(禁止mysql对本地文件存取)。执行如下SQL语句:

show variables like 'local_infile';

  • 1
  • 2

若返回结果不为OFF,则在/etc/my.cnf配置文件中修改:local_infile = 0

8、修改默认端口

在/etc/my.cnf配置文件中修改:port = 3306

9、限制root用户只能在本地登录

步骤操作如下:
(1)修改MySQL配置文件my.cnf,在[mysqld]节点下添加如下代码:

skip-networking
bind-address = 127.0.0.1

  • 1
  • 2
  • 3

(2)重启MySQL服务,使配置文件生效。
(3)进入MySQL客户端,使用root用户登录:mysql -u root -p
(4)修改root用户的访问权限,使其只能在本地登录:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

FLUSH PRIVILEGES;

  • 1
  • 2
  • 3
  • 4

(5)启用MySQL查询日志(可选),以便查看root用户的登录情况:

SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'TABLE';

  • 1
  • 2
  • 3

10、删除test库

DROP DATABASE test;

  • 1
  • 2

11、文件安全

合理设置数据库文件权限,防止否授权访问或篡改。确保重要的数据库文件没有任意可写权限或任意可读权限,检查是否有不恰当的授权文件。
检测方法:

ls -al .mysql_history .bash_history #应为600 权限
ls –al /etc/my.cnf 	#应为644 权限
find / -name .MYD |xargs ls –al  #应为600 权限
find / -name .MYI |xargs ls –al  #应为600 权限
find / -name .frm |xargs ls –al  #应为600 权限

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

加固方法:保护数据库文件,授予恰当的权限:

(1)chmod 600 .mysql_history .bash_history
(2)chmod 600 *.MYD *.MYI *.frm
(3)chmod o-rw /etc/my.cnf

  • 1
  • 2
  • 3
  • 4

回退方法:使用chmod 命令,将文件权限改回加固前的设置。

12、运行帐号

Mysqld 服务以普通用户运行,防止数据库高权限被利用。
检测方法: 检查进程属主和运行参数是否包含–user=mysql 类似语句:

ps -ef|grep mysqld
grep -i user /etc/my.cnf

  • 1
  • 2
  • 3

加固方法:vi 编辑/etc/my.cnf,设置如下:

[mysql.server]
user=mysql

  • 1
  • 2
  • 3

回退方法:vi 编辑/etc/my.cnf,将设置改为加固前

13、更改默认mysql管理员账号

用root身份登入进入mysql库修改user表即可。
操作如下:

use mysql;
mysql>update user set user='newName' where user='root';
mysql>flushprivileges;

  • 1
  • 2
  • 3
  • 4

14、配置通用查询日志

1、mysql默认是关闭通用日志的,可以用show variables like'%general%';查看当前状态。
2、打开MySQL配置文件my.cnf,一般在/etc/mysql/my.cnf或/etc/my.cnf路径下。在[mysqld]下添加以下配置:

log=/var/log/mysql/mysql.log
general_log=1
general_log_file=/var/log/mysql/mysql-query.log
这里指定了两个日志文件,一个是默认的MySQL日志文件,一个是通用查询日志文件。开启通用日志,防止事件无法追溯。
查询日志文件/var/log/mysql/mysql-query.log,可以看到所有的查询语句记录。注意,该日志文件可能会很大,需要定期清理和压缩。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

15、设置最大连接数

可以在 MySQL 的配置文件中设置最大连接数,配置文件通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf,具体位置根据系统和安装方式而定。在配置文件中找到 [mysqld] 或 [mysql] 段,加入如下参数:

max_connections = 100
这里将最大连接数设置为 100,可以根据实际情况进行调整。

  • 1
  • 2
  • 3

修改最大连接数都要考虑到服务器硬件资源和应用程序的实际情况,设置过高可能会导致服务器宕机或应用程序崩溃。

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/928244
推荐阅读
相关标签