Рейтинг:0

Ansible получает время ожидания аутентификации при использовании учетной записи домена на сервере, на котором работает winbind

флаг ge

Я установил новый контроллер домена, размещенный на Samba 4.11, на Ubuntu 20.04 (используя пакеты Ubuntu). Я настроил аутентификацию системы для использования учетных данных AD с использованием winbind. На других (членских) серверах я обычно использую sssd вместо winbind, но, насколько я понимаю, я не могу использовать sssd на сервере, на котором запущена samba в качестве контроллера домена.

Сначала работает нормально. Сервер работает как DC, как и должно быть. Я могу войти со своими учетными данными AD на сервер с помощью SSH.

Проблема в том, что я подключаюсь к этой машине с помощью Ansible. Ansible делает много соединений SSH одно за другим (по одному для каждой задачи). Он также почти каждый раз поднимается как root с помощью sudo. При запуске моей пьесы происходит сбой при выполнении случайной задачи из-за этой ошибки Тайм-аут (62 с) ожидания запроса на повышение привилегий. Если я попытаюсь вручную подключиться к SSH в этот момент, это просто тайм-аут. Через несколько секунд я снова могу войти в систему.

Проблема не возникает при использовании локальной учетной записи вместо учетной записи домена.

Единственные соответствующие журналы, которые я нашел, находятся в log.windbindd журнал:

[2021/10/12 16:06:57.312913, 5] ../../source3/winbindd/winbindd.c:1204(remove_timed_out_clients)
  Истекло время простоя клиента, завершение работы sock 38, pid 568531
[2021/10/12 16:07:09.933655, 3] ../../source3/winbindd/winbindd_getpwnam.c:59(winbindd_getpwnam_send)
  winbindd_getpwnam_send: [nss_winbind (567486)] getpwnam ПРИМЕР\myuserid
[2021/10/12 16:07:12.326288, 5] ../../source3/winbindd/winbindd.c:1204(remove_timed_out_clients)
  Истекло время простоя клиента, завершение работы sock 34, pid 568806
[2021/10/12 16:07:12.326413, 5] ../../source3/winbindd/winbindd.c:1209(remove_timed_out_clients)
  Время ожидания запроса клиента истекло, отключение sock 39, pid 568806
[2021/10/12 16:07:12.326451, 1] ../../source3/winbindd/winbindd_dual.c:337(wb_child_request_cleanup)
  wb_child_request_cleanup: сохранить потерянный подзапрос [0x563394622e40]
[2021/10/12 16:07:14.044393, 3] ../../source3/winbindd/winbindd_misc.c:429(winbindd_interface_version)
  winbindd_interface_version: [nss_winbind (568806)]: запросить версию интерфейса (версия = 31)
[2021/10/12 16:07:14.044847, 3] ../../source3/winbindd/winbindd_getpwnam.c:59(winbindd_getpwnam_send)
  winbindd_getpwnam_send: [nss_winbind (568806)] getpwnam ПРИМЕР\myuserid
^ С

Я написал небольшой скрипт, который просто выполняет sudo каждые 1000 мс, затем 500 мс, затем 100 мс, пытаясь эмулировать то, что делает Ansible. Я заметил, что процесс samba потребляет около 30% процессорного времени, когда скрипт настроен на цикл каждые 1000 мс, 50%, когда скрипт работает со скоростью 500 мс, и 70%, когда выполняется со скоростью 100 мс. К сожалению, мне не удалось воспроизвести тайм-аут аутентификации при запуске скрипта.

#!/бин/баш

пока [правда]; делать
  время судо эхо 1
  спать 0,1
сделано

Конфиг Самбы:

[Глобальный]
    имя netbios = DC4
    область = AD.EXAMPLE.CA
    рабочая группа = ПРИМЕР
    переадресация DNS = 10.3.0.3
    роль сервера = контроллер домена Active Directory
    idmap_ldb: использовать rfc2307 = да

    каталог pid = /run/samba
    каталог состояния = /data/samba
    директория binddns = /data/samba/bind-dns
    каталог сокета ntp signd = /data/samba/ntp_signd
    частный каталог = /data/samba/private
    путь пользователя = /data/samba/usershares

    tls включен = да
    ключевой файл tls = tls/key.pem
    файл сертификата tls = tls/cert.pem
    tls-cafile = /usr/local/share/ca-certificates/internal_ca.crt

    уровень журнала = 5
    максимальный размер журнала = 1000000

    сценарий проверки пароля = python3 /usr/local/bin/check_password_hibpwnd.py

    разрешить обновления DNS = небезопасно

    нтлм аутентификация = да

    оболочка шаблона = /bin/bash
    домашний каталог шаблона = /home/ad.example.ca/%u
    # попробовал это, чтобы уменьшить нагрузку, безрезультатно
    автономный вход в систему winbind = да
    winbind перечисление пользователей = нет
    группы enum winbind = нет    
    вложенные группы winbind = false

[вход в сеть]
    путь = /data/samba/sysvol/ad.example.ca/scripts
    только чтение = нет

[sysvol]
    путь = /данные/самба/sysvol
    только чтение = нет

nsswitch config (я только что добавил беспроигрышный для пароль и группа записи):

# /etc/nsswitch.conf
#
# Пример конфигурации функциональности переключателя службы имен GNU.
# Если у вас установлены пакеты `glibc-doc-reference' и `info', попробуйте:
# `info libc "Name Service Switch"' для получения информации об этом файле.

пароль: файлы systemd winbind
группа: файлы systemd winbind
тень: файлы
тень: файлы

хосты: файлы dns
сети: файлы

протоколы: файлы БД
услуги: файлы БД
эфиры: файлы db
rpc: файлы БД

сетевая группа: nis

Обновлять! Я обнаружил, что настройка sudo на отсутствие запроса пароля пользователя для повышения привилегий работает нормально. Это неприемлемый обходной путь, но, возможно, это может что-то сказать кому-то, что поможет диагностировать проблему.

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

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