一、小白剧场

大东:小白,你看起来心情不太好啊。

小白:东哥,我做课程作业的时候执行了一个“rm -rf”命令,删掉之后才发现目录指定错了,好几个系统文件丢失,系统时不时地报错。

大东:小白,你也真的是太不小心了。

小白:还不是因为对Linux系统不熟悉嘛,不像Windows系统,删掉之后一般都是放在回收站的。

大东:“rm”命令是把文件从磁盘上删掉的,想要实现将文件放入回收站的效果,还需要进行相关配置,或者安装相关工具。

小白:这样子啊,之前是我太想当然了。

大东:你现在也不必这么沮丧,目前已经有人开发出一些文件恢复工具了,你再查一下资料看看有没有适用的?

小白:还有这么神奇的工具?简直就是救命稻草啊!

大东:虽说如此,你也还是小心为要,尤其是一些危险命令,否则可能会酿成大祸。2021年6月,某公司的所有轻量级机器学习模型被删除,添加了“skip trash”参数的命令使得在误删时临时禁用了回收。

小白:这可是公司的文件啊,比我的失误严重多了,这件事的具体过程是什么样呢?

二、话说事件

大东:2021年6月24日,某公司一名实习生删除了公司所有的Lite模型,事件曝光后引起了人们的广泛关注。

小白:什么是Lite模型呢?删掉之后会不会影响公司提供的服务?

大东:Lite模型指的是公司几乎所有规模在GB以下的机器学习模型。据公司开发工程师爆料,删除的都是离线数据,但重新训练模型和延迟上线都对指标有负向影响。

公司iOS开发工程师”与楼主的跟帖(图片来自网络)

小白:其实我也觉得影响应该不大,毕竟我用公司旗下软件的时候都没有觉得服务有异常。

大东:这只是从用户角度来看的,但是从公司和公司程序员角度来看就大不一样了。该公司将此次事故定位PO级事故(严重事故)并在全公司通报,问题处理群进了快三百人。

楼主的跟帖(图片来自网络)

公司的通报(图片来自网络)

小白:看来用户无感知也只是程序员们辛苦补救的结果了。不过实习生删掉的模型没有备份吗?如果有备份的话回滚一下不就行了?

大东:唉,他删掉的就是备份啊。通告上说的是“全量Batch模型的备份”,估计是一个模型的存储仓库。

小白:那没办法了,只能重新训练模型。话说回来,文件系统没有对用户权限进行控制吗?要是能早些制止此类危险操作就好了。

大东:有是有,但都是给子文件目录加的,那位实习生直接删掉了父目录,没有子目录什么事。

小白:啊这,原来是保护措施有欠缺啊。不过为什么一个实习生能有这么大的权限呢?

大东:因为该公司推行的是扁平化管理,实习生拥有与正式员工同等的权限,不像很多互联网公司,普通员工,特别是实习生,所拥有的权限是非常有限的,如果需要拥有某个重要权限,需要经过层层审批,有的还有时效性。

小白:这两种管理制度各有利弊吧。这个公司的遭遇让我想起了一句歌词“怎么忍心怪你犯了错,是我给你自由过了火”。

大东:哈哈,不过也不能全怪实习生,实习生经多方求证“确定”HDFS文件系统目录上的一个子目录为无用的,并随即删除了该目录。然而,一小时后,出现了模型无法上线的问题。

小白:经过“多方求证”?所以还真不是实习生一人之过,其上级也有责任。

三、事件始末

大东:对于这个事件,大家众说纷纭。公司为了给员工更多的施展空间,一直采用扁平化管理,是否需要加强权限管理还是个未知数。

小白:该公司在将来是否会实行严格的权限管理制度,咱们暂且按下不表,东哥,你能不能先讲一下怎么实现权限管理呢?我以前只是知道有这么一回事,没想到这么重要,我觉得自己以后做项目的时候也用得上,防止发生误删的情况。

大东:好的。目前比较经典的用户权限管理手段主要有三类:自主访问控制、强制访问控制和基于角色的访问控制。

小白:不好意思我打断一下,访问控制不是权限管理的一部分吗?如果将系统比喻为一家公司,权限管理就相当于把用户分到不同的办公室,访问控制则相当于公司大门和房间门?

大东:比喻很贴切,但理解还不够到位。访问控制是指主体依据某些控制策略或权限对客体进行的不同授权访问。这里的访问不仅仅指能够打开文件夹或文件,还包括是否能修改、删除、执行等。回到那个比喻,访问控制不仅控制能否开门,还控制打开门之后做什么工作。

