2

我的组织发现,将一个存储库的 150 个用户发布密钥添加到 gitolite 是一项艰巨的任务,并且管理它需要额外的资源。我们有大约 20 个这样的回购。除了添加用户 ssh 密钥进行授权之外,还有其他选择吗?我们使用 http 协议来访问 git repos。谢谢

4

1 回答 1

0

“https 访问”意味着您可以通过 LDAP进行身份验证;

这也意味着您可以配置 gitolite 来查询用户的 ldap 组

Gitolite 的组非常方便,但一些组织在他们的 LDAP 存储中已经有类似(或足够)的信息。

Gitolite 可以在一些帮助下利用这些信息。
编写一个程序,给定用户名,查询您的 LDAP 存储并返回用户所属的组的空格分隔列表
然后将该程序的完整路径放入rc名为 的变量中GROUPLIST_PGM,如下所示:

GROUPLIST_PGM           =>  '/home/git/bin/ldap-query-groups',

现在您可以在 gitolite 的访问规则中使用这些组名,因为用户是这些组的成员,以及您可能在 conf 文件中将他添加到的任何普通 gitolite 组的成员。

注意:如果你想要“这个用户为什么/如何在这个时候访问这个 repo?”的审计跟踪,你的程序必须做自己的日志记录。正确解决。Gitolite 不会对查询结果进行任何记录,因为对于不需要它的人来说,这将是一种巨大的浪费。


我自己的脚本:

#!/bin/bash
export H="/path/to/home"
export D=3
aluser="${1}"
if [[ "${aluser}" == "" ]] ; then exit 0 ; fi
afuser="${H}/gitolite/ldap/${aluser}"
afuserl="${afuser}.log"
if [[ "${aluser}" =~ ^[0-9]+$  && ! -e "${afuser}" ]] ; then
  echo "Potential Company user, checking group..." >> "${afuserl}"
  lport="1234"
  if [[ "${lport#@}" == "${lport}" && ! -e "${afluser}" ]] ; then
    l=$(ldapsearch -H ldaps://ldap.server:1234 -x -D "CN=abcd,OU=Accounts,DC=company" -w xxxx -b "OU=People,DC=company" -s sub -a always -z 1000 "(cn~=${aluser})" "memberof" | grep -i "memberof")
    echo "LDAP='${l}'" >> a
    if [[ "${l#*CN=}" != "${l}" ]] ; then
      names=""
      while read -r line; do
        if [[ "${line#*CN=}" != "${line}" ]] ; then
          aname="${line#*CN=}"
          aname="${aname%%,*}"
          if [[ "${names}" != "" ]] ; then names="${names} " ; fi
          names="${names}${aname}"
        fi
      done <<< "${l}"
      echo "${names}" >> "${afuser}"
    fi
  fi
fi
if [[ -e "${afuser}" ]]; then
  echo "REMOTE_USER_GROUPS='$(cat ${afuser})' for user '${aluser}'" >> "${afuserl}"
  cat ${afuser}
fi

不再需要任何 ssh 密钥!

于 2013-10-01T09:46:40.187 回答