【问题标题】:Only show GIT repo's to which user has access with gitweb仅显示用户可以使用 gitweb 访问的 GIT 存储库
【发布时间】:2023-04-06 17:00:03
【问题描述】:

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

目前的设置如下:

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

到目前为止,这非常有效,并且无需使用 gitosis 或 gitolite。

因为我想对我设置的 gitweb 包括 pathinfo 的存储库有一个可浏览的概述。因为 repos 是私有的,所以我已经通过 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 起作用或有其他解决方案?

【问题讨论】:

    标签: perl git authentication gitweb


    【解决方案1】:

    如果开发人员在(我认为)他们自己的用户名下使用 ssh 从存储库服务器推送/拉取,那么完成此任务的最简单方法可能是找到运行 @987654322 的方法@ 或 git 在该用户的身份下。

    例如,想办法在执行gitweb 之前添加一个身份验证挂钩。然后在执行sudo -u $user gitweb.realgitweb 周围添加一个包装器,其中$user 是经过身份验证的用户名。

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

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

    【讨论】:

    • 谢谢。 NIS认证没问题,但是不允许apache用户sudo造成巨大的安全漏洞?
    • 您可以限制谁可以使用sudo 做什么。查看man sudoers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    相关资源
    最近更新 更多