小白:我明白了,实际上进行访问控制就是在做权限管理。东哥,你继续往下讲吧,自主访问控制是怎么实现的呢?

大东:自主访问控制最基本的实现机制是访问控制矩阵。这个矩阵的行表示客体,列表示主体,行和列的交叉点表示某主体对某客体的访问权限。将矩阵分别按行和按列拆分,还可以拆分为访问能力表和访问控制列表,均用链表实现。你能据此说一下这两个表的区别吗?

访问控制矩阵(图片来自网络)

小白:我想想看。访问能力表是以用户为中心建立的访问权限表,决定主体是否可以访问客体以及以什么权限访问。访问控制列表则是以客体为中心建立的访问权限表,表示各个主体对这个客体的访问权限。东哥,我理解得对吗?

访问能力表(图片来自网络)

访问控制列表(图片来自网络)

大东:不错不错,都能无师自通了。

小白:东哥过奖了,请介绍下一个访问控制手段吧。

大东:强制访问控制是指系统对客体施加强制限制,主体只能访问预先设置的内容。此外,还会预先对用户的访问级别进行调节,并通过信息级别与用户级别的比较来验证访问者的合法权利。这虽然在一定程度上保证了信息安全,但也可能导致权限划分与实际情况冲突。

小白:而且由于整个系统是预先制定的,故很难修改信息级别,灵活度较差。

大东:没错。最后讲到基于角色的访问控制。它由三部分构成:用户、权限和角色。用户与角色之间、权限与角色之间的对应关系都是多对多的。角色的制定基于实际的工作需要,用户根据工作需要被赋予一个角色,同时也有相应的权限,但用户和权限之间没有直接关系。

小白:这么看来,相比于自主访问控制,基于角色的访问控制可以减免不少授权操作,因为多个用户可以同属于一个角色,不需要逐个给用户授权。

大东:没错,随着计算机技术的成熟,基于角色的访问控制也越来越普遍,但是它也存在两个比较大的问题:一是角色权限授予时出错,导致角色权限范围超出预期 ;二是角色没有准划分,导致其他用户参与此角色。

小白:如果该公司也采用这种访问控制手段的话,出现实习生删掉父目录的事件,估计是出现第一个问题了。

四、小白内心说

大东:实际上,要避免发生此类事件,光有权限管理是远远不够的。你先回忆一下事件的起因?

小白:那名实习生在清理文件系统上的目录时发现一个目录最近更新时间是3月份,以为这个不用了,多方求证之后也得到这个目录已经没用的结果,随即就将目录删掉。

大东:你发现没有?这里就存在几个可以改正或改进的点。

小白:这……请原谅我安全知识储备比较少,东哥你直接揭开谜底吧。

大东:首先,该实习生根据“最近更新时间”,也就是modify time来判断文件是否有用,其实是不准确的,除了modify time,还应该参考change time和access time,其中access time表示访问文件而没有改动文件的时间,change time表示最后一次修改文件属性的时间。

Linux系统下的modify time、access time和change time(图片来源:网络)

小白:的确,那名实习生考虑欠周到。

大东:其次是“多方求证”。虽说是多方求证,但是到底求证了多少人,被求证人是否清楚这些模型所涉及的业务系统,有没有跟其他组织或者部门的人进行充分沟通,都不清楚。事件发生后解决问题的群进了三百多人,这不就说明了删除之前没做好沟通工作吗?

小白:非常赞同,这么多模型,能不能删除可不是几个人就能决定的。这也需要依靠一个高效的沟通机制或者问题解决系统吧,有问题立刻提出来,各业务负责人第一时间进行梳理和反馈,最后问题提出者综合大家的意见制定解决办法。

大东:是的,还有一个最根本的解决办法,就是慎用危险命令。像“rm”带“skip trash”这样的极度危险命令,能不用最好不要用。

小白:具体应该怎么做呢?

大东:这一方面需要程序员自己提升安全意识,另一方面确实需要一个检测和审批机制,比如程序员或运维人员执行此类命令时,应被系统及时检测到并强制中断操作,然后需要向有关人员或组织申请才能继续执行。

小白:我记得安全界有这样一句话:“信息安全三分靠技术,七分靠管理”,有时候出问题不是因为技术不足,而是因为管理不到位啊。

来源: 中科院之声