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