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