跳到主要内容

4 篇博文 含有标签「提案」

查看所有标签

· 阅读需 9 分钟

文件是现代信息企业的核心数据资产,为了确保资产的安全,需要对资产管理者的集中式权力进行拆分和监督,以权力约束权力使其保持平衡,权力模型是建立在"三员"模型之上,实现人员权力相互制约,让文件访问更安全可控。

“一切有权力的人都容易滥用权力;要防止滥用权力,就必须以权力约束权力!” --- 孟德斯鸠

什么是三员

概念

“三员”的概念在国家保密标准BMB20-2007《涉及国家秘密的信息系统分级保护管理规范》中提出,要求涉密信息系统应当配备安全保密员、系统管理员和安全审计员三类安全保密管理人员(简称为“三员”),分别负责安全保密管理、系统运维和安全审计工作。“三员”担负维护系统安全、稳定、可靠运行的重要任务,对涉密信息系统具有重要作用。

角色定义

由于超级管理员对整个系统拥有不受任何限制的所有操作权限,能够对增加删除任意用户、对所有文件进行操作,一旦超级管理员发生违规访问行为,文件本身就失去了安全性。因此在“三员”模型中,删除了超级管理员角色,个体不具备对系统所有资源的操作权限,同时将系统划分为安全保密、系统运维、行为审计三种相互独立、相互制约的角色,分别为安全保密员、系统管理员、安全审计员。

image-20230129104459780

安全保密员

安全保密员负责空间/文件/功能的访问授权、变更用户角色、用户访问安全警告的分析和处理。安全保密员只能基于现存用户进行授权操作,无法创建新用户,避免了安全保密员违规创建新用户并授权造成的文件访问外泄行为。安全保密员无法创建新角色,只能基于现存用户和现存角色为用户进行角色变更,且变更后的角色中包含的功能必须是安全保密员的角色的子集否则该操作被识别为敏感提权操作,需要安全审计员审批,这样可以避免安全保密员为用户变更高权限角色间接为用户提权的不安全行为。

系统管理员

系统管理员负责系统运维、管理用户(新建、修改信息、删除)、管理角色(新建、变更功能、删除)。系统运维主要包括软硬件安装和升级、扩容、数据备份/迁移/恢复、网络管理、运行情况监察等。系统管理员不能为其新建的用户授权。如果角色已关联用户则变更角色功能或删除角色需要安全审计员审批,避免为用户增加角色功能造成间接为用户提权的不安全行为。在没有安全保密员授权的情况下也无法访问悦库内部管理的文件,避免了系统管理员违规访问内部文件的行为。

安全审计员

安全审计员负责定期对系统管理员和安全保密员的操作行为进行审计分析和监督检查,及时发现违规行为。还负责审批对于系统安全设置敏感操作:用户角色变更和角色功能变更。安全审计员只对系统管理员和安全保密员的操作行为合规性负责,不参与系统运维和访问授权的实际业务工作。

权力模型

支持二种权力模型,分别为:二员模型、三员模型。根据企业的人员数量和文件保密级别不同,对权力模型的需求会有差异。对于小企业人员少且组织结构简单,则权力模型也应简洁,避免不必要的额外操作,使用二员模型即可满足多数需求。对于大型企业则应使用三员模型来避免个体权力过大,造成数据安全风险。

二员模型

二员模型是指系统存在超级管理员和系统管理员角色。超级管理员拥有任意操作权限。系统管理员负责系统运维和管理用户,需额外授权才能访问空间中的文件。

二员模型实际是对三员模型的简化,目的是将系统管理员独立于文件的安全保密管理以外,专门负责系统运维。超级管理员同时拥有三员中的安全保密员、系统管理员、安全审计员角色。系统管理员则在三员中的系统管理员角色基础上中去掉了管理角色的权力。

三员模型

“三员”模型中,删除了超级管理员角色,个体不具备对系统所有资源的操作权限,同时将系统划分为安全保密、系统运维、行为审计三种相互独立、相互制约的角色,分别为安全保密员、系统管理员、安全审计员,对信息系统整体安全有很好的防护作用。

用户故事

