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

当前设置如下:

  • 因为服务器是NIS客户端,所以所有开发人员(和非开发人员)都有用户帐户和正确的组
  • 所有存储库都在/var/git/
  • 中创建
  • 所有 pull/推都是通过ssh
  • 完成的

    到目前为止,它可以完美地工作,并且消除了对筒状变形或硅藻土的需求。

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

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

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

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

  • 有谁知道如何使3个或4个工作或有其他解决方案?

    最佳答案

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

    例如,找到一种在执行gitweb之前添加身份验证 Hook 的方法。然后,在gitweb周围添加一个包装程序,以执行sudo -u $user gitweb.real,其中$user是已认证的用户名。

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

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

    10-08 17:42