Ваша конфигурация 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}.