最近一个多月,朋友苍何哥全身心投入到「开源项目」中,其中踩了很多的坑,今天分享的是「数据库被勒索」的经历,希望大家足够重视数据库的安全防护。
因为是开源项目嘛,为了控制成本,数据库使用的是阿里云 1 核 2G 的 ECS 服务器自己搭建的。
想着还在测试阶段,密码干脆就设置的比较简单,没错,就是 123456 😂。并且怎么简单怎么来,用的 docker 快速就搭建了,并没有设置好权限。
搭建好后过了一晚,一直在重启,看了下日志,以为是内存不足导致,又给 MySQL 加了「内存限制和内存保留」。
过了一天又发现,还是重启,且数据都不见了,查了下数据库,只有这一张表,且看了下要我支付 「5825.97」 元,直接就给我整无语了。
勒索信息于是用 AI 查了下,发现原来是被黑客勒索了,一直关注开发,对运维、安全和备份确实有失关注了,还好只是测试数据,于是针对于此,做了很多数据库安全加固,给大家做个分享。
原先的 root 密码是:123456,现在需要更复杂才行,由于是跑在 docker 中,启动命令设置强密码。密码尽量包含大小写及特殊字符,特别是对于线上环境,一定要把 root 密码设置的复杂些。
有经验的开发人员,项目部署到正式环境,会把 Mysql 数据库的默认端口「替换成不常见的端口」,例如:33706
docker run -p 33706:3306 --name mysql \
-v /home/mysql/log:/var/log/mysql \
-v /home/mysql/data:/var/lib/mysql \
--memory 1.5g \
--restart=always \
-e MYSQL_ROOT_PASSWORD=填密码 -d mysql:5.7
原先应用服务器端口要删除 3306 端口,并增加 33706 端口,安全组设置如下:
安全组设置并关闭关闭应用服务器防火墙端口:
sudo ufw delete allow 3306/tcp
开启防火墙
开启数据库服务器33706 端口:
sudo ufw enable
ufw allow 80/tcp
ufw allow 22/tcp
ufw allow 33706/tcp
一般不适用 root 用户来随意操作数据库,需要单独「新建一个用户」来操作,特别是开放远程连接,一定不能是 root 用户。
先用 docker logs mysql,看下日志,看下有没有启动报错,然后进入容器直接看:
查看权限默认 root 用户有最高权限:
默认root权限新增一个开发用户,并设置相应权限:
#切换到mysql库,mysql库里存放着user表
use mysql;
#查看user表现有
select host,user password from user;
#创建开发阶段所需临时用户:dev_laigeoffer,自定义密码,尽量复杂化
create user 'dev_laigeoffer'@'%' identified by '设置密码';
#如果密码设置错了还可以修改
ALTER USER 'dev_laigeoffer'@'%' IDENTIFIED BY '更改密码';
#给开发用户分配访问权限,暂时允许任何主机连接,授权用户除了将权限授予其他账户的能力
GRANT ALL PRIVILEGES ON *.* TO 'dev_laigeoffer'@'%';
# 修改后刷新权限
flush privileges;
#退出mysql数据库
exit;
mysql -u dev_laigeoffer -p
本地用 navicate 连接,
连接成功我被黑的 Mysql 数据库是和应用服务器(代码打包后部署的服务器)安装在一起的(为了省钱😂),为了安全正式环境应该「把数据库单独放一台服务器」,只允许让应用服务器IP来访问数据库服务器,通过独立两者,就算其中一台发生问题,另一台也是好的,进一步「降低了危险性」。
于是买了个新的小内存的服务器专门用来做数据库。开源不易啊,等项目上线,「还望大家多多支持」。
另外对于数据库,「最好不要用 docker 安装」,硬是要 docker,也一定要做好「磁盘挂载」才行,否则 docker 挂了,数据都不见了,磁盘挂载还可以把数据放在磁盘上永久保存。
可以定时的备份数据库,开发定时备份功能,每天晚上备份一下数据库,如果没有备份服务器,可以把备份数据存在应用服务器上。
我用的是阿里云自带的「云盘快照」解决:
云盘快照观察下服务器是否存在异常进程占用过多的服务器资源,可以参考这个文档做下操作系统加固:另外安全组不要放行不必要的端口,修改安全组规则。
总之还是那句忠告:不要觉得攻击不会发生在自己身上,安全防护意识很重要。
👇🏻 点击下方阅读原文,获取鱼皮往期编程干货。
往期推荐
我的新项目又来咯!
前后端分离,千万别再搞错了!
双非本,投递4000+份简历,上岸了!
爱用 CDN,钱包两行泪!
这次是真【一条龙】了!
看了周鸿祎的简历,我明白了为什么 9 年二手车能卖 990 万!