【问题标题】:Git: disable read access on a per-branch basis for individual git users?Git:为单个 git 用户禁用每个分支的读取访问权限?
【发布时间】:2020-02-17 01:21:13
【问题描述】:

总结

我们的团队如何禁用单个 git 用户的分支“读取权限”?市场是否为自托管环境提供任何现有工具?还是有其他更好的方法来提供对 git 文件/目录的“禁用读取访问”?

到目前为止,我们认为我们可能更喜欢基于 git-branch 的访问控制,因为 a) 基于分支的控制似乎比 b) 基于目录的控制更好,因为 (a) 似乎可以做任何事情 (b) 可以,等等。

我们意识到这对于一个旨在将一切(在 repo 中)复制到(该 repo 的)克隆的工具 (git) 来说是一项艰巨的任务。我们对此持怀疑态度,但仍然想知道是否存在创造性的解决方案或是否可以发明/发现。

首选功能

  1. 适用于任何分支的 RACL(读取访问控制列表),包括适用于任何 git 用户集或组合的无限数量的任何单个分支。

  2. [可选] 与 任何 git repo 客户端/服务器软件集成。这样,我们理论上可以与大多数基于 git 的工具/生态系统集成。但是,如果需要特殊/自定义的 git 工具集,我们将使用它进行探索。

  3. [可选] 无缝 GitLab 集成。我们还没有看到 GitLab 提供此功能。 (我们还没有看到具有“禁用读取”功能的受保护分支。)

  4. [可选] 自托管 git 存储库。我们尽可能为我们的关键项目自托管服务,包括 git。但如果这是目前唯一的方法,我们会考虑使用托管服务。

更多详情

我们尚未对各种自托管功能工具提供商声称的任何功能进行实证测试。 But we've performed a tiny bit of research。我们还没有看到完全声称“残疾人阅读隐私”的功能; Gitolite 可以吗?

市场似乎更多地关注“保护”分支以避免数据丢失情况。相反,通过这次讨论,我更感兴趣的是防止指定用户访问(读取)敏感信息。

可以为每个访问“组/类”创建不同的 git 存储库,但这有很多问题,包括但不限于:

  • 随着组织规模的扩大,每个私人信息组合都需要理论上无限数量的存储库。
  • 当需要单独的 git 存储库以将它们彼此“隔离”以实现组内隐私时,无法将私有信息与“完整组”信息紧密结合。

在一个公共的、更大的 repo 中启用无限的“私有”git 分支似乎是一条更有效的路径。

【问题讨论】:

  • Git 旨在防止做你想做的事。任何尝试添加读取访问控制的系统都将不得不解决很多问题。
  • 知道了@torek。如果这是真的,让我们看看谁可以或如何做。或者想出一些其他的解决方法。对于包含财务、人力资源和其他敏感信息的更广泛的公司文档存储库来说,这是一个很大的问题。 Subversion 做得很好,fwiw。
  • Git 托管解决方案具有每个存储库的访问控制。它可能具有每个分支的 push 控制,但由于 git 是一个分布式系统,因此在客户端计算机上没有本地控制来限制该人可以做什么。如果您想分割部分代码或数据,请不要将它们全部存储在一个存储库中。
  • 如果文件不是日常开发所需要的,为什么要和需要的文件存储在同一个仓库中?
  • 当然,托管系统可以具有访问控制,不允许对某些分支进行读取/可见性访问,并且通过扩展所有只能通过它们获得的提交,但我还没有看到任何这样的系统到位。它必须是服务器端的,同样,本地的 git 根本没有访问控制。如果你有 repo,你就可以完全访问你所拥有的一切。可以以不同方式回答的问题是您从服务器得到了什么?

标签: git gitlab git-branch acl readonly


【解决方案1】:

使用 Gitlab 限制写访问的最简单解决方案是:

  • 保护树枝。
  • 通过合并请求请求贡献(意思是分叉)

但要限制读取访问,您需要一个单独的存储库,私有的,其中将包括私有分支。

公共存储库中的任何内容都是定义可读的。

【讨论】:

  • 保护分支将限制推送访问,它不会限制对这些分支中的文件和数据的访问,这是我理解OP想要的。
  • @LasseVågsætherKarlsen 正确。我已经相应地重写了答案。
  • 我还编辑了问题以使 GitLab 集成成为可选。删除 GitLab 要求是否可能启用更多选项(寻找解决方案)?
  • @JohnnyUtahh 否:无论托管存储库服务器是什么(GitHub、GitLab、BitBucket、Gitea 等),任何私有内容都必须由单独的存储库处理。其他任何事情都太冒险/太挑剔,并且会导致机密数据泄露。
  • @VonC - 明白。并且非常有意义。鉴于当前的 git 技术,我已更新问题以反映此请求的潜在“不可能”。
【解决方案2】:

您可以使用 Gerrit (https://www.gerritcodereview.com/)
而不是 Gitlab,它允许您启用每个引用的 ACL 读取访问 (https://gerrit-review.googlesource.com/Documentation/access-control.html#_project_access_control_lists)

例如,允许每个注册用户使用私有/公共沙箱:

存储库“所有项目”、“访问”:

参考:refs/*
删除匿名用户阅读

参考:^refs/heads/users/.+/public/.+
允许读取“注册用户”

参考:refs/heads/users/${username}/public/*
允许为注册用户创建引用、删除引用、推送(不强制)、阅读

参考:refs/heads/users/${username}/private/*
允许为注册用户创建引用、删除引用、推送(不强制)、阅读

我不知道是否可以使用特殊的“${username}”和正则表达式来只写一条规则。

【讨论】:

    猜你喜欢
    • 2012-10-26
    • 2015-08-19
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2016-09-13
    • 2017-05-07
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多