Gitlabs ldap登录FreeClA服务器卡在一个设置的电子邮件循环中

时间:2015-02-03 15:35:01

标签: ldap gitlab directory-server freeipa

我已经安装了Gitlabs社区版v7.6.2,并尝试使用FreeIPA服务器作为其用户管理的ldap解决方案。基本上它看起来工作正常,我设法使用我的ldap服务器提供的帐户登录。但是当我登录时,我被卡在用户编辑页面上。在这个页面上我无法改变电子邮件,但看起来Gitlabs希望正确替换其自动生成的电子邮件。

我已经创建并且用户在FreeIPA上使用邮件地址bob@testdomain.com调用了bob。

ldapsearch -x -h localhost uid = bob

dn: uid=bob,cn=users,cn=accounts,dc=testdomain,dc=com
displayName: bob bob
cn: bob bob
objectClass: top
objectClass: person
objectClass: organizationalperson
objectClass: inetorgperson
objectClass: inetuser
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: ipaobject
objectClass: ipasshuser
objectClass: ipaSshGroupOfPubKeys
objectClass: mepOriginEntry
loginShell: /bin/sh
sn: bob
gecos: bob bob
homeDirectory: /home/bob
krbPwdPolicyReference: cn=global_policy,cn=TESTDOMAIN.COM,cn=kerberos,dc=testdomain,dc=com
mail: bob@testdomain.com 
krbPrincipalName: bob@TESTDOMAIN.COM
givenName: bob
uid: bob
initials: bb
ipaUniqueID: d7c3d5bc-abb3-11e4-a1d6-080027079e3d
uidNumber: 497600001
gidNumber: 497600001
krbPasswordExpiration: 20150203144923Z
krbLastPwdChange: 20150203144923Z
krbExtraData:: AALz39BUcm9vdC9hZG1pbkBBTUJBUkkuQVBBQ0hFLk9SRwA=
mepManagedEntry: cn=bob,cn=groups,cn=accounts,dc=testdomain,dc=com

编辑/etc/gitlab/gitlab.rb,在没有绑定用户的情况下与我的ldap目录通信:

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_host'] = 'ldap.testdomain.com'
gitlab_rails['ldap_port'] = 389
gitlab_rails['ldap_uid'] = 'uid'
gitlab_rails['ldap_method'] = 'plain'
gitlab_rails['ldap_allow_username_or_email_login'] = true
gitlab_rails['ldap_base'] = 'dc=testdomain,dc=com'

如果我在这一点上尝试登录它有点工作。它接受bob的密码。但是,不显示通常的登录页面,而是显示配置文件设置页面,其中包含非常模糊的消息。

ambiguous email dialog

所以我必须更改电子邮件地址,这个对话框中唯一完全不可更改的字段。我认为这是由于Gitlab依靠ldap提供邮件地址。我的ldap确实根据ldapsearch命令提供了这个字段,但是Gitlab似乎无法接受这个。我在此页面中关注的每个链接都会重定向到此页面。所以基本上我创造了一块砖。

要完成,请访问我的/var/log/gitlab/gitlab-rails/application.log:

# Logfile created on 2015-02-03 10:53:07 +0000 by logger.rb/44203
February 03, 2015 10:53: User "Administrator" (admin@example.com) was created
February 03, 2015 15:22: User "bob bob" (temp-email-for-oauth-bob@gitlab.localhost) was created
February 03, 2015 15:22: (OAuth) saving user temp-email-for-oauth-bob@gitlab.localhost from login with extern_uid => uid=bob,cn=users,cn=compat,dc=testdomain,dc=com

有没有人知道如何解决这个问题?非常感激!

1 个答案:

答案 0 :(得分:3)

将你的基础dn(gitlab中的'ldap_base')更改为'cn = accounts,dc = testdomain,dc = com'

我认为gitlab对通过compat树返回的条目感到困惑 - FreeIPA支持通过RFC2307架构公开用户和组。如果你使用$ SUFFIX('dc = testdomain,dc = com'),主要和compat条目都将匹配,gitlab将选择一个首先返回的条目,通常是compat树条目。 Compat条目用于旧UNIX客户端(nss_ldap,Solaris等)的标识映射,因此它只具有RFC2307属性且没有邮件属性。

另外,请确保使用经过身份验证的绑定。由于FreeIPA 4.x阻止了对大多数属性的匿名绑定的信息泄露,“mail”是只能通过身份验证绑定的属性之一。