随着我的公司开始进一步探索从集中版本控制工具(CVS,SVN,Perforce和其他许多人)转向提供团队分布式版本控制工具(在我们的案例中为mercurial),我遇到了一个问题:< / p>
问题
管理员已经提出担心分布式版本控制可能不如我们的CVCS选项那么安全,因为回购历史记录本地存储在开发人员的机器上。
很难确定他确切的安全问题但是我已经认识到,它的核心是这样一个事实:恶意员工不仅可以通过复制单个文件夹来正确窃取最新的知识产权,还可以窃取我们的整个变更历史。 / p>
问题
我的想法
我的看法是,这可能是错误的想法,集中模型更安全,因为历史似乎更安全,因为它在自己的盒子上。鉴于具有对集中式仓库的读访问权限的用户可以在任何关键修订版中选择性地提取项目的快照,我不确定DVCS模型是否使这一切变得更加容易。此外,大多数CVCS工具允许您使用单个命令提取整个repo的历史记录,以便您可以将它们导入其他工具。
我认为另一个问题是历史与最新版本相比有多重要。当然有人可以检查一个绝密文件,然后删除它,历史很快就会很重要。但即使在这种情况下,CVCS用户也可以通过一个命令来检查该绝密版本。
我确信我可能会遗漏某些内容或淡化风险,因为我渴望看到DVCS成为完全支持的工具选项。请提出您对安全问题的任何想法。
答案 0 :(得分:12)
如果您具有CVCS的读取权限,则您有足够的权限将回购转换为DVCS,人们一直这样做。没有任何软件工具可以保护您免受心怀不满的员工窃取您的代码的影响,但DVCS还有更多选项可用于处理不受信任的贡献者,例如网守工作流程。因此,它广泛用于开源项目。
答案 1 :(得分:5)
归结为如何在两种情况下实施安全措施的知识。如果您在一个系统与另一个系统中拥有更多经验,那么您更有可能实施更多以防止此类丢失,但在一天结束时,您只需在允许其访问代码的情况下信任您的开发人员。没办法。
答案 2 :(得分:3)
DVCS提供各种保护措施,防止未经授权的写作。这就是开源团队受欢迎的原因。它控制阅读有几个令人沮丧的限制。开源团队并不关心这一点。
第一个问题是大多数DVCS鼓励使用完整源代码的许多副本。典型的粒度是完整的回购。这可能包括许多不需要的分支甚至整个其他项目,除了历史的关注(以及可搜索的提交注释,可以使代码对攻击者更有用)。 CVCS鼓励开发人员尽可能少地复制到他们的桌面,因为他们复制的越少,它的工作速度就越快。您放置移动设备的次数越少,就越容易保护。
当许多设备作为服务器实施DVCS时,实现有效的网络安全性要困难得多。攻击本地CVCS工作空间需要攻击者获得对文件系统的访问权限。攻击DVCS节点通常需要在托管信息的任何设备上攻击DVCS本身(并记住:维护大多数DVCS的人是开源人员;他们并不关心读取控制的程度)。托管存储库的设备越多,用户设置匿名读访问的可能性就越大(DVCS鼓励因为其开源根源而鼓励)。这极大地简化了正在进行随机扫描的攻击者的工作。
基于URL的CVCS(如subversion)为相当细粒度的访问控制提供了机会,例如每分支访问。 DVCS倾向于对抗这种访问控制。
我知道开发人员喜欢DVCS,但是没有办法像CVCS一样有效地保护它。大多数环境在保护CVCS方面做得非常糟糕,如果是这种情况,那么使用哪种环境并不重要。但是,如果您认真对待访问控制,那么作为更广泛的最低权限基础架构的一部分,您可以更好地控制CVCS。
许多人可能认为没有理由保护源代码。这很好,人们可以争论它。但是,如果要保护源代码,最好的实现方法是不要将源代码复制到随机笔记本电脑(很难很好地保护),而是让开发人员从中央服务器安装它。 CVCS以这种方式运作良好。如果您打算以这种方式将它保存在单个服务器上,DVCS毫无意义。如果要将文件复制到移动设备,请确保尽可能少地复制。这与DVCS相反。
答案 3 :(得分:1)
有一堆“安全”问题;它们是否是一个问题取决于您的设置:
svn://
是明文。最后,安全经济学:
(IIRC事实证明,用户应该忽略安全建议,因为预期的成本比预期的利多 - 这是一个类似的事情昨天过期的证书更是如此多少它的成本你检查地址栏的每个。您在密码输入时间?你多久赶上网络钓鱼企图?什么是你的成本每挫败钓鱼企图是什么?每成功网络钓鱼的成本是多少?)