Назад | Перейти на главную страницу

Настроить GIT-сервер через HTTP с помощью LDAP

Я новичок в GIT и в целом не очень разбираюсь в настройке инфраструктуры. Однако то, что я пытаюсь сделать, кажется очень простым, и я не могу это сделать.

Я пытаюсь создать сервер GIT, доступный через HTTPS в Apache. У меня следующая конфигурация моего репозитория 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. Однако у меня есть подозрение, что магия GIT в конфигурации Apache использует для моей фиксации какого-то другого пользователя (например, моего пользователя LDAP). Однако это не имеет смысла. Могу ли я изменять права доступа к файлам на каждом моем сервере каждый раз, когда появляется изменение в LDAP?

Есть ли какой-либо специальный пользователь git по умолчанию, который будет использоваться в такой конфигурации?

Я подтверждаю, что apache пользователь и группа имеют полный контроль над моим репозиторием GIT.

Я смог настроить Git, чтобы он работал на меня.

Моя целевая конфигурация заключалась в настройке GIT для репозитория, ГЕРРИТ над ним для проверки кода и интегрировать все это с LDAP моей компании.

Вы можете видеть, что мне потребовалось почти 3 недели, чтобы все это запустить, но теперь я, наконец, получил все окончательно.

ГЕРРИТ был самой важной вехой - оказалось, что он сам обеспечивает нужную мне функциональность - он предоставляет http-интерфейс для репозитория, а затем использует одну системную учетную запись для выполнения фактических действий в репозитории.

GERRIT также прекрасно интегрируется с LDAP, что позволяет настраивать группы ldap для прав доступа к проекту и использовать пользователей LDAP для взаимодействия с репозиторием.

Единственная мелочь - это то, что для доступа к репозиториям нужно использовать пароль, сгенерированный GERRIT, с его пользователем LDAP. Однако это не является большим недостатком, поскольку вы входите в пользовательский интерфейс GERRIT, используя свои полные учетные данные LDAP, а затем можете сгенерировать этот пароль для себя, что означает, что вы полностью контролируете его.