通过hg-ssh限制“hg push”进行共享主机

时间:2011-02-22 18:34:25

标签: mercurial ssh push restrict mercurial-server

如果我通过hg-ssh提供访问权限,是否有人知道如何限制用户推送到hg存储库?

有助于消除明显的一些细节:

1)这是一个共享托管情况,我没有root访问权限来安装mercurial-server,也无法创建它所需的“hg”用户名。

2)当我允许用户通过SSH连接到共享主机站点时,他们基本上会在我的authorized_keys文件中使用他们的公钥,并且他们将被认证为我(即他们将在服务器上拥有我的凭据) 。我可以通过在authorized_keys文件中指定“command =”子句来限制他们只访问几个hg存储库,如下所示:https://www.mercurial-scm.org/repo/hg-stable/raw-file/tip/contrib/hg-ssh。但是,这为用户提供了对这些存储库的完全访问权限。我可以将此限制为仅限拉取访问权限吗?

其中任何一个都可以解决我的问题:

1)我知道mercurial-server以某种方式解决了这个问题,因为所有用户共享同一个用户帐户名为“hg”。他们是如何做到的呢?没有root访问权限我可以做同样的设置吗?

或者2)是否有可以添加到hg-ssh的补丁,以便hg-ssh可以在其命令行上获得一些权限。像“hg-ssh -read-only repo1 repo2 -read-write repo3”。

或者3)获取“hg -R {repo} serve --stdio”以获取命令行选项,使其不允许推送。

3 个答案:

答案 0 :(得分:2)

快速而肮脏的方法是将command=值调整为:

command=hg-ssh --config hooks.pretxnchangegroup=false repo1 repo2

但这只是AclExtension的粗暴做法。

答案 1 :(得分:1)

mercurial-server为您提供最简单的控制。您可以将其安装为非root用户,但是您需要花一点时间来了解它是如何工作的。

答案 2 :(得分:0)

使用AclExtension。它允许您阻止对ssh操作以及http操作的访问,并且由于它是通过挂钩启用/禁用的,所以当您以交互方式登录时,它将能够绕过它。