ldap в Ubuntu 16.04 — Неверные учетные данные (49)

ldap в Ubuntu 16.04 — Неверные учетные данные (49)

Я пытаюсь настроить локальный экземпляр LDAP, чтобы иметь возможность отлаживать некоторое программное обеспечение, использующее LDAP для аутентификации. У меня это работало правильно на Ubuntu 14.04 LTS, но попытка обновления до Ubuntu 16.04 LTS была сбита с толку, и я переустановил Ubunut 16.04 LTS и не могу заставить LDAP работать правильно после многих разочарований.

Я установил slapd и использовал его slapadd -l <file>для заполнения базы данных. Я вижу, что мой файл был загружен с помощью ldapsearch -x:

# extended LDIF
#
# LDAPv3
# base <dc=nodomain> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# nodomain
dn: dc=nodomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: nodomain
dc: nodomain

# admin, nodomain
dn: cn=admin,dc=nodomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# People, nodomain
dn: ou=People,dc=nodomain
objectClass: organizationalUnit
ou: People

# Groups, nodomain
dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups

# miners, Groups, nodomain
dn: cn=miners,ou=Groups,dc=nodomain
objectClass: posixGroup
cn: miners
gidNumber: 5000

# smm, People, nodomain
dn: uid=smm,ou=People,dc=nodomain
uid: smm
sn: McCants
givenName: Stephen
cn: Stephen McCants
displayName: Stephen McCants
uidNumber: 10000
gidNumber: 5000
gecos: Stephen McCants
loginShell: /bin/bash
homeDirectory: /home/smm
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: person

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6

Однако мой код не может аутентифицироваться для пользователя 'smm', и я не могу установить пароль для пользователя с ldappasswd -D "uid=smm,ou=People,dc=nodomain" -A -S -W. Он запрашивает у меня пароли, а затем выдает ту же ошибку:

Old password: 
Re-enter old password: 
New password: 
Re-enter new password: 
Enter LDAP Password: 
ldap_bind: Invalid credentials (49)

Я также использовал dpkg-reconfigure slapdпароль root LDAP. Однако и до, и после перенастройки я получаю одну и ту же ошибку. Вот исходный файл, который использовался для заполнения базы данных:

n: ou=People,dc=nodomain
objectClass: organizationalUnit
ou: People
structuralObjectClass: organizationalUnit
entryUUID: 03a28690-1834-1033-87f5-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.559226Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z

dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups
structuralObjectClass: organizationalUnit
entryUUID: 03b017e2-1834-1033-87f6-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.648148Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z

dn: cn=miners,ou=Groups,dc=nodomain
objectClass: posixGroup
cn: miners
gidNumber: 5000
structuralObjectClass: posixGroup
entryUUID: 03b537ae-1834-1033-87f7-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.681730Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z

dn: uid=smm,ou=People,dc=nodomain
uid: smm
sn: <my name>
givenName: <my name>
cn: <my name>
displayName: <my name>
uidNumber: 10000
gidNumber: 5000
gecos: <my name>
loginShell: /bin/bash
homeDirectory: /home/smm
structuralObjectClass: inetOrgPerson
entryUUID: 983bd260-1835-1033-87fb-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123045015Z
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: person
userPassword: <redacted>
entryCSN: 20140123054441.631096Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123054441Z

Конечно, содержит мое настоящее имя и содержит строку SSHA, сгенерированную slappasswd.

На данный момент я не понимаю, почему это не работает и в чем проблема.

решение1

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

Сброс пароля администратора LDAP

Сначала я сгенерировал хеш пароля с помощью slappasswd.

root@laptop:/etc/ldap/slapd.d# slappasswd 
New password: 
Re-enter new password: 
{SSHA}<hash redacted>

Далее мне нужно было найти, где установлен пароль администратора. Я сделал это с помощью:

root@laptop:/etc/ldap/slapd.d# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  cn=config olcRootDN=cn=admin,dc=nodomain dn olcRootDN olcRootPW
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}mdb,cn=config
olcRootDN: cn=admin,dc=nodomain
olcRootPW: {SSHA}<hash redacted>

Ваш dc может отличаться в команде, в зависимости от того, как вы все настроили. Хотелось бы дать лучший ответ, чем этот, о том, каким должен быть ваш dc, но я не до конца понимаю LDAP. По сути, все, что я делал, было под dc=nodomain. Ваши настройки, вероятно, будут отличаться.

Далее я использовал ldapmodify для сброса пароля администратора на что-то, что я знаю. Обратите внимание, что я ввел и команду, и строки, начинающиеся с "dc:", "replace:" и "olcRootPw:". Вам нужно вставить пустую строку после последней строки, чтобы ldapmodify применил предыдущие команды.

root@laptop:/etc/ldap/slapd.d# ldapmodify -Y EXTERNAL -H ldapi:///
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

dn: olcDatabase={1}mdb,cn=config
replace: olcRootPW
olcRootPW: {SSHA}<new hash from slappasswd>

Значение oldcDatabaseвзято из ldapsearchкоманды, и ваше может отличаться от моего. Если в результатах поиска не было предыдущего olcRootPw, вам может потребоваться использовать addвместо replaceв команде изменения выше.

Ctrl-C завершает сеанс ldapmodify.

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

Сброс пароля пользователя LDAP

Я использовал slappasswd для генерации нового хэша пароля для пароля пользователя. Эта команда одинакова для обоих сбросов пароля.

root@laptop:/etc/ldap/slapd.d# slappasswd 
New password: 
Re-enter new password: 
{SSHA}<hash redacted>

Далее я выполнил команду ldapmodify, но на этот раз немного по-другому:

ldapmodify -H ldapi:/// -D "cn=admin,dc=nodomain" -W

Эта -Dопция сообщает LDAP, что я работаю как администратор (или кто-то в кавычках после -D). Ваше dcзначение, конечно, может быть другим. Эта -Wопция сообщает LDAP, что нужно запросить у меня пароль администратора.

После ввода пароля администратора LDAP (который я сбросил выше), я дал команду на установку пароля пользователя. Вот что я запустил:

dn: uid=smm,ou=People,dc=nodomain
add: userPassword
userPassword: {SSHA}<new password hash>

Первая строка — это dn, указывающий, какому пользователю требуется сбросить пароль. Вторая строка — это либо команда add, если userPassword не установлен, либо replaceкоманда, если userPassword уже установлен. Третья строка — это новый хэш пароля, который должен использовать LDAP. Введите пустую строку после третьей строки, чтобы сообщить ldapmodify, что вы закончили ввод команды, и она должна ее выполнить. Надеюсь, вы получите такой результат:

modifying entry "uid=smm,ou=People,dc=nodomain"

Теперь у меня также есть новый пароль для моего пользователя.

Связанный контент