数据库安全检查与加固
1.mysql数据库安全管理
禁止MySQL已管理元的身份账号权限运行
1
2
3
4用普通账户运行mysqld
加固方法:
MySQL my.cnf配置文件中配置user=mysql设置root用户名口令并修改登录名,且不存在空密码账号
1
2
3
4
5
6
7
8
9
10
11
12
13
141.ccess MySQL控制台: mysql -u root -p
在控制台中执行:
set password for 'root'@'localhost' = password('new_password')
为了改进root的安全性,可以改名
use mysql;
update user set user="another_username" where user="root";
flush privileges;
然后就可以用新用户名访问
mysql -u another_username -p
2.对于空密码账号
set password for <user>@'<host>' = password('<clear password>')
select * from mysql.user where user ="";配置合适的密码强度,最常使用期限小于90天
1
2
3
4
5
6
7
8
9
10
11密码特征,长度,大小写,长度,字符集
添加配置到全局配置
plugin-load=validate_password.so
validate_password_length=14
validate_password_mixed_case_count=1
validate_password_number_count=1
validate_password_special_char_count=1
validate_passwordpolicy=MEDIUM
使用期限小于等于90天
配置rdbms:
set global default_password_lifetime=90降低用户的数据库特权,只有管理员有完整的数据库访问权限
1
2
3
4
5
6
7
8
9mysql.user和mysql.db表
使用revoke语句来删除权限
MySQL.user中权限:
file_priv:表示是否运行用户读取数据库所在主机的本地文件;
Process:表示是否运行用户查询所有用户的命令执行信息;
Super_priv:表示用户是否有设置全局变量、管理员调试等高级权限;
Shutdown_priv:表示用户是否可以关闭数据库;
Create_user_priv:表示用户是否可以创建或者删除其他用户;
Grant_priv:表示用户是否可以修改其他用户权限;禁止或限制远程访问,确保特定主机才有访问特权
1
2
3
4
5
6
7
8
9打开主句对数据库的访问:
grant all on *.* to 'root'@'% ';
这是完全开放了对root 的访问,需要对特定主机ip进行限制
grant all on *.* to 'root'@'localhost';
grant all on *.* to 'root'@'myip.athome';
flush privileges;
有限许可访问:
grant select,insert on mydb.* to 'someuser'@'somehost';
someuser换成用户名,somehost换成主机配置MYSQL日志便于审计
1
2
3
4
5
6
7
8
9
10日志默认会用主机名+.err命名的文件
配置
log_error=/mydata/data/mysql.test.com.err 指定错误日志信息,默认在数据库目录下,该位置必须有写的权限
log_warning ={0|1}#默认开启,服务器运行中的警告日志也在其中
查询日志
log={ON|OFF} 是否开启查询日志,在MySQL5.6已经废弃
general_log ={ON|OFF} 启动或关闭查询日志,默认关闭
general_log_file = /mydata/data/mysql.log 指定查询日志的位置
log_output = {TABLE|FILE|NONE}指定存放日志位置的位置,文件或者表删除测试安装的test数据库
1
2
3
4
5
6
7DROP DATABASE "test"
8. Mysqld启动禁用“--skip-grant-tables”
~~~markdown
skip-grant-tables导致不适用权限系统的情况下启动,不启动grant-tables授权表,忘记管理员密码可以用到
配置文件中skip-grant-tables设置为FALSE,并且启动参数不包含--skip-grant-tables数据库位于非系统区
1
2
3
4
5
6
7
8系统分区:通常用于主句系统、应用程序操作
非系统分区:用于存储数据
MySQL数据库的挂在点不应该为:root('/'),var,/usr
为MySQL选择非系统分区的新位置
停止mysqld: service mysql stop
执行命令复制数据: cp-rp <datadir> <新位置>
启动 service mysql start
2.Oracle管理用户安全性
1 | 创建用户 create user test1 identified by test1; |
概要文件
1 | 用户限制数据库使用和实例资源的一组指定资源限制的条件,并管理账户状态和口令管理规则。 |
口令复杂验证
1 | password_verify function 指定一个pl/sql函数,便于分配口令之前执行复杂度检查 |
取消概要文件的限制
1 | 取消密码管理 |
自建概要文件
3.Redis未授权访问漏洞
数据库持久,key-value ,list,set,zset,hash,数据备份
漏洞原理(18)
1 | 未开启认证或采用相关策略 |
1 | ssh-keygen -t rsa 本地生成公私密钥 |
redis安全检测
1 | 1.ps -aux|grep redis 是否root运行 |
加固
漏洞解决方法
1 | 升级程序,补丁 |