在“三员”模型下,系统全局权力由安全保密员、系统管理员、 安全审计员分别掌握,形成了“三权分立”的局面,产生了相互权力制约和监查,极大提高了系统的整体安全性。以新增用户为例子:

公司入职一名新员工,需要在网盘中创建新用户,可以访问研发部空间下的文件。

实施具体的操作是:

  1. 研发部新员工通过固定链接页面发起一个新建用户的审批流,转给研发部门主管。
  2. 由部门主管审批通过,审批流自动转给系统管理员。
  3. 系统管理员根据新员工提交的信息为其创建新账号,完成后审批流自动转给研发部的安全保密员。
  4. 安全保密员为新用户授予研发部空间的的访问权限,审批流结束,系统自动通知新员工账号生效。

系统定时生成《安全审计报表》,发送给安全审计员进行安全审计,以检查系统管理员、 安全保密管理员的操作是否合规。

· 阅读需 2 分钟

分享文件给用户、文件订阅、系统通知、审批流等功能需要消息支持,现在需要建立一种可靠的消息收发机制。

架构

  • 发送者将消息发送到系统消息队列中,发送返回成功。

  • 系统消息处理器负责从队列中读取消息并处理,完成后将最终消息放到个人消息收件箱中,然后将消息放入通知消息队列中。

  • 通知消息处理器将消息推送给在线用户。

用户场景

"小明发送一个文件给研发部所有人员。"

实现方法:

  1. 小明将文件消息发送到系统消息队列中,发送完成。
  2. 消息处理器取出消息,解析内容,读取文件信息,并生成最终的文件消息内容。将消息依次写入研发部所有人员的个人收件箱中,然后将消息放入通知消息队列中。
  3. 推送消息处理器将消息推送给在线的研发部人员。在集群化部署场景,用户会随机连接到不同的连接池上,因此每个推送消息处理器只给自己的连接池中的研发部成员推送消息。

· 阅读需 4 分钟

本提案是对《文件本地编辑提案V1》的补充。

什么是文件本地编辑

在网盘客户端中直接点击文件自动下载到缓存位置,并使用本地默认程序打开,本地编辑完成后可自动上传到网盘中。

本地编辑

问题分析

问题现象

最近我们收到用户反馈:“本地编辑中连续保存.xlsx格式文件时自动上传的文件低几率损坏现象。”

我们非常重视文件数据可靠性,立即进行确认并讨论解决方案。

问题原因

文件本地编辑提案V1中,我们说明了文件的上传时机:

文件以读写方式本地打开后,网盘会一直监控文件的保存时间,如果发生变更则自动上传。

文件上传过程是先创建文件任务,加入上传队列,然后再执行上传,这是一个异步操作。当上传任务创建成功后,文件内容随时可能被用户保存,这就导致了上传任务的文件信息和实际上传的文件内容不一致,可能造成最终文件大小或内容信息错误。

由于用户保存文件的行为是不定时发生的,因此不能假设任意时间文件数据是完整可靠的,极端情况下,文件正在写入过程中也可能被上传,这有几率会造成上传的文件不完整。

发布时间

在本提案中我们使用一种对本地编辑文件进行“静止状态”探测的方法,保证上传文件内容的可靠性。

解决方法

在以上的情景分析中,我们发现问题的根本原因就是文件上传同时用户对其进行保存。如果上传过程中文件处于一种"静止"状态(用户不更新),那么整个上传流程必然是安全可靠的。

image-20220718180845787

探测静止状态

建立静止的文件,需要对已保存文件进行静止探测,这需要两个固定时间段(8秒/时间段)才能得出结论。

“探测点1”确认文件内容已保存。

“探测点2”确认文件保存后处于静止状态,认为文件在当前时段是静止的,距上次保存后一段时间没有再发生过保存行为。

创建文件快照

文件静止状态确认后,将文件复制到临时目录,复制完成后,需要检测快照复制期间,原文件是否被再次保存,如果已保存则放弃快照。如果没有保存则保留快照,并将快照加入上传队列,由于快照是静止的,所以上传内容的可靠得以保证。

上传静止文件

