编辑:这个问题得到了很多浏览量,而我从未真正回来提供精确的分步解决方案。所以我在 18 个月后回来做了这件事。此解决方案适用于简单绑定,原始问题是在尝试让 Gitlab Omnibus 安装绑定到 LDAP 服务器的背景下提出的,但它应该适用于任何简单的 LDAP 绑定。请参阅我接受的答案,了解我为提供解决方案而采取的确切步骤。以下是我的 Gitlab 版本详细信息(对于那些在 Gitlab 中遇到此问题的人):
GitLab 7.0.0
GitLab Shell 1.9.6
GitLab API v3
Ruby 2.1.1p76
Rails 4.1.1
原始帖子: 我已经尝试了近 6 个小时来让我的 Gitlab 部署通过 Windows Server 2012 Essentials Active Directory LDAP 进行身份验证。
我的 Gitlab 服务器运行的是 Ubuntu 14.04。它已经通过 SSSD 连接到域控制器。
Gitlab 本身使用 gitlab.rd 配置文件中的 LDAP 设置,如下所示:
# These settings are documented in more detail at
# https://gitlab.com/gitlab-org/gitlab-ce/blob/master/config/gitlab.yml.example#L118
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_host'] = 'hostname of LDAP server'
gitlab_rails['ldap_port'] = 389
gitlab_rails['ldap_uid'] = 'sAMAccountName'
gitlab_rails['ldap_method'] = 'plain' # 'ssl' or 'plain'
gitlab_rails['ldap_bind_dn'] = 'CN=query user,CN=Users,DC=mycorp,DC=com'
gitlab_rails['ldap_password'] = 'query user password'
gitlab_rails['ldap_allow_username_or_email_login'] = true
gitlab_rails['ldap_base'] = 'DC=mycorp,DC=com'
我可以查询服务器,但无论我选择什么设置,我总是收到相同的消息:
"Invalid Credentials"
我尝试使用 ldapsearch 手动查询 DC,但出现相同的错误消息:
"ldap_bind: invalid credentials (49)
我已经创建了用于绑定到 Windows Server 2012 服务器管理器中的 Active Directory 用户部分的用户。
我尝试了 OU=Users 和 CN=Users 以及其他用户的每一个组合,确保 AD 中所有用户的所有电子邮件地址字段都已填充,但我无法得到任何正确的答复。
有没有一种简单的方法可以返回 Active Directory 对象的所有 Bind_dn 和 Base 信息?这让人很沮丧。
无论我在互联网上查找什么,所有信息都与旧版本的 Windows 有关(ldapsearch 等...)。我对系统方面的知识还很陌生(这是我的第一份暑期实习工作)。
以下是我当前使用的设置的示例:
gitlab_rails['ldap_bind_dn'] = 'CN=Gitlab LDAP,OU=Users,DC=servername,DC=local'
gitlab_rails['ldap_base'] = 'OU=Users,DC=servername,DC=local'
以下是我尝试使用 ldapsearch 为我的 Windows AD DS 找到正确的绑定设置的相应示例:
ldapsearch -b "ou=Users,dc=servername,dc=local" -h 192.168.0.3 -p 389 -D "uid=Gitlab LDAP,ou=Users,dc=servername,dc=local" -w "<password>"
毫无效果。我尝试了几十种组合。用户“gitlab”在 Windows Server 中的显示名称为“Gitlab LDAP”,带有电子邮件,全部为小写。底线:是否有一些简单的方法可以单击 Windows DC 中的对象并检索正确的 LDAP 设置以使用该用户对象进行 ldap 绑定?!如果我容易情绪爆发,这就是我要做的地方。
总是出现相同的错误消息:“无效凭证”
感谢您的时间和考虑,我们将非常感谢您的任何帮助。
答案1
我知道这不是一个完整的答案,但由于声誉问题,我无法发表评论。
需要考虑以下几点:
- 从 DC 本身启动
ldp.exe
。它是一个实际的 LDAP 客户端,因此如果你设法将其配置为正常工作,则相同的参数很可能也适用于 Gitlab。
请参阅这了解基本ldp
指导,并确保阅读 LDP 的输出。它可能会揭示您的配置所需的更多信息。 - 当谈到 LDAP 访问时,Windows Server 的版本并不那么重要 —— 可能只与加密相关的问题有关。
ldap_uid
可能需要格式DOMAIN\UserName
或CN=UserCN,DN=Location,DC=Bla
(DistinguishedName)。- 考虑检查您尝试连接的 DC 的 Windows 事件日志。它可能包含一些有关连接失败原因的信息。尝试在“安全”日志中输入“审核失败”
请回复更多信息,也许我可以提供帮助!
答案2
注意:应从值中删除鳄鱼括号 (<>),它仅用于指示通用值。
在 DC 上创建一个用户以用于 LDAP 绑定。以下是我的上下文示例:
我不认为我真正改变了什么,但我确实改变了,在帐户选项卡,将其设置为用户无法更改密码和密码永不过期。注意我删除了用户电子邮件中域末尾的 URL。对于其余说明,我将使用
<Domain>.<local>
,但此 URL 可以是任何与您的 DC 的实际 FQDN 相对应的内容(例如 microsoft.com)。在 DC 本身(最好)或网络连接且获得授权的机器上运行启动LDP具有提升的权限。在联系在端口 389(或您将其转发到的任何端口,389 是默认 LDAP 端口)输入 DC 或本地主机的 FQDN(取决于您从哪里连接)。连接后,您应该会看到很多行,但其中一行将是:
configurationNamingContext: CN=Configuration,DC=<Domain>,DC=<local>
记下这些值(DC 值对应于您的 FQDN,稍后将在 LDAP 搜索中使用)。
连接后,我们将与该用户执行简单绑定。单击联系选项卡并选择绑定选项。按如下方式填写选项(使用您在第一步中创建的用户信息):
如果成功,你应该收到一条消息
Authenticated as: <Domain>\<username>
一旦使用 ldp.exe 成功绑定到 DC,在浏览点击标签搜索选项:
在 Base DN 字段中,您将复制连接到服务器时记录的确切 DC URL 值。因此,如果显示连接,
CN=Configuration,DC=microsoft,DC=com;
则您将输入dc=microsoft,dc=com
Base DN 字段。我使用的过滤器只是对我之前创建的用户名进行通配符搜索。在属性字段中,我使用了以下值:
objectClass;name;description;canonicalName;lDAPDisplayName
点击跑步执行搜索。将产生以下输出:
标记为红色的这一行是我在 gitlab.rb 配置中绑定的值(请注意,此文件已被更改/删节以反映此处的示例)。当我登录 Gitlab 时,这完美地工作了:
这些是我采取的步骤。我确信那些比我更有管理能力的人可能会修改这种方法来找到他们想要的任何东西。(特别感谢尼兹为我指明了正确的方向)。
最后:根据您使用的 Windows 版本,您的客户端可能会使用 SAMAccountName 或 UserPrincipleName 属性,如瑞安·博尔格在 Nitz 的另一个答案的评论中。可以找到有关此属性的更多信息这里。