使用 LDAP 通过 HTTP 配置 GIT 服务器

使用 LDAP 通过 HTTP 配置 GIT 服务器

我对 GIT 还很陌生,总体来说对基础设施设置不是很有经验。但是,我尝试做的事情似乎非常基础,我无法做到。

我正在尝试在 Apache 中创建一个通过 HTTPS 公开的 GIT 服务器。我的 GIT 存储库的配置如下(在 CentOS 系统上):

SetEnv GIT_PROJECT_ROOT /opt/repo-git/my-custom-repo.git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

<Directory "/opt/repo-git/my-custom-repo.git">
  Options -Indexes FollowSymLinks
  AllowOverride AuthConfig FileInfo
  Order allow,deny
  Allow from all
</Directory>

<Directory "/usr/libexec/git-core">
  AllowOverride None
  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
  Order allow,deny
  Allow from all
</Directory>

<Location /git>
  Order deny,allow
  Allow from all
  Dav on
  AuthType Basic
  AuthzLDAPAuthoritative on
  AuthName "Trac"
  Require valid-user
  AuthBasicProvider ldap
  AuthLDAPURL "ldap://my-ldap-configuration-that-works"
  AuthLDAPBindDN "my-ldap-dn"
  AuthLDAPBindPassword "my-password"
</Location>

通过此配置,我可以使用 签出代码git clone https://<my-ip>/git。但是我无法推送,我在 TortoiseGit 中收到以下错误:

Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To https://<my-ip>/git
! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'https://<my-ip>/git'

此类错误报告于这里这里这里以及更多地方。

这些来源对我都没什么帮助——它们实际上提出的建议是相同的。我无法理解的是我应该为存储库设置哪个组和所有者。我目前正在设置apache运行 Apache 服务器的用户。但是我怀疑 Apache 配置中的 GIT magic 使用其他用户进行我的提交(例如我的 LDAP 用户)。这毫无意义,但是,每次 LDAP 出现更改时,我是否都要更改我的每台服务器上的文件权限?

在这样的配置中是否有任何特殊的默认 git 用户可用?

我确认apache用户和组对我的 GIT 存储库拥有完全控制权。

答案1

我能够让 Git 配置为我工作。

我的目标配置是为存储库设置 GIT,格里特对其进行代码审查并将所有这些与我公司的 LDAP 集成。

你可以看到我花了将近 3 周的时间才让一切运行起来,但现在我终于完成了。

格里特是最重要的里程碑——事实证明它本身提供了我需要的功能——它为存储库提供了 http 接口,然后使用一个系统帐户对存储库执行实际操作。

GERRIT 还与 LDAP 完美集成,允许您配置 ldap 组以获得项目访问权限,并使用 LDAP 用户进行存储库交互。

唯一的小问题是,用户需要使用 GERRIT 生成的密码作为 LDAP 用户才能访问存储库。不过,这并不是一个很大的缺点,因为您可以使用完整的 LDAP 凭据登录 GERRIT UI,然后可以为自己生成此密码,这意味着您可以完全控制它。

相关内容