无法从Ldapmain对您进行身份验证,因为“ user.name的凭据无效”

时间:2019-05-16 05:59:43

标签: authentication ldap gitlab

我用

  • debian 9
  • gitlab-ce 11.10.4-ce.0
  • 通过apt安装Omnibus
  • openldap 2.4.44

ldap配置

已配置/etc/ldap/ldap.conf

BASE    dc=serverX,dc=lan
URI     ldap://serverX.lan
TLS_CACERT  /etc/ssl/certs/ca-certificates.crt

已配置/etc/gitlab/gitlab.rb

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-EOS
  label: 'Gitlab LDAP'
  host: '10.0.0.1'
  port: 389
  uid: 'sAMAccountName'
  method: 'plain' # "tls" or "ssl" or "plain"
  bind_dn: 'cn=admin,ou=users,dc=serverX,dc=lan'
  password: 'xxxx'
  encryption: 'plain'
  active_directory: false
  allow_username_or_email_login: true
  block_auto_created_users: false
  base: 'ou=users,dc=serverX,dc=lan'
EOS

gitlab-rake gitlab:ldap:check的输出正常:

# gitlab-rake gitlab:ldap:check
Checking LDAP ...

LDAP: ... Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)

Checking LDAP ... Finished

创建的用户:

enter image description here

搜索了大量的Web资源,但是我不知道创建LDAP用户或使用现有用户的方法。

我不知道问题是什么,为什么我得到Invalid credentials for user.name:我通过phpladmin的{​​{1}}属性(Password)编辑,并键入了相同的内容在LDAP Gitlab登录页面中:

enter image description here

Gitlab日志:

md5

具有目标用户登录名的==> /var/log/gitlab/gitlab-rails/production.log <== Started POST "/users/auth/ldapmain/callback" for 10.0.0.1 at 2019-05-16 07:56:16 +0200 Processing by OmniauthCallbacksController#failure as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "username"=>"user.name", "password"=>"[FILTERED]"} Redirected to http://domainX.lan/users/sign_in Completed 302 Found in 411ms (ActiveRecord: 23.1ms) Started GET "/users/sign_in" for 10.0.0.1 at 2019-05-16 07:56:17 +0200 Processing by SessionsController#new as HTML Completed 200 OK in 119ms (Views: 104.6ms | ActiveRecord: 7.5ms) ==> /var/log/gitlab/unicorn/unicorn_stdout.log <== I, [2019-05-16T07:56:16.907169 #3996] INFO -- omniauth: (ldapmain) Callback phase initiated. E, [2019-05-16T07:56:16.917884 #3996] ERROR -- omniauth: (ldapmain) Authentication failure! invalid_credentials: OmniAuth::Strategies::LDAP::InvalidCredentialsError, Invalid credentials for user.name 输出:

slapcat

有人知道怎么了吗?

也许有人可以给我一个示例dn: uuid=gquenot,ou=users,dc=serverX,dc=lan cn:: abcdef123456789== sn: Foo Bar objectClass: inetOrgPerson objectClass: top structuralObjectClass: inetOrgPerson entryUUID: 5133fc-0be-2039-9825-cd7 creatorsName: cn=admin,dc=serverX,dc=lan createTimestamp: 20190516045340Z userPassword:: xxxxxxxx mail: me@example.com entryCSN: 20190516101837.136599Z#000000#000#000000 modifiersName: cn=admin,dc=serverX,dc=lan modifyTimestamp: 20190516101837Z 和有效的配置?

编辑:

ldiff通过slapadd尝试使用此ldiff

slapadd -f file.ldiff

错误:

dn: cn=admin,dc=serverX,dc=lan
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Firstname Lastname
givenName: Gilles
sn: Quenot
uid: gquenot
mail: me@example.com
userPassword: {MD5}xxxxxxxxxxxxxx

Edit2

已修复:

5cdd8fe4 slapcat_so.txt: line 1: unknown directive <dn:> outside backend info and database definitions.
slapadd: bad configuration file!

并在ldapadd -x -H ldap://serverX:389 -D 'cn=admin,dc=serverX,dc=lan' -W -f stuff.ldiff

中更新了密码

1 个答案:

答案 0 :(得分:1)

在使用OpenLDAP进行用户身份验证时,您的Gitlab配置将目标对准Active Directory,因此,第一件事就是在/etc/gitlab/gitlab.rb中修复以下参数:

uid: 'uid'
active_directory: false

我不知道认证过程中attributes的用途是什么(编辑:attributes用于将用户数据从ldap同步到其Gitlab帐户,这没关系用于身份验证本身。

如果您不知道,也许还有其他问题,例如用户的uid不是'user.name',或者基数太窄(user.name条目可能不在ou=people下)使用基本dn作为基本搜索,或通过运行带有/不带有“ ou”部分的搜索进行检查:

ldapsearch -H ldap://10.0.0.1:389 -D cn=admin,dc=serverX,dc=lan -W -b ou=people,dc=serverX,dc=lan uid=user.name \*

我还将直接针对ldap检查凭证本身,即。不是通过Gitlab,而是通过执行大致相同的查询,而是使用 user.name 绑定,在这里,我们实际上测试了他是否可以绑定并读取自己的条目:

ldapsearch -H ldap://10.0.0.1:389 -D <user.name dn> -W -b <user.name dn> -s base \*

GitLab文档还坚持认为 LDAP用户必须设置一个电子邮件地址,无论是否用于登录。

一个典型的ldif文件,其中包含要使用ldapadd -f创建的user.name条目(前提是存在以其专有名称提到的ou和dc):

# user.name entry 
dn: uid=user.name,ou=users,dc=serverX,dc=lan
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: Firstname Lastname
givenName: Firstname
sn: Lastname
uid: user.name
mail: user.name@domain.com
userPassword: {MD5}<base64EncodedHash>

我不知道GitLab是否/如何知道密码加密方案(似乎对此没有配置,或者我错过了)。


您可以创建一个测试案例条目:

  • <base64EncodedHash>替换为{MD5}CY9rzUYh03PK3k6DJie09g==(如果需要我有一个生成它们的脚本,它表示密码test)。
  • 也不要忘记用dn中的真实DC替换DC
  • 请注意ldif文件中的空行和\ t,因为它可能会破坏ldap的添加/修改操作。
  • 运行ldapadd -x -H ldap://10.0.0.1:389 -D cn=admin,dc=serverX,dc=lan -W -f ldifFilename以创建用户条目。
  • 运行上面的第一个ldapsearch cmd,您应该看到该新条目的结果。
  • 运行第二个,绑定用户凭证“ test”并搜索其自己的条目(因此,-b基本参数指向自己,以避免搜索期间的权限问题),您应该再次看到相同的结果。

在gitlab.rb中:

gitlab_rails['ldap_servers'] = YAML.load <<-EOS
  label: 'Gitlab LDAP'
  host: '10.0.0.1'
  port: 389
  uid: 'uid'
  bind_dn: 'cn=admin,ou=users,dc=serverX,dc=lan'
  password: 'xxxx'
  encryption: 'plain'
  active_directory: false
  allow_username_or_email_login: false
  block_auto_created_users: false
  base: 'ou=users,dc=serverX,dc=lan'

如果您可以与此用户绑定但不能通过gitlab ui绑定,则可能意味着它不处理{MD5}身份验证方案。