5

我目前正在尝试设置一个 GIT 存储库服务器,以便我们可以从 SVN 切换到 GIT。我已经涵盖了几乎所有内容,但留下了一个问题。

当前设置如下:

  • 所有开发人员(和非开发人员)都有一个用户帐户和正确的组,因为服务器是 NIS 客户端
  • 所有回购都在 /var/git/
  • 所有拉/推都是通过 ssh 完成的

到目前为止,这工作得很好,并且消除了对 gitosis 或 gitolite 的需要。

因为我想对我设置的 gitweb 包括 pathinfo 的存储库有一个可浏览的概述。因为存储库是私有的,所以我已经通过 Perl AuthenNIS 设置了身份验证并且这可以工作,但是在这里我遇到了一个问题。

不希望所有开发人员都可以访问所有存储库,但 gitweb 只显示它(apache 用户)可以读取的每个存储库。

所以我的问题是:是否可以让 gitweb 只显示当前登录用户可以访问的 GIT 存储库?

可能的解决方案

  1. 通过 .htaccess 进行进一步的访问控制。pathinfo 将启用此功能,但不会阻止通过非路径信息 URL 访问 repo(例如 /repo.git/ 不起作用,但 /gitweb.cgi?p=repo.git 会)
  2. 设置完整的 gitosis/gitolite 环境并将其集成到 gitweb(本质上是this)。我想防止这种情况,因为开销是不可取的
  3. 使 gitweb 以经过身份验证的 HTTP 用户身份运行。这将解决所有访问控制问题,但我不知道该怎么做
  4. gitweb 的$export_auth_hook结合$cgi->remote_user似乎很有希望,但我对 perl 的理解太有限而无法使用它(钩子需要在显示/导出之前验证用户是否有权访问 repo 目录)

有没有人知道如何使 3 或 4 工作或有其他解决方案?

4

1 回答 1

2

如果开发人员在(我假设)他们自己的用户名下使用 ssh 从存储库服务器推送/拉取,那么完成此操作的最简单方法可能是找到一种方法来运行gitwebgit以该用户的身份运行。

例如,找到一种在gitweb执行之前添加身份验证挂钩的方法。然后添加一个包装器,该包装器gitweb执行经过身份验证的用户名sudo -u $user gitweb.real在哪里。$user

或者,您可以只包装git命令,即gitweb执行一个包装器,该包装器执行sudo -u $user {real-git-path}.

要在 Apache 中实现针对 NIS/PAM 的身份验证,请查看mod_auth_external

于 2011-09-04T05:01:29.177 回答