Я интегрирую нашу AD с веб-службами, работающими на Python в Linux, используя Python-LDAP через SASL (DIGEST-MD5) для запроса атрибутов пользователя AD 2012 (подразделение, отдел, добавочный номер телефона, электронная почта и т. Д.). После отработки специфических особенностей моей службы и AD 2003 я начал сталкиваться с ошибкой SPN для нашего нового AD 2012, когда digest-uri не соответствовал ни одному SPN на сервере. Я сделал перекрестные ссылки на список SPN для обоих серверов, и они содержат идентичные аналоги друг друга.
Это было исправлено запуском:
setspn -A ldap/<Domain_Name> <Computer_Name>
Обратите внимание, что создание учетной записи службы не устранило мою ошибку SPN, даже когда была запущена следующая команда:
setspn -A ldap/<Domain_Name> <Domain_Name>/<Service_Account_Name>
Для моей службы Python-LDAP с помощью sasl_interactive_bind_s () работало только добавление SPN в список SPN локального компьютера. Я также должен отметить, что шаг SPN можно пропустить, если я использую simple_bind_s (), но этот метод отправляет учетные данные в открытом виде, что недопустимо.
Однако я заметил, что запись остается в списке SPN только около минуты, прежде чем исчезнет? Когда я запускаю команду setspn, ошибок нет, журналы событий полностью пусты, нигде нет дубликатов, проверено с помощью -F поиском по всему лесу по базовому dn и ничего. Я добавил и попытался повторно добавить, удалить и переместить SPN от объекта к объекту, чтобы убедиться, что он нигде не прячется, но когда я добавляю объект в любом месте, а затем пытаюсь повторно добавить, он уведомляет меня о дубликате. Так что я очень уверен, что где-то не спрятан дубликат.
На данный момент у меня есть запланированная задача, повторно запускающая команду, чтобы сохранить запись в списке, поэтому моя служба будет работать с соответствующим названием «SPN Hack»
cmd.exe /C "setspn -A ldap/<Domain_Name> <Computer_Name>"
пока я не выясню, почему SPN убирается из списка.
Я не являюсь основным администратором этой конкретной AD, может ли администратор иметь запущенную службу, которая синхронизирует SPN с другой службы в AD, и не знать об этом? Мое звание - веб-разработчик, не для оправдания, а для объяснения моего незнания в вопросах Active Directory. Мне сказали сделать AD главной пользовательской базой данных, и я много читал, но я не могу найти нигде, где у людей возникает проблема с периодической перезаписью или очисткой SPN и ни одной из администраторы хорошо знакомы с SPN вне записей SQLServer.
Пока что мой взлом, похоже, не вызвал каких-либо проблем для пользователей или служб и не вызвал никаких ошибок, поэтому администратор говорит, что он просто разрешит ему работать, а я буду продолжать поиск. Но затем я оказываюсь в опасной ситуации, когда пишу сервис, реализация которого основана на взломе / дрожании cron ... Так что любая помощь будет принята с благодарностью.
После разговора с системным администратором он согласился с тем, что создание службы на основе взлома не является решением, поэтому он дал мне разрешение развернуть локальную службу с шифрованием конечных точек, которую я могу использовать для своих целей, результат тот же . Я буду следить за тем, что заставляет SPN очищаться. Локальные привязки не являются проблемой при использовании Python-LDAP, и локальная служба уже запущена и работает примерно через час. К сожалению, я, по сути, оборачиваю функциональность, встроенную в LDAP, но мы делаем то, что должны.
Это действительно интересное (и раздражающее) явление, и я настаиваю на том, чтобы мы выяснили, что здесь происходит.
К счастью, с 2008 года в Windows Server есть несколько детализированных политик аудита, и мы можем использовать аудит для отслеживания ВОЗ сделал это. Для этого нам необходимо:
Откройте командную строку с повышенными привилегиями на контроллере домена и введите эту команду:
repadmin /showobjmeta . "CN=computerAccount,DC=domain,DC=local"|findstr servicePricipalName
Вывод будет содержать имя контроллера домена, который изначально написал текущую версию значения атрибутов servicePrincipalName:
Если глобальная политика аудита еще не определена, вы можете внести это изменение в локальную политику безопасности на контроллере домена, указанном на предыдущем шаге.
Откройте консоль управления групповой политикой (gpmc.msc
) и найдите Default Domain Controllers Policy
и отредактируйте его.
Computer Configuration -> Windows Settings -> Security Settings
Local Policies -> Security Options
Advanced Audit Policy -> Audit Policies -> DS Access
Откройте Active Directory - пользователи и компьютеры (dsa.msc
) и проверьте настройку «Дополнительные функции» в меню «Просмотр».
Перейдите к объекту учетной записи компьютера, щелкните его правой кнопкой мыши и выберите «Свойства». Выбрать Безопасность вкладку и нажмите кнопку «Дополнительно».
В подсказке выберите Аудиторская проверка вкладка и убедитесь, что "Записать все свойства" проверяется для Все. Если нет, или если вы сомневаетесь, добавьте новую запись:
(Если вам лень, вы можете просто выбрать «Записать все свойства».)
Из вашего вопроса кажется, что SPN удаляется каждую минуту или около того, поэтому это, вероятно, самый простой шаг. Взять 1-минутный урок музыки в это время.
Теперь, когда прошла минута, давайте проверим журнал безопасности на контроллере домена, идентифицированном как отправитель на шаге 1. Это может быть проблемой для больших доменов, но фильтрация может помочь в этом:
Windows Logs -> Security
<All Event IDs>
", ввод 5136 (это идентификатор события для модификации объекта каталога)Теперь вы сможете найти запись о событии для каждого изменения в servicePrincipalName
атрибут учетной записи компьютера.
Определите «субъекта», ответственного за изменение, и посмотрите, откуда оно взялось. Убейте этот процесс / машину / аккаунт огнем!
Если субъект идентифицирован как SYSTEM
, ANONYMOUS LOGON
или аналогичное общее описание, мы имеем дело с внутренней обработкой на самом контроллере домена, и нам нужно будет вывести некоторый журнал диагностики NTDS, чтобы узнать, что происходит. Пожалуйста, обновите вопрос, если это так