噼里啪啦敲击键盘的程序员,大家一定很熟悉。作为程序员,编写代码是他们的家常便饭。笔者有很多朋友也是从事程序员行业,有时他们的工作压力大了,经常会在群里相互开玩笑说,公司要是把我逼急了,大不了“删库跑路”,本来这是一句玩笑话,没想到会有一天成为现实。
近日,一家香港主板上市公司,围绕商业云、营销云、销售云打造智慧云端生态体系,为企业提供全场景全链路SaaS产品的智能商业服务提供商-微盟出事了,它的程序员“删库跑路”了!
微盟在官网发布了一则故障通知,该通知称其公司业务系统数据库(包括主备)遭遇其公司运维人员的删除。据悉,目前犯罪嫌疑人已经被宝山区公安局进行刑事拘留,犯罪嫌疑人承认了犯罪的事实。犯罪嫌疑人乃微盟研发中心运维部核心运维人员贺某。微盟公司对外宣称,贺某于2月23日晚18点56分通过个人VPN上网登入公司内网跳板机,因个人精神、生活等原因对微盟线上生产环境进行了恶意的破坏。
事情是如何发生的呢?不久之后微盟官方发布了调查结果:
2020年 2 月 23 日晚 18:56 分该企业运维部门核心员工贺某通过 VPN 登入内网,官方称是因为个人精神、生活等原因开始对生产环境进行恶意破坏。
2020 年 2 月 23 日 19:00 系统监控发出报警。
2020 年 2 月 25 日 7 时,恢复部分生产环境的数据,但是老用户预计还需要 2 月 28日晚上才能恢复。
截止到现在,微盟微商城,智慧零售,微站业务正式恢复服务,新用户可直接注册使用。
为什么会发生删库?
作为一家上百万客户的服务商,从公开信息上显示,这家公司提供微信商城、餐饮O2O、智慧城市等营销解决方案,而沃尔玛、百草味、洽洽、森马等耳熟能详的品牌也是其客户。其数据库大量被删除是非常严重的,删除数据库事件发生后,市值瞬间蒸发10个亿!
最近几年删除跑路的新闻报道屡见不鲜,有程序员误操作导致的删除数据库,也有恶意的程序员因为情绪发泄失控导致的报复性删库。
2018 年 8 月,顺丰公司一员工接到一个变更需求,因为选错了实例,将一数据库删除。因工作不严谨导致该系统上临时车线上发车功能无法使用并持续约590分钟。事后该员工被开除。
2018年4月,VPS 服务商 Kuriko 因因机房技术人员 rm -rf /*,宿主机上所有数据丢失了。
2017年6月,一家荷兰海牙的云主机商 verelox.com,一名前任管理员删光了该公司所有客户的数据,并且擦除了大多数服务器上面的内容。
对于恶意删除数据库的行为,我国《刑法》第二百八十六条规定:“对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。”
2018 年杭州科技公司的技术总监邱某因不满企业裁员,该员工从 2014 年入职到 2018年,公司的主要系统都由他搭建,包括公司的 SaaS 系统、API 系统、电子合同的签署等服务,2018 年初公司大概有 4 万多用户。2018 年 4 月,老板找到邱某,让他尽快离职,后面他也提交了辞职报告,但是心里一直都很不爽。遂心生报复,远程登录服务器删除了数据库上的一些关键索引和部分表格,造成该企业直接经济损失 225 万元,后被判赔偿公司 8 万元,判刑 2 年 6 个月,缓刑三年。
删库事件无法预防吗?
微盟事件给我最大的疑惑就是,这位核心运维人员能够拥有如此大的权限,在家远程登陆可以删除如此庞大重要的服务器数据。而且这种事故,可不是一般的黑客入侵或误操作,而是因为公司内部发起的恶意破坏。虽然这位运维人员是核心组的成员,但是他所被赋予的权利是否过大,能够不被监督,不被限制进行服务器的维护。这种“家里起火”其实是最难防范的,大多数中小企业因为人力有限,无法建立严格的流程规范以及招募监督人员来约束规范运维人员,很难避免这种问题发生。
由于企业规模问题,不可能招聘一个专门的 DBA(数据库管理员)来进行运维,很多时候都是程序员一兼多职,又开发,又要兼顾写代码加运维。而且,中小企业要想对程序员操作系统的权限划分的特别细致是不现实的。
即便如此,我们如何预防这类事件的发生呢?
1.权限
中小企业虽然因为规模问题,不会单独划分系统运维、业务运维、DBA 这种角色,但是可以建立像财务审批一样的流程。比如程序员现在要执行一个删除操作,由发起人发起删除请求,将需要操作的事项详细列出,交由相关负责人进行审批,负责人审批确认命令是否合理,审批通过后再交给专门的执行者或者才开放权限给发起人去执行删除操作。
如同建立财务流水一样,程序员的敏感操作可以做到追根溯源,有备可查,否则一旦出现问题就能很快知道是谁干的,二来可以防止人为破坏,避免拥有权限的人随时随地可以进行破坏。
对于有一定规模的企业,就可以对运维人员分为业务运维、网络运维、DBA 等,每个角色负责自己操作权限,不能越权,比如业务运维只能针对业务的相关进程和服务进行修改操作、系统运维只能对操作系统的权限进行调整,但是不能操作数据库、而 DBA 只能操作数据库,但是不能修改其他服务的配置文件和相关进程数据等等,更不能执行类似rm之类的高位命令。
2.流程化
对于运维人员的工作流程要进行流程规范化的培训,禁止一切非流程化的操作。对于代码环境的变更,例如执行什么写入,都要进行审批,最好是在专业人员演练测试无误后再进行变更,防止意外事故发生。
此外特别是对于删除、更新这种高危敏感操作一定要进行严格的审核,确认无误后方可操作。在《阿里巴巴JAVA开发手册》中,对于 Mysql 的变更要先执行 select,避免直接执行 delete,防止误删除。
3.演习
就像平时大型商场会定期举行消防演习一样,随着企业规模以及人员变动等因素,企业也要定期按照流程和规范对系统进行故障演练,以防“起火”后及时救火。比如断电恢复数据、数据删除镜像文件恢复等场景进行演练,这样一来可以加强对应开发和运维人员对于流程和规范的认识,二来平时参与到这种模拟环境中,可以在真正的故障面前不会手忙脚乱。
4.备份,备份,还是备份!
作为一个新媒体工作者,文稿备份那简直就是条件反射般的存在。如果软件死机,断电,那后果都是十分严重的。对于备份的重要性,我想不需要多说,对于重要的业务系统中的每一个服务都不能存在单点,要及时备份,定期备份,要时刻保持数据的备份。
一、常规备份,要定期对数据库进行备份,除了本地要有备份,还要进行远程备份,或者多机备份。可以通过脚本配合计划任务进行定时备份。
二、主从备份,除采用主从备份可以实时性的对数据进行同步,并保证高可用性。切记不可将主从部署在同一台机器上。
三、异地多存,有条件的还可以采用异地多存,即防止某个区域出现意外导致断电或硬件损坏等导致数据丢失。
但是,从很多现实例子来看,大量公司对于数据的备份是重视不够的。
首先是出于成本考虑,不舍得备份,本来租一个服务器就够贵了,为什么还要再租一个,而且只是备份用。但是就算不舍得投入成本,使用两个服务器,本地备份也可以做一个,防范于未然。
其次是,安全意识不够,或者说是侥幸心理在作祟。过于相信云服务厂商的技术,觉得上传到云后备份这种事情就交给云厂商去做了,一旦遇到黑客入侵,或者网络波动,本地也没有备份,那可就惨了。
5.事在人为
虽然微盟公布的调查显示,涉事人员是因为精神问题而去删库,是否为真,尚不可知。但是最近因为疫情影响,许多公司采取了在家远程办公,完全改变了我们平时的生活和办公状态。有些网友反映,在家办公一个月,都要憋出病来了,一周工作量的甚至比一个月还多。而且,不是所有人在家办公都能保持很高的工作状态,在家办公,经常会被其他事情打扰。
对于程序员,或者广大的员工而言,如果工作中遇到了一些不公平的遭遇,比如欠薪、领导故意刁难,或者长时间的无偿加班的情况。尽量选择通过正规途径来解决,不要选择走极端的违法行为。删库跑路看似非常潇洒解恨,一旦被判刑这将是得不偿失,还会对于未来的生活和工作都造成非常严重,不可逆转的影响。