静止文件快照加入上传后,无论上传结果成功或失败,完成后直接删除即可。

相关阅读

《文件本地编辑提案V1》

· 阅读需 7 分钟

文件本地编辑功能广受用户欢迎,是核心功能。最近时有用户反馈在多人协作场景下的文件本地编辑不可靠,低几率发生文件冲突和内容不实时同步等问题。

本地编辑过程中的上传/下载是通过一种基于文件时间戳的对比机制触发,如果用户系统时间与服务器系统时间差异较大会造成不稳定因素,因此我们决定对其机制进行升级优化。本篇文章中我将悦库团队的最终讨论结果做为优化提案进行汇总,用于指导用户理解文件本地编辑的交互过程,也用于指导团队开发人员理解业务细节,保证本提案准确落地。

在本提案中我们将基于时间戳的文件对比机制,调整为基于文件版本和内容散列值的对比机制。

什么是文件本地编辑

在网盘客户端中直接点击文件自动下载到缓存位置,并使用本地默认程序打开,本地编辑完成后可自动上传到网盘中。

本地编辑

什么是文件版本

文件版本是指在文件的编辑过程中,对每一次变更作为一个版本号进行记录,以便将来查阅特定历史版本的变更情况。

在多人编辑场景下,一个文件的版本生成过程如下:

image-20220607171234814 悦库网盘的历史版本实例:

这是悦库持续集成系统使用yshell命令行工具自动上传文件产生的历史版本,可以看到每个历史版本中都有对应一个唯一版本号。

image-20220607171255843 在文件的版本列表中可以追溯任意版本的数据,便于查看文件变更情况。

什么是文件内容散列值

通过将文件分块,对每个块进行散列计算,然后对所有块散列值再散列生成文件的内容散列值,以下图例是拥有4个块的文件内容散列值生成过程:

image-20220602151114017

新的本地编辑功能实施

本地编辑功能包括本地打开、自动上传两部分。

本地打开

当用户在客户端中以本地编辑方式打开文件时,首先检查文件的编辑锁定状态,如果文件已被锁定且锁定者不是当前用户,则提示用户文件已被锁定,但可以以只读方式打开,下载打开后文件不能编辑和上传。如果文件没有锁定或锁定者是当前用户,则下载后以读写方式打开文件。

打开文件时,如果文件没有下载,则直接下载,并记录文件的版本号、ID、内容散列值、本地全路径、打开时间、状态等。

如果文件已下载,则检查远程版本号和本地版本号是否一致:

如果一致则不需要下载,直接打开本地文件。

如果远程版本号大于本地版本号,则先计算本地文件的内容散列值,然后与下载时记录的原始散列值进行对比:

  • 如果不一致说明用户在下载文件后做了修改,这时如果强制下载就会覆盖用户本地修改的内容,这就产生了下载冲突,需要提示用户将远程版本的内容和本地修改的内容合并。

  • 如果一致则直接下载并覆盖本地文件,更新本地记录文件的版本号、内容散列值,然后打开本地文件。

自动上传

文件以读写方式本地打开后,网盘会一直监控文件的修改时间,如果发生变更则自动上传。

上传时,如果本地版本号等于远程版本号则直接上传,上传完成后更新本地版本号和内容散列值。

如果本地版本号小于远程版本号,则说明远程文件已经被别人修改过,如果强制上传会覆盖别人的修改,这就产生了上传冲突,需要提示用户将远程版本的内容和本地修改的内容合并。

当用户编辑完成后,需要对文件执行自动解锁操作,由于文件可以进行独占和共享打开,没有通用的方法确认用户是否已经编辑完成,只能用两种模式识别文件编辑完成状态:

  1. 对于已知的独占打开的文件格式,如office文件,可以轮询确认文件是否已经解除占用,如果解除占用则解锁。
  2. 对于其他的文件格式,如文本文件,使用进程关联的方式,轮询打开文件的进程,如果进程退出则解锁。

如果编辑时退出客户端,就不能自动上传,下次启动客户端时,会检查编辑未上传文件,如果有则认为编辑已完成,尝试上传并自动解锁。

参考资料:

版本控制

加密散列函数