Рейтинг:2

libpam-ldapd — аутентификация LDAP в Debian 11 не работает

флаг ke

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

Моя цель - аутентифицировать (в основном для SSH) все машины Debian в каталоге UCS (OpenLDAP) - в будущем только тогда, когда пользователь является членом определенной группы ldap. Но в настоящее время я изо всех сил пытаюсь заставить его работать даже без членства в группе.

Я всегда получаю ошибку:

nslcd: [7b23c6] <authc="test"> ОТЛАДКА: ldap_sasl_bind("uid=test,cn=users,dc=securitywho,dc=local","***") (uri="ldap://ldap. securitywho.local") (ppolicy=yes)
nslcd: [7b23c6] <authc="test"> DEBUG: ldap_parse_result() результат: неверные учетные данные
nslcd: [7b23c6] <authc="test"> DEBUG: не удалось выполнить привязку к серверу LDAP ldap://ldap.securitywho.local: неверные учетные данные
nslcd: [7b23c6] <authc="test"> ОТЛАДКА: ldap_unbind()
nslcd: [7b23c6] <authc="test"> uid=test,cn=users,dc=securitywho,dc=local: неверные учетные данные
nslcd: [7b23c6] <authc="test"> ОТЛАДКА: myldap_search(base="cn=users,dc=securitywho,dc=local", filter="(&(objectClass=*)(uid=test))")
nslcd: [7b23c6] <authc="test"> ОТЛАДКА: ldap_result(): uid=test,cn=users,dc=securitywho,dc=local

Пользователь привязки работает, я все проверил с помощью команды ldapsearch - там все работает нормально с пользователем привязки, и если я использую неправильный пароль, отладка показывает ошибку, что функция привязки не работает.

Ldapsearch использовал - и он работает:

ldapsearch -x -H ldap://ldap.securitywho.local -D "uid=srv_linux,cn=users,dc=securitywho,dc=local" -b cn=users,dc=securitywho,dc=local -W

Снимок из вывода:

# тест, пользователи, securitywho.local
DN: uid=test,cn=users,dc=securitywho,dc=local
krb5MaxLife: 86400
krb5MaxRenew: 604800
ИД: тест
uidNumber: 2008
сн: тест
гекос: тест
отображаемое имя: тест
homeDirectory: /home/test
логинShell: /bin/bash
mailForwardCopyToSelf: 0
Сп: тест
krb5PrincipalName: [email protected]
shadowLastChange: 18992
самбаBadPasswordCount: 0
самбабадпассвордтиме: 0
sambaAcctFlags: [U]
класс объекта: shadowAccount
класс объекта: верхний
класс объекта: sambaSamAccount
класс объекта: автомонтирование
класс объекта: univentionPWHistory
класс объекта: человек
класс объекта: krb5KDCEntry
класс объекта: univentionObject
класс объекта: инетОргперсон
класс объекта: krb5Principal
objectClass: организацияPerson
класс объекта: univentionMail
класс объекта: posixAccount
самбаSID: S-1-5-21-258973841-725078507-1497259816-5016
номер гида: 5001
sambaPrimaryGroupSID: S-1-5-21-258973841-725078507-1497259816-513
univentionObjectType: пользователи/пользователь

Просто чтобы убедиться, что мой тестовый пользователь работает, я запустил команду ldapsearch с тестовым пользователем — и здесь все сработало. Я проверил это с несколькими учетными записями в каталоге OpenLDAP, все работали здесь, но ни одна, когда я пробовал это для SSH.

ldapsearch -x -H ldap://ldap.securitywho.local -D "uid=test,cn=users,dc=securitywho,dc=local" -b cn=users,dc=securitywho,dc=local -W

Конфигурация /etc/nsLCd.conf

# /etc/nsLCd.conf
# Конфигурационный файл nslcd. См. nslcd.conf(5)
# для подробностей.

# Пользователь и группа nslcd должны работать как.
uid nslcd
гид nslcd

# Расположение, в котором должны быть доступны серверы LDAP.
URI ldap://ldap.securitywho.local

# База поиска, которая будет использоваться для всех запросов.
база cn=users,dc=securitywho,dc=local

# Используемая версия протокола LDAP.
#ldap_версия 3

# DN для привязки для обычного поиска.
binddn uid=srv_linux,cn=users,dc=securitywho,dc=local
bindpw <SUPERSECUREPASSWORD>

# DN, используемый для изменения пароля пользователем root.
#rootpwmoddn cn=admin,dc=пример,dc=com

