yzdily / yzdily.github.io

20 stars 1 forks source link

第三章 数据库基础之数据安全加固 #19

Open yzdily opened 3 years ago

yzdily commented 3 years ago

WEB安全-数据库安全加固

**1. MySQL加固

  1. Oracle加固
  2. SQLserver加固
  3. 相关案例
  4. 产品体系** 数据库主要安全威胁: 数据被篡改、窃取 用户身份被伪造、密码被盗用 未经授权对表、列、行的存取 缺乏有效的跟踪、监控机制 数据库加固基本原则: 最小权限运行 最小组件运行 访问限制 口令限制 日志记录 数据备份 补丁安装

数据库基本安全技术 安全风险 解决方法 安全技术 未验证用户 确认用户身份 帐户认证 未授权的数据存取 限制数据存取 访问控制 加密存储数据 存储数据加密 限制权限 权限管理 网络数据侦听、窃取 保护网络 网络加密 数据破坏 备份恢复 数据库备份 账号密码脆弱 强制密码安全 密码规则 缺乏跟踪 监控用户的行为 安全审计 系统入侵 加密敏感数据 存储数据加密技术 及时修补安全漏洞 安全补丁

1.MySQL加固

1.补丁安装 检查方法: 查看mysql版本信息mysql> SELECT VERSION(); 加固方法 安装前先备份所有数据库数据 对照官方安全通告,安装对应的补丁 回退方法 安装旧版本数据库 恢复数据 2.检查弱口令 检查方法: mysql>use mysql mysql> select user,password from mysql.user; 加固方法: 如要修改密码,执行如下命令:首先以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 dvwa; mysql> select user from users; 加固方法 删除相关账号 mysql>use dvwa; mysql>delete from users where user='账号'; mysql>flush privileges; 回退方法 重新创建账号: CREATE USER user [IDENTIFIED BY [PASSWORD] 'password'] 重新赋予权限: grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用 户名@用户地址 identified by ‘连接口令’; 5.合理设置数据库文件权限 检查方法 确保重要的数据库文件没有任意可写权限或任意可读权 限检查是否有不恰当的授权文件: ls -al .mysql_history 应为600权限(在用 户家目录下) ls –al /etc/my.cnf 应为644权限 find / -name .MYD |xargs ls –al 应为660权限 find / -name .MYI |xargs ls –al 应为660权限 find / -name .frm |xargs ls –al 应为660权限 加固方法 保护数据库文件,授予恰当的权限: chmod 600 .mysql_history chmod 640 .MYD .MYI *.frm 回退方法 使用chmod修改为原来的权限 6.日志 加固方法 vim /etc/my.cnf

注意运行mysql的用户要对mysqllog目录具有写权限

[mysqld] log-err=/tmp/mysqllog/error log=/tmp/mysqllog/log log-bin=/tmp/mysqllog/bin log-update=/tmp/mysqllog/update 7.Mysqld服务以普通用户运行 检查方法 检查进程属主和运行参数是否包含--user=mysql类似语句: ps -ef|grep mysqld grep -i user /etc/my.cnf 加固方法 vi编辑/etc/my.cnf,设置如下: [mysql.server] user=mysq 8.只允许可信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; 9.Mysql监听端口 检查方法 检查MySQL服务的启动参数和配置文件中是否包含-- bind-address参数: ps -ef|grep mysqld grep -i bind-address /etc/my.cnf 加固方法 修改/etc/my.cnf,设置bind-address为本地环回地址 (127.0.0.1),如下: [mysqld] bind-address=127.0.0.1 port=3306 10.Mysql禁止读取文件 检查方法 检查是否在/etc/my.cnf中设置: [mysqld] secure-file-priv = "" 加固方法 编辑/etc/my.cnf,添加配置项 [mysqld] secure-file-priv = "“ 回退方法 还原配置文件 11.最小权限 检查方法 检查mysql库中的,以下表 user db host tables_priv columns_priv 等等中的设置,做到权限最小化(能在创建账户的时候做好权限控制是最好的)