¿Está desapareciendo la entrada del nombre principal del servicio de integración LDAP de Active Directory 2012?

8

Crear un servicio de Python para consultar atributos de AD

Estoy integrando nuestro AD con servicios web que ejecutan Python en Linux usando Python-LDAP sobre SASL (DIGEST-MD5) para consultar los atributos de usuario de AD 2012 (división, departamento, extensión de teléfono, correo electrónico, etc.). Después de resolver los problemas específicos de mi servicio en un AD 2003, comencé a encontrarme con un error de SPN en nuestro nuevo AD 2012, que el resumen de uri no coincidía con ningún SPN en el servidor. He cruzado la lista SPN para ambos servidores y contienen análogos idénticos entre sí.

El error: el digest-uri no coincide con ningún LDAP SPN registrado para este servidor

¿La solución?

Esto se solucionó ejecutando:

setspn -A ldap/<Domain_Name> <Computer_Name>

Tenga en cuenta que crear una cuenta de servicio no solucionó mi error de SPN incluso cuando se ejecutó el siguiente comando:

setspn -A ldap/<Domain_Name> <Domain_Name>/<Service_Account_Name>

simple_bind_s () no necesita SPN, sasl_interactive_bind_s () necesita SPN

Solo agregar el SPN a la lista de SPN de la máquina local funcionó para mi servicio Python-LDAP usando sasl_interactive_bind_s (). También debo tener en cuenta que el paso SPN se puede omitir si uso simple_bind_s () pero este método envía credenciales en texto sin formato que es inaceptable.

Sin embargo, noté que el registro solo permanece en la lista SPN durante aproximadamente un minuto antes de desaparecer. No hay errores cuando ejecuto el comando setspn, los registros de eventos están completamente vacíos, no hay duplicados en ninguna parte, se verifica con la búsqueda de -F en todo el bosque en la base dn y nada. Agregué e intenté volver a agregar y eliminar y moví el SPN de un objeto a otro para verificar que no se esconde en ningún lado, pero en el segundo que agrego el objeto en cualquier lugar y luego intento volver a agregarlo, me notifica un duplicado. Así que estoy muy seguro de que no hay un duplicado oculto en alguna parte.

El truco

Por ahora tengo una tarea programada que vuelve a ejecutar el comando para mantener el registro en la lista para que mi servicio funcione correctamente llamado "Hack SPN"

cmd.exe /C "setspn -A ldap/<Domain_Name> <Computer_Name>"

hasta que pueda averiguar por qué se está limpiando el SPN de la lista.

No soy el administrador principal de este AD en particular, ¿podría el administrador tener un servicio en ejecución que sincronice el SPN de otro servicio en el AD y no estar al tanto? Mi título es Desarrollador web, no como una excusa, sino para explicar mi ignorancia en asuntos de Active Directory. Me han dicho que convierta el AD en el DB maestro de usuario y he estado leyendo mucho, pero no puedo encontrar ningún lugar donde la gente tenga un problema con el SPN que se 'sobrescribe' o 'limpia' periódicamente y ninguno de los Los administradores están muy familiarizados con SPN fuera de las entradas de SQLServer.

¿Por qué necesito el hack?

Hasta ahora, mi pirateo no parece haber causado ningún problema a ningún usuario o servicio y no ha generado ningún error, por lo que el administrador dice que simplemente lo dejará correr y seguiré buscando. Pero luego me encuentro en la precaria situación de escribir un servicio cuya implementación se basa, esencialmente, un truco / escalofrío cron ... Entonces, cualquier ayuda sería apreciada.


Actualizar

Después de una conversación con el administrador del sistema, acordó que construir un servicio sobre un hack no es una solución, por lo tanto, me dio permiso para activar un servicio local con cifrado de punto final que puedo usar para mis propósitos, el resultado es el mismo . Estaré atento a lo que está causando que el SPN desaparezca. Los enlaces locales no son un problema al usar Python-LDAP y el servicio local ya está en funcionamiento después de solo una hora más o menos. Es lamentable que esencialmente esté envolviendo la funcionalidad integrada en LDAP, pero hacemos lo que tenemos que hacer.

Melignus
fuente
Bueno, eso es un misterio. Los SPN no suelen desaparecer solos. Apuesto a que una aplicación la está eliminando. ¿Python-Ldap registra automáticamente sus propios SPN? Si es así, ¿lo está haciendo correctamente? Más allá de eso, es posible que deba configurar la auditoría de acceso a objetos en el controlador de dominio para intentar identificar quién es responsable de eliminar el SPN cada dos minutos.
Ryan Ries
1
Python-LDAP no registra su propio SPN. He sacado el máximo provecho de mis servicios de prueba y en cuanto a la red, solo parece un flujo de inicio de sesión estándar, ahora en cuanto a si la solicitud inicial registraría eso en el lado de AD que parece que anularía el propósito del SPN ¿en primer lugar? Sé que el enlace de texto sin formato funciona sin spn, es solo la solicitud de sasl que falla sin el registro SPN en el AD ... He comenzado a buscar servicios que podrían estar administrando el SPN afuera, casi se siente como un borrado y guión reemplazar está ejecutando algún lugar ...
Melignus
Oye, ¿descubriste por qué desaparecía tu SPN? Parece que tenemos el mismo comportamiento después de unas horas ...
David

Respuestas:

6

Este es un fenómeno verdaderamente interesante (y molesto) e insisto en que descubramos lo que está sucediendo aquí.

Afortunadamente, Windows Server tiene algunas políticas de auditoría detalladas desde 2008, y podemos utilizar la auditoría para rastrear quién hizo esto. Para hacerlo, necesitaremos:

  1. Averigüe dónde se produce la modificación SPN
  2. Habilitar la auditoría de cambio de objeto de AD DS
  3. Establecer una auditoría ACE en el objeto
  4. Reproducir el error
  5. Inspeccione el registro de seguridad en el DC ofensor

Averigüe dónde se produce la modificación de SPN:

Abra un símbolo del sistema elevado en un controlador de dominio y emita este comando:

repadmin /showobjmeta . "CN=computerAccount,DC=domain,DC=local"|findstr servicePricipalName

El resultado contendrá el nombre del controlador de dominio que escribió originalmente la versión actual del valor de los atributos servicePrincipalName: repadmin iz boss

Habilite la auditoría de cambio de objeto de AD DS:

Si una política de auditoría global aún no está definida, puede realizar este cambio en la política de seguridad local en el controlador de dominio identificado en el paso anterior

Abra la Consola de administración de directivas de grupo ( gpmc.msc), localícela Default Domain Controllers Policyy edítela.

  1. Ir Computer Configuration -> Windows Settings -> Security Settings
  2. Seleccionar y expandir Local Policies -> Security Options
  3. Asegúrese de que Auditoría: forzar configuración de subcategoría de política de auditoría ... esté establecida en Habilitada Forzar subcategorías de auditoría donde las categorías clásicas ya se están aplicando
  4. Seleccionar y expandir Advanced Audit Policy -> Audit Policies -> DS Access
  5. Asegúrese de que los cambios del servicio de directorio de auditoría estén configurados como mínimo en Éxito Auditar los cambios del servicio de directorio

Establezca una auditoría ACE en el objeto:

Abra Usuarios y equipos de Active Directory ( dsa.msc) y verifique la configuración de "Funciones avanzadas" en el menú "Ver".
Navegue hasta el objeto de la cuenta de la computadora, haga clic con el botón derecho y seleccione Propiedades. Elija la pestaña Seguridad y presione el botón "Avanzado".

En el indicador, seleccione la pestaña Auditoría y asegúrese de que "Escribir todas las propiedades" esté siendo auditado para Todos . Si no, o si tiene dudas, agregue una nueva entrada:

  1. Presione Agregar .
  2. Ingrese "Todos" como el principal objetivo
  3. Seleccione "Éxito" como tipo
  4. Desplácese hacia abajo en Propiedades y marque "Escribir servicePrincipalName"
  5. Presione OK para agregar la entrada y salir de ADUC

( Si eres flojo, solo puedes seleccionar "Escribir todas las propiedades" )

Reproducir el error

Según su pregunta, parece que el SPN se elimina cada minuto más o menos, por lo que este es probablemente el paso más fácil. Tome una lección de música de 1 minuto mientras tanto.

Inspeccione el registro de seguridad en el DC ofensor

Ahora que ha pasado un minuto, inspeccionemos el registro de seguridad en el Controlador de dominio identificado como el creador en el paso 1. Esto puede ser un problema en dominios grandes, pero el filtrado puede ayudar con esto:

  1. Abra el Visor de eventos y navegue hasta Windows Logs -> Security
  2. En el panel derecho, seleccione Filtrar registro actual
  3. En el campo de entrada que dice " <All Event IDs>", ingrese 5136 (este es el id del evento para la modificación del objeto de directorio)

Ahora debería poder encontrar una entrada de evento para cada cambio en el servicePrincipalNameatributo en la cuenta de la computadora.

Identifique el "Sujeto" responsable del cambio y vea de dónde vino. ¡Mata ese proceso / máquina / cuenta con fuego!

Si el tema se identifica como SYSTEM, ANONYMOUS LOGONo una descripción genérica similar, estamos tratando con el procesamiento interno en el controlador de dominio en sí, y tendremos que romper algunos registros de diagnóstico NTDS para averiguar qué está sucediendo. Por favor actualice la pregunta si este es el caso

Mathias R. Jessen
fuente
Estaba viendo exactamente el mismo problema en mi intento de solucionar el mismo problema LDAP SPN. Seguí sus sugerencias, pero solo veo mis modificaciones (exitosas) del SPN y ningún registro de su posterior eliminación.
Grisha Levit