Я установил новый контроллер домена, размещенный на 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 на отсутствие запроса пароля пользователя для повышения привилегий работает нормально. Это неприемлемый обходной путь, но, возможно, это может что-то сказать кому-то, что поможет диагностировать проблему.