Mercurial Mercurial 之权限问题

liuxue.gu@hotmail.com · 2008年11月12日 · 1 次阅读

我多次跟朋友讨论分布式版本管理软件的时候,都提到一个固有的缺陷,就是权限认证问题.传统的中央式版本管理软件,例如 SVN,可以很简单地在服务器上做登录验证,可以阻止非法用户获取文件,当然,你可以使用一些外部手段来进行读取限制,例如 http basic 认证,iptables 等手段,但是这样只能针对整个 Mercurial 库进行控制,不能像 SVN 那样对某一个目录树进行限制,你可以把不同的模块使用独立的 Mercurial 库来保存,但是那会增加管理的复杂性,而且你很难实现权限组的概念.不过,分布式版本管理最常用的地方是开源领域,也因此 SVN 比较适合公司内部使用,一般情况你也不希望员工能方便地把源代码带回家.

上面提到的是权限问题,另外一个比较大的就是认证问题.回想一下我们使用 SVN 的流程,我用 sparkle&password 登录 SVN,然后提交修改,别人就能在 SVN 上看到这次的修改是我提交的,因为只有我才拥有 sparkle 这个帐号的密码,别人就没有办法冒认我.而使用 Mercurial 的时候,我们根本不用登录 (当然有些远程模式可以配置需要登录,但是并没有认证效果,我在迟点专门写一篇远程模式的文章),使用 Mercurial 的时候,我们一般会先设置我们的名字,例如 Sparkle,但是,别人一样可以取这个名字,你根本没有办法证明/阻止别人冒认你.又比如说我一个朋友 Nomad 的提交让我一起 commit 到 center,我先把 Nomad 的修改 pull 到我这里,然后我再 push 到一个大家认为的公共库 center,也就是说我同时把写着是我的修改和 Nomad 的修改提交,我随时可以假冒 Nomad.

当然,你也可以认为大家都是守法的,比如说团队成员是可控的,但是这始终是个问题.因为没有了中心,也就没有了认证的可能性.其实有一个办法可以解决,就是使用证书签名,在我的提交里面,我附带一份使用我的私钥对此修改的签名,大家就可以通过公钥去验证这的确是我签发的,就能证明我的身份.不过目前大家还是比较少用这种模式,因为使用成本也挺高的.

http://weavesky.com/2008/06/09/mercurial-authenticate/

需要 登录 后方可回复。