# параметры SSL
#ssl выключен
#tls_reqcert никогда
#tls_cacertfile /etc/ssl/certs/ca-certificates.crt

# Область поиска.
#область подпрограммы
пароль фильтра (objectClass=*)
карта passwd uid uid

тень фильтра (objectClass=*)
uid карты теней uid

Полный вывод отладки nslcd:

root@ipam:~# nslcd -d
nslcd: ОТЛАДКА: NSS_LDAP nss-pam-ldapd 0.9.11
nslcd: ОТЛАДКА: CFG: потоки 5
nslcd: ОТЛАДКА: CFG: uid nslcd
nslcd: ОТЛАДКА: CFG: gid 117
nslcd: DEBUG: CFG: uri ldap://ldap.securitywho.local
nslcd: ОТЛАДКА: CFG: ldap_version 3
nslcd: DEBUG: CFG: binddn uid=srv_linux,cn=users,dc=securitywho,dc=local
nslcd: ОТЛАДКА: CFG: bindpw ***
nslcd: DEBUG: CFG: base cn=users,dc=securitywho,dc=local
nslcd: DEBUG: CFG: область действия
nslcd: DEBUG: CFG: deref никогда
nslcd: DEBUG: CFG: ссылки да
nslcd: DEBUG: CFG: псевдонимы фильтров (objectClass=nisMailAlias)
nslcd: DEBUG: CFG: фильтровать эфиры (objectClass=ieee802Device)
nslcd: DEBUG: CFG: группа фильтров (objectClass=posixGroup)
nslcd: DEBUG: CFG: фильтровать хосты (objectClass=ipHost)
nslcd: DEBUG: CFG: фильтровать сетевую группу (objectClass=nisNetgroup)
nslcd: DEBUG: CFG: фильтровать сети (objectClass=ipNetwork)
nslcd: DEBUG: CFG: пароль фильтра (objectClass=*)
nslcd: DEBUG: CFG: фильтрация протоколов (objectClass=ipProtocol)
nslcd: DEBUG: CFG: фильтровать rpc (objectClass=oncRpc)
nslcd: DEBUG: CFG: службы фильтрации (objectClass=ipService)
nslcd: DEBUG: CFG: тень фильтра (objectClass=*)
nslcd: DEBUG: CFG: сопоставление группы userPassword "*"
nslcd: DEBUG: CFG: map passwd userPassword "*"
nslcd: DEBUG: CFG: map passwd gecos "${gecos:-$cn}"
nslcd: DEBUG: CFG: сопоставление теневого пароля пользователя "*"
nslcd: DEBUG: CFG: отображать тень shadowLastChange "${shadowLastChange:--1}"
nslcd: DEBUG: CFG: map shadow shadowMin "${shadowMin:--1}"
nslcd: DEBUG: CFG: map shadow shadowMax "${shadowMax:--1}"
nslcd: DEBUG: CFG: map shadow shadowWarning "${shadowWarning:--1}"
nslcd: DEBUG: CFG: map shadow shadowInactive "${shadowInactive:--1}"
nslcd: DEBUG: CFG: map shadow shadowExpire "${shadowExpire:--1}"
nslcd: DEBUG: CFG: map shadow shadowFlag "${shadowFlag:-0}"
nslcd: DEBUG: CFG: pam_authc_ppolicy да
nslcd: ОТЛАДКА: CFG: bind_timelimit 10
nslcd: DEBUG: CFG: лимит времени 0
nslcd: DEBUG: CFG: idle_timelimit 0
nslcd: DEBUG: CFG: reconnect_sleeptime 1
nslcd: ОТЛАДКА: CFG: reconnect_retrytime 10
nslcd: DEBUG: CFG: ssl выключен
nslcd: DEBUG: CFG: требование tls_reqcert
nslcd: ОТЛАДКА: CFG: размер страницы 0
nslcd: ОТЛАДКА: CFG: nss_min_uid 0
nslcd: ОТЛАДКА: CFG: nss_uid_offset 0
nslcd: ОТЛАДКА: CFG: nss_gid_offset 0
nslcd: DEBUG: CFG: nss_nested_groups нет
nslcd: DEBUG: CFG: nss_getgrent_skipmembers нет
nslcd: DEBUG: CFG: nss_disable_enumeration нет
nslcd: DEBUG: CFG: validnames /^[a-z0-9._@$()]([a-z0-9._@$() \~-]*[a-z0-9._@$ ()~-])?$/i
nslcd: DEBUG: CFG: ignorecase нет
nslcd: ОТЛАДКА: CFG: pam_authc_search БАЗА
nslcd: DEBUG: CFG: кэш dn2uid 15 м 15 м
nslcd: начиная с версии 0.9.11
nslcd: ОТЛАДКА: initgroups("nslcd",117) выполнено
nslcd: ОТЛАДКА: setgid(117) выполнено
nslcd: ОТЛАДКА: setuid(110) выполнено
nslcd: DEBUG: unlink() из /var/run/nslcd/socket не удалось (игнорируется): нет такого файла или каталога
nslcd: прием подключений
nslcd: [8b4567] ОТЛАДКА: подключение от pid=896662 uid=0 gid=0
nslcd: [8b4567] <authc="test"> ОТЛАДКА: nslcd_pam_authc("test","sshd","***")
nslcd: [8b4567] <authc="test"> ОТЛАДКА: myldap_search(base="cn=users,dc=securitywho,dc=local", filter="(&(objectClass=*)(uid=test))")
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_initialize(ldap://ldap.securitywho.local)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_rebind_proc()
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_PROTOCOL_VERSION,3)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_DEREF,0)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_TIMELIMIT,0)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_TIMEOUT,0)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_NETWORK_TIMEOUT,0)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_REFERRALS,LDAP_OPT_ON)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_RESTART,LDAP_OPT_ON)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_simple_bind_s("uid=srv_linux,cn=users,dc=securitywho,dc=local","***") (uri="ldap://ldap. securitywho.local")
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_result(): uid=test,cn=users,dc=securitywho,dc=local
nslcd: [8b4567] <authc="test"> ОТЛАДКА: myldap_search(base="uid=test,cn=users,dc=securitywho,dc=local", filter="(objectClass=*)")
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_initialize(ldap://ldap.securitywho.local)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_rebind_proc()
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_PROTOCOL_VERSION,3)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_DEREF,0)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_TIMELIMIT,0)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_TIMEOUT,0)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_NETWORK_TIMEOUT,0)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_REFERRALS,LDAP_OPT_ON)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_set_option(LDAP_OPT_RESTART,LDAP_OPT_ON)
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_sasl_bind("uid=test,cn=users,dc=securitywho,dc=local","***") (uri="ldap://ldap. securitywho.local") (ppolicy=yes)
nslcd: [8b4567] <authc="test"> DEBUG: ldap_parse_result() результат: неверные учетные данные
nslcd: [8b4567] <authc="test"> DEBUG: не удалось выполнить привязку к серверу LDAP ldap://ldap.securitywho.local: неверные учетные данные
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_unbind()
nslcd: [8b4567] <authc="test"> uid=test,cn=users,dc=securitywho,dc=local: неверные учетные данные
nslcd: [8b4567] <authc="test"> ОТЛАДКА: myldap_search(base="cn=users,dc=securitywho,dc=local", filter="(&(objectClass=*)(uid=test))")
nslcd: [8b4567] <authc="test"> ОТЛАДКА: ldap_result(): uid=test,cn=users,dc=securitywho,dc=local

Я пытался поиграть с «областью поиска» в /etc/nslcd.conf, но никакая комбинация не заработала. Что я в настоящее время не вижу никаких проблем с конфигурацией - у кого-то была такая же проблема или кто-то может мне помочь? Я установил все с помощью:

apt-get установить libpam-ldapd
Рейтинг:1
флаг ke

Еще через несколько часов отладки wireshark показали, что запрос BIND для пользователя BIND был правильно отправлен на ldapserver (BIND с простой аутентификацией -> без шифрования). Но мой тестовый пользователь не отправил настоящий пароль на сервер ldap, это означает, что аутентификация должна была быть неудачной. --> Тесты, выполненные с помощью SSH.

Я попытался войти в локальную консоль и увидел, что вход в систему теперь был успешным в отношении отладки nslcd, но /var/log/auth.log показал:

1 января 14:01:43 ipam login[489]: pam_unix(login:auth): проверка прохода; неизвестный пользователь
1 января 14:01:43 ipam login[489]: pam_unix(login:auth): ошибка аутентификации; logname=ВХОД uid=0 euid=0 tty=/dev/tty1 ruser= rhost=
1 января 14:01:43 ipam login[489]: pam_unix(логин:аккаунт): не удалось идентифицировать пользователя (из getpwnam(test))
1 января 14:01:43 ipam login[489]: Ошибка аутентификации

Но теперь все работает просто отлично - как я это исправил? --> Перезагрузка.

Больше не нужно было вносить никаких изменений в конфигурацию, моя конфигурация в исходном посте была правильной и теперь работает нормально.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.