Контекст
У меня есть 2 разных машины, основное отличие которых в том, что одна работает на CentOS6, а другая на CentOS7.
Оба запускают последнюю доступную для дистрибутива версию библиотеки: 0.8.13 для COS7, 0.7.5 для CentOS6.
Оба работают с nss-pam-ldapd, настроенным «обычно»:
/etc/nslcd.conf
uid nslcd
гид ldap
URI ldap://ldap.example.org/
база dc=пример,dc=org
ssl нет
tls_cacertdir /etc/openldap/cacerts
idle_timelimit 240
базовая группа ou=groups,dc=example,dc=org
binddn cn=только для чтения,dc=пример,dc=org
биндпв **************
Разрешения сервера:
olcAccess: {0}в attrs=userPassword,shadowLastChange от dn="cn=Manager,dc=cube-net,dc=org" запись от dn="cn=Readonly,dc=example,dc=org" нет по анонимной аутентификации от себя написать от * нет
olcAccess: {1}в dn.base="cn=Readonly,dc=example,dc=org" от dn="cn=Manager,dc=example,dc=org" запись от * none
olcAccess: {2}в dn.base="" по * read
olcAccess: {3}к * от dn="cn=Manager,dc=example,dc=org" запись от dn="cn=Readonly,dc=example,dc=org" чтение от себя запись от * чтение
Проблема
Я могу нормально искать пользователей, но я не могу войти в систему как пользователь, используя су
на CentOS 7.
Я получил :
mveroone@vm:~$ пароль
Смена пароля для пользователя mveroone.
(текущий) Пароль LDAP:
Новый пароль:
Введите повторно новый пароль:
passwd: все токены аутентификации успешно обновлены.
mveroone@vm:~$ su - mveroone
Пароль:
su: Отказано в доступе
mveroone@vm:~$ локальный хост ssh
Только разрешенное использование. Вся активность может отслеживаться и сообщаться.
mveroone@localhost пароль:
Последний вход: Пт, 20 августа, 16:10:24 2021
Только разрешенное использование. Вся активность может отслеживаться и сообщаться.
mveroone@vm:~$
Так что да, я могу войти в систему, используя SSH, изменить свой пароль, но не использовать su.
Что я пробовал
Выполнение ldapwhoami
на обоих серверах работает с использованием простого метода привязки, но не SASL (нет доступного механизма)
root@vm:~# ldapwhoami -D uid=user,ou=users,dc=example,dc=org -W -H ldap://ldap.example.org
Введите пароль LDAP:
dn: uid = пользователь, ou = пользователи, dc = пример, dc = org
Бег nslcd -d
при попытке авторизации по паролю с помощью су
показывает это только в COS7:
nslcd: DEBUG: accept() не удалось (проигнорировано): ресурс временно недоступен
Хотя кажется, что это ошибка, которую можно игнорировать, судя по паре веток списка рассылки.
При запуске nslcd с дополнительной отладкой (нслкд -дд
), я вижу, что сначала он пытается установить связь с пользователем, что удается, а затем ищет '(объектный класс=*)'
, атрибуты фильтрации: дн
и base = сам, который работает:
ldap_free_request (оригинал 1, msgid 1)
ldap_parse_result
ldap_msgfree
ldap_search_ext
put_filter: "(objectClass=*)"
put_filter: простой
put_simple_filter: "objectClass=*"
ldap_build_search_req ATTRS: дн
ldap_send_initial_request
ldap_send_server_request
ldap_result ld 0x7f7a9800cf60 мсгид 2
wait4msg ld 0x7f7a9800cf60 msgid 2 (время ожидания 10000000 мкс)
wait4msg continue ld 0x7f7a9800cf60 msgid 2 все 0
** ld 0x7f7a9800cf60 Соединения:
* хост: ldap.example.org порт: 389 (по умолчанию)
refcnt: 2 статус: Подключено
последнее использование: пт, 20 августа, 11:42:05 2021
** ld 0x7f7a9800cf60 Выполненные запросы:
* msgid 2, origid 2, статус InProgress
выдающихся рефералов 0, количество родителей 0
ld 0x7f7a9800cf60 количество запросов 1 (отказано 0)
** ld 0x7f7a9800cf60 Очередь ответов:
Пустой
ld 0x7f7a9800cf60 количество ответов 0
ldap_chkResponseList ld 0x7f7a9800cf60 msgid 2 все 0
ldap_chkResponseList возвращает ld 0x7f7a9800cf60 NULL
ldap_int_select
read1msg: ld 0x7f7a9800cf60 msgid 2 все 0
read1msg: ld 0x7f7a9800cf60 msgid 2 тип сообщения search-entry
ldap_get_dn
nslcd: [0e0f76] <authc="user"> DEBUG: ldap_result(): uid=user,ou=users,dc=example,dc=org
ldap_msgfree
ldap_abandon 2
ldap_abandon_ext 2
do_abandon origid 2, msgid 2
ldap_msgdelete ld=0x7f7a9800cf60 msgid=2
ldap_free_request (оригинал 2, msgid 2)
ldap_free_connection 0 1
ldap_free_connection: ссылка 1
ldap_msgfree
nslcd: [0e0f76] <authc="user"> ОТЛАДКА: ldap_unbind()
ldap_unbind
Итак, путь:
- Привязать (ОК)
- Искать собственное DN (хорошо)
- Покидать
- Отвязать
Затем говорит мне, что не может аутентифицировать пользователя. («Отказано в доступе», так что это отличается от «ошибка аутентификации»)
Я выполнил захват пакета, и он показывает то же самое.
Я попытался просмотреть журналы изменений nslcd версии 0.8.x, чтобы увидеть, изменилось ли что-то, но было много изменений без достаточного количества деталей.