【问题标题】:Restricting "hg push" via hg-ssh for shared hosting通过 hg-ssh 限制“hg push”用于共享主机
【发布时间】:2011-07-02 05:22:18
【问题描述】:

如果我通过 hg-ssh 授予访问权限,有谁知道如何限制用户推送到 hg 存储库?

一些有助于消除显而易见的细节:

1) 这是一种共享主机情况,我没有安装 mercurial-server 的 root 访问权限,也无法创建它需要的“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 访问权限的情况下做同样的事情吗?

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

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

【问题讨论】:

  • 您能否为您的用户设置对此存储库的 https (SSL) 访问权限而不是 ssh?

标签: mercurial ssh push restrict mercurial-server


【解决方案1】:

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

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

但这只是 AclExtension 做得草率。

【讨论】:

  • 我刚试过这个,我似乎可以推动。你确定 hg-ssh 需要一个 --config 标志吗?我正在查看selenic.com/repo/hg-stable/raw-file/tip/contrib/hg-ssh 此处的代码,但我没有看到任何相关规定。也许我遗漏了一些明显的东西?
  • 如果 hg-ssh 没有携带命令行选项,则将选项放在 hg-ssh 脚本本身中。只需找到它调用 hg 的位置并将其添加到那里。
  • 感谢 Ry4an。尽管这并没有让我完全按照自己的意愿去做,但它让我对 hg 钩子有了足够的了解,从而完成了我需要的工作并编写了自己的 hg-ssh 之类的脚本。
【解决方案2】:

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

【讨论】:

  • 我不知道 mercurial 服务器可以在没有 root 访问权限的情况下安装 - 特别是我认为它需要一个专用的“hg”用户帐户。你有安装说明页面的链接吗?我必须说我继续编写了自己的 hg-gateway 工具来执行此操作:parametricity.net/b/hg-gateway
  • 我认为不使用专用帐户来完成这样的工作是个坏主意,尤其是因为 mercurial-server 必须删除并重写您的授权密钥文件。不过,该帐户不必称为“hg”。您需要配置的密钥文件是专用帐户主目录下的 .mercurial-server 文件。
【解决方案3】:

使用AclExtension。它允许您阻止对 ssh 操作以及 http 操作的访问,并且由于它是通过钩子启用/禁用的,因此您可以在交互登录时绕过它。

【讨论】:

  • (请忽略上面的评论;只是习惯了点击回车会发布 cmets 的事实)。 Ry4an,在看了 AclExtension 之后,我对它应该如何工作感到困惑。 AclExtension 中指定的用户名是 Unix 用户名,不是吗?如果是这样,当我将其他人的公钥添加到我的授权密钥中时,他们会显示为我,即使用我的用户名。我不想限制自己,只是通过一些公钥进行连接。
  • 它确实使用用户名,但如果您以交互方式登录,则可以通过从命令行取消设置挂钩来轻松绕过 AclExtension。
猜你喜欢
  • 2016-09-23
  • 2010-11-14
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多