Не удалось аутентифицировать вас из Ldapmain, потому что «Неверные учетные данные для user.name» - PullRequest
1 голос
/ 16 мая 2019

Я использую

  • Debian 9
  • gitlab-ce 11.10.4-ce.0
  • omnibus установить через apt
  • 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

Искал тонны веб-ресурсов, но я не могу найти способ создать пользователей LDAP или использовать существующих.

Я не знаю, в чем проблема и почему я получаю Invalid credentials for user.name: я отредактировал с помощью phpladmin атрибут Password (md5) и ввел его на странице входа в LDAP Gitlab:

enter image description here

Журналы Gitlab:

==> /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 и рабочую конфигурацию?

Edit:

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

Ошибка:

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

Edit2

Исправлено с помощью:

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

И обновленный пароль в phpldapadmin

1 Ответ

1 голос
/ 16 мая 2019

Ваша конфигурация Gitlab предназначена для Active Directory, когда вы используете OpenLDAP для аутентификации пользователей, поэтому первое, что нужно сделать, это исправить следующие параметры в /etc/gitlab/gitlab.rb:

uid: 'uid'
active_directory: false

Я не знаю, чтоцель attributes в контексте аутентификации (edit: attributes используется для синхронизации пользовательских данных из ldap с его учетной записью Gitlab, это не должно иметь значения для самой аутентификации).

Может быть, естьдругие проблемы, такие как пользовательский uid, не являющийся 'user.name', или база слишком узкая, например (запись user.name может быть не ниже ou=people), если вы не знаете, используйте base 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, содержащий запись user.name, которая будет создана с использованием ldapadd -f (при условии, что 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, если вам нужно, у меня естьскрипт для их генерации).
  • не забудьте также заменить DC реальными в dn
  • , остерегайтесь пустых строк и \ t в файле ldif, так как это может нарушить ваши операции добавления / изменения ldap.
  • Запустите ldapadd -x -H ldap://10.0.0.1:389 -D cn=admin,dc=serverX,dc=lan -W -f ldifFilename, чтобы создать запись пользователя.
  • запустив первый cmd ldapsearch выше, вы должны увидеть результат для этой новой записи.
  • запустив второй, связав его с пользовательскими учетными данными «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}.

...