只显示用户有权限访问的GIT仓库,使用gitweb。

5
我目前正在尝试搭建一个GIT仓库服务器,以便我们可以从SVN切换到GIT。 我已经几乎覆盖了所有内容,但还剩下一个问题。
当前设置如下:
- 所有开发人员(和非开发人员)都有用户帐户和正确的组,因为服务器是NIS客户端。 - 所有存储库都在 /var/git/ 中创建。 - 所有拉取/推送都通过ssh完成。
到目前为止,这个设置运行得非常完美,并且消除了gitosis或gitolite的需要。
因为我想要查看我设置的存储库的可浏览概述,所以我设置了包括pathinfo的gitweb。 由于存储库是私有的,所以我通过Perl AuthenNIS设置了身份验证,这起作用了,但是我遇到了一个问题。
不希望所有开发人员都能访问所有存储库,但是gitweb显示了它(apache用户)可以读取的每个存储库。
因此,我的问题是:是否可以使gitweb仅显示当前登录用户有权限访问的GIT存储库? 可能的解决方案:
  1. 可以通过 .htaccess 进一步控制访问。路径信息可以实现这一点,但它不能防止使用非路径信息 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 工作或有其他解决方案?

1个回答

2
如果开发人员使用ssh从代码库服务器推/拉取代码(我想他们是用自己的用户名),那么最简单的实现方法可能是找到一种在该用户身份下运行gitweb或git的方法。
例如,可以在执行gitweb之前添加一个身份验证钩子。然后,在gitweb周围添加一个包装器,执行“sudo -u $user gitweb.real”,其中$user是经过身份验证的用户名。
或者,你可以直接包装git命令,即让gitweb执行一个包装器,该包装器执行“sudo -u $user {real-git-path}”。
要在Apache中对NIS/PAM进行身份验证,请参考mod_auth_external

谢谢。NIS身份验证没有问题,但允许apache用户sudo创建一个巨大的安全漏洞吗? - dtech
3
你可以限制谁可以使用sudo以及进行哪些操作。查看man sudoers - ErikR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接