Рейтинг:0

Аутентификация по паролю nss-pam-ldapd не работает в CentOS 7 только при использовании `su`

флаг cn

Контекст

У меня есть 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, чтобы увидеть, изменилось ли что-то, но было много изменений без достаточного количества деталей.

Рейтинг:0
флаг cn

Хорошо, так что это было совершенно не связано с нскд или PAM-LDAP в конце...

/etc/pam.d/su была эта строка в конце (из блока "auth")

требуется авторизация pam_wheel.so use_uid

Которого не было в /etc/pam.d/sshd Например.

Комментирование решило проблему

Линия также существовала на CentOS 6, но была включать оператор выше, который пропустил любую дальнейшую строку, в отличие от подстек что не так.

Michael Hampton avatar
флаг cz
Это серьезное изменение, имеющее последствия для безопасности; убедитесь, что это _действительно_ то, что вы хотите, прежде чем делать это.
флаг cn
Действительно, но мы уже контролируем, кто имеет доступ к машине, может запускать `su` или `sudo` с группами LDAP.

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

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