delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

28 Sep 2010

关于备份

指望硬盘不挂掉是 很拼人品的事情(附带说一句,从某种意义上说,21世纪的硬盘质量并没有下降,只是单位容量出现故障的概率没有显著提高,而硬盘容量的扩大使得单块硬盘的故障率看起来提高了,但是如果我们从单位容量的故障率来看,坏损率并没有非常显著的增长)。所以想要长久地保存数据,就必须采用各式各样的冗余和备份手段。冗余和备份是不一样的,前者往往会采用同样的访问控制逻辑,提供在线或近线的数据存储,强调的是数据访问的及时性;而后者则强调的是数据的可恢复性。

关于访问控制

一般来说,不希望备份与原始数据采取相同的访问控制机制。例如,对网站来说,可以读写数据库的那个 Web 访客的数据库账户,很可能并不能直接读写网站的备份数据。有时,备份甚至是以一种"外科手术"的方式进行的:对文件系统做快照,然后将快照打包发到异地的另一套系统。

采取不同的访问控制机制有很多好处。备份的目的之一是保护先前版本的数据不受影响。举个现实生活中的例子,公司的账簿可能会影印之后放到档案寄存机构,而公司会计可能并不负责,甚至没有权限去调出账簿副本。在这个例子中,由于副本和正本由两个角色分别负责,为确保其不被其中任何一个人恶意篡改提供了一定的保障。

对于服务器或桌面系统,这种控制也同样重要。例如,用户可能有权限删除自己的文件,但不应有权限以同样的方式删除或修改备份。这种限制可以缓解由于误操作或入侵(例如木马、或特权提升)导致的损失。这一点是备份与冗余之间的重要区别。

推 or 拉?

两种方式各有利弊,但我个人比较倾向于使用拉(即备份机登录原始数据的机器)的方式而不是推的方式。原因是备份机往往可以设置更为严厉的安全策略,例如放在防火墙后面,等等,而攻击者在入侵成功之后,想要找到备份机在什么地方也需要一些时间,从而给检测入侵创造条件。推的方式的优点是可以比较方便地控制何时备份,以及备份的I/O占的比例,不过,通过合理地设计备份系统,并不是拉的方式并不是完全不能实现这类功能。

关于异地备份

将备份与原始数据放在同一个物理位置(例如同一个机房、同一棟建筑、同一座城市,甚至同一个省或同一个国家/大洲)很可能是有风险的。一般来说,副本与原始数据的距离越远,从备份的可靠性角度考虑便越有把握,同时,将备份设在电费和托管费用较低的二三线城市,也可以在一定程度上降低整个系统的运营成本。

离线备份

离线备份往往用于保存非常有价值并且不经常改变的数据。例如将数据刻录成光盘邮寄给不同大洲的人,等等。不过,离线备份的问题是其访问控制很可能不太容易,想要解决这个问题,可以采用门限加密的方法(例如,将数据分成三份,密钥也分成三份,给三个备份点分别发第其中的1,2;1,3;2,3,在这个方案中,攻击者必须掌握三份备份中的至少两份才能够恢复密文内容)对数据进行处理。