本文章旨在说明如何尽可能地加强MySQL数据库的安全性和隐私性。
免责声明:非专业人员请不要尝试在本文中的任何内容。
1、补丁安装
操作说明:满足业务正常运行的前提下,安装新版本,修补漏洞
检测方法:查看mysql 版本信息
mysql> SELECT VERSION(),
加固方法:安装最新版mysql, http://www.mysql.com
回退方法:安装新版本mysql 前备份原有版本mysql 和数据库文件,回退时恢复mysql 和数据库文件。
备注:升级新版本可能会影响现有业务的正常运行
2、 检查弱口令
操作说明:确保数据库不存在弱口令,提高数据库安全性
检测方法:
mysql>use mysql
mysql> select user,password from mysql.user;
+------+-------------------------------------------+
| user | password |
+------+-------------------------------------------+
| test | *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 |
+------+-------------------------------------------+
将密码hash 导入cain 软件破解,具体操作步骤见附录。
加固方法:
如要修改密码,执行如下命令:
首先以root 用户登录
mysql>use mysql
mysql>update user set password=password('复杂的新密码') where
user='test';
mysql> flush privileges;
回退方法:改回加固前的密码
mysql> update user set password=password('加固前密码') where
user='test';
mysql> flush privileges;
3、 检查匿名帐户
操作说明:确保数据库不存在匿名账户,提高数据库安全性
检测方法:检查匿名帐户是否存在
mysql>use mysql;
mysql> select user,password from mysql.user;
存在user 和password 字段均为空的行
加固方法:删除匿名帐户:
mysql>use mysql;
mysql>delete from user where user='';
mysql>flush privileges;
回退方法:不需要回退
4、 删除无关帐号
操作说明:如果与业务和数据库无关账号,应该删除
检测方法:检查数据库中的帐号
mysql>use mysql
mysql> select user from mysql.user;
加固方法:删除相关账号
mysql>use mysql
mysql>delete from user where user='账号';
mysql>flush privileges;
回退方法:
重新创建账号:
CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
重新赋予权限:
grant 权限1,权限2,…权限n on 数据库名称.表名称to 用户名@用户地址identified by ‘连接口令’;
5、 数据库授权
操作说明:合理设置用户权限,防止权限滥用
检测方法:查看用户权限:show grants for test@localhost;
加固方法:一般应用用户建议授予最小权限。
grant 权限1,权限2,…权限n on 数据库名称.表名称to 用户名@用户地址
例如:grant select,insert,delete on db.table to test@localhost;
回退方法:使用grant 命令,按照加固前的权限重新为用户授权
备注:可能影响应用
6、 文件安全
操作说明:合理设置数据库文件权限,防止否授权访问或篡改
检测方法:
确保重要的数据库文件没有任意可写权限或任意可读权限
检查是否有不恰当的授权文件:
# 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 权限
加固方法:保护数据库文件,授予恰当的权限:
#chmod 600 .mysql_history .bash_history
#chmod 600 *.MYD *.MYI *.frm
#chmod o-rw /etc/my.cnf
回退方法:使用chmod 命令,将文件权限改回加固前的设置
7、 日志审核
操作说明:合理设置日志审核,保证安全事件发生可查看日志记录
检测方法:查看my.cnf 或my.ini 文件,查看是否包含如下设置:
[mysqld]
log = filename
加固方法:在mysql 的安装目录下,打开my.cnf 或my.ini,在[mysqld]后面加上如下的参数,取消注释并配置日志文件,保存后重启mysql服务就行了。
#Enter a name for the binary log. Otherwise a default name will be
used.
#log-bin=
#Enter a name for the query log file. Otherwise a default name will
be used.
#log=
#Enter a name for the error log file. Otherwise a default name will
be used.
log-error=
#Enter a name for the update log file. Otherwise a default name will
be used.
#log-update=
回退方法:编辑my.cnf 或my.ini,删除如下加固时添加的日志配置。
备注:启用审核对系统性能略有影响
8、 运行帐号
操作说明: Mysqld 服务以普通用户运行,防止数据库高权限被利用
检测方法: 检查进程属主和运行参数是否包含--user=mysql 类似语句:
# ps -ef|grep mysqld
#grep -i user /etc/my.cnf
加固方法:vi 编辑/etc/my.cnf,设置如下:
[mysql.server]
user=mysql
回退方法:vi 编辑/etc/my.cnf,将设置改为加固前
9、 可信IP 地址访问控制
操作说明: 只允许可信任的ip 访问数据库,降低数据库风险
检测方法: 查看可访问数据库的ip 和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 地址';
mysql> flush privileges;
10、 连接数设置(可选)
操作说明: 根据业务需求设置数据库最大连接数
检测方法:
查看MySQL 配置文件:my.cnf 或者是my.ini
在[mysqld]段查看最大连接数配置:
max_connections = 1000
查看最大连接数
mysql> show variables like 'max_connections';
加固方法:
编辑MySQL 配置文件:my.cnf 或者是my.ini
在[mysqld]配置段添加:
max_connections = 1000
保存,重启MySQL 服务。
回退方法:
编辑MySQL 配置文件:my.cnf 或者是my.ini
在[mysqld]将max_connections 配置改回加固前的值
保存,重启MySQL 服务。
附录 Cain 使用方法
Microsoft 操作系统的密码恢复工具。 它允许通过嗅探轻松恢复各种密码
下载地址:https://github.com/xchwarze/Cain
(1)运行Cain.exe安装并运行Cain
(2)添加密码hash
(3)在添加的条目上点击鼠标右键,选择破解方式
(4)添加字典文件pass.txt
(4)点击Start 按钮开始破解,成功后如下图所示
版权归原作者 Chown-Root-Scan 所有, 如有侵权,请联系我们删除。