Security Mercurial用户管理和安全

Security Mercurial用户管理和安全,security,mercurial,Security,Mercurial,我刚刚在Centos 5.5 x64服务器上安装了Mercurial 1.9.3。我正在使用hgweb.wsgi和mod_wsgi发布我的存储库 此服务器仅供我们的内部代码库和开发团队使用,因此我还使用.htaccess和基本HTTP身份验证来保护我的服务器。这一切都很好,我可以将存储库克隆到本地,并将更改推回到中心repo 有一件事我没有正确理解,那就是如何控制和管理用户 例如,我的中央存储库服务器.htpassword文件中有两个用户:bob和kevin 在bob和kevin的每台本地机器上

我刚刚在Centos 5.5 x64服务器上安装了Mercurial 1.9.3。我正在使用
hgweb.wsgi
mod_wsgi
发布我的存储库

此服务器仅供我们的内部代码库和开发团队使用,因此我还使用
.htaccess
和基本HTTP身份验证来保护我的服务器。这一切都很好,我可以将存储库克隆到本地,并将更改推回到中心repo

有一件事我没有正确理解,那就是如何控制和管理用户

例如,我的中央存储库服务器
.htpassword
文件中有两个用户:
bob
kevin

bob
kevin
的每台本地机器上,他们都有自己的Mercurial
.hgrc
文件,并配置了
用户名
设置

但是,这些
.hgrc
用户似乎与远程服务器的
.htpassword
文件中指定的用户完全没有关系

这意味着我最终可以从“米老鼠”和“唐老鸭”推送到中央存储库,这是没有用的

如何强制本地
.hgrc
用户名到
.htpassword
用户的端到端映射以进行维护,即确保
.hgrc
中指定的用户与
.htpassword
用户匹配

如何强制本地.hgrc用户名到.htpassword用户的端到端映射以维护

没有办法。但是(相反)ACL扩展+ssh(hg ssh或mercurial server)提供了更可预测的结果

PS


仅在变更集注释上下文中可用且有意义,正如注释一样,仅此而已。这不完全是一个答案,但值得一提的是:每个人一开始都担心这一点,但实际上这不是问题

当用户使用DVCS(无论是Mercurial、git还是其他)提交时,他们不一定连接到您控制的任何身份验证/授权系统,因此他们的提交必须(本地)使用他们想要声明的任何作者身份信息提交。您可以稍后在
推送到您控制的repo/服务器时拒绝这些变更集,但这对您和他们来说都是一个大麻烦。这不仅仅是重新插入他们的姓名/密码的问题,他们还必须更改变更集和所有后续变更集的历史记录,以更改作者信息

对此完全不满意的解决方案列表如下:

  • 拒绝更改集作者身份与使用钩子的经过身份验证的用户不匹配的推送(实际上,这很糟糕,因为开发人员总是互相拉拽并推送彼此的更改集)
  • 让开发人员使用gpg扩展或hgsigs签署变更集(这是一个巨大的麻烦,他们会忘记)
  • 在服务器上保留一个推送日志,记录推送每个变更集的经过身份验证的用户与其作者身份不同(Mozilla做到了这一点,与其他用户相比,这不太麻烦,但仍然不太可能被咨询)
如果你确实不能冒险让虚假变更集进入特定的回购协议,那么就使用人工过滤器,在这里人们推送到共享回购协议a,只有审阅者/构建管理者/你可以从回购协议a推送到回购协议B,其中回购协议B是正式构建的来源。Mercurial本身也使用这个系统


最后我的建议是不要担心它。值得雇佣的开发人员很自豪能将自己的名字写在他们的承诺上,如果你没有值得雇佣的开发人员,你注定要失败。

你需要一个钩子来实现这一点。Mercurial中的用户名实际上与服务器上的任何身份验证完全不同。例如,您可以克隆我的一个存储库,进行一些更改并提交,然后给我一个pull请求,我执行该请求,然后将其推回到我自己的存储库中。这是合法的,因为我在推动,但我推动的是你的变更集。如果你想禁止这类事情,你需要一个钩子,但不幸的是我没有细节,所以我现在只留下评论。而且。。。您可以禁止某人使用无效用户名将更改推送到服务器,但您不能禁止某人使用错误的用户名提交更改集,因为所有这些都是在本地发生的。@LasseV.Karlsen-谢谢您的建议-我想我现在明白了。花了几周的时间,我开始思考DVCS的概念,灯终于亮了:)可能是与Mercurial打了几周交道的复制品,我“明白了”:)太棒了。我经历了完全相同的过程。
[ui] username =