A entrada de nome principal do serviço de integração LDAP do Active Directory 2012 está desaparecendo?

8

Criando serviço Python para consultar atributos do AD

Estou integrando nosso AD a serviços da Web executando Python no linux usando Python-LDAP sobre SASL (DIGEST-MD5) para consultar atributos de usuário do AD 2012 (divisão, departamento, extensão de telefone, email, etc.). Depois de resolver os problemas específicos do meu serviço em relação a um AD 2003, comecei a encontrar um erro de SPN em nosso novo AD 2012, que o digest-uri não correspondia a nenhum SPN no servidor. Eu fiz uma referência cruzada à lista SPN dos dois servidores e eles contêm análogos idênticos um ao outro.

O erro: O digest-uri não corresponde a nenhum SPN LDAP registrado para este servidor

O conserto?

Isso foi corrigido executando:

setspn -A ldap/<Domain_Name> <Computer_Name>

Observe que a criação de uma conta de serviço não corrigiu meu erro de SPN, mesmo quando o seguinte comando foi executado:

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

simple_bind_s () não precisa de SPN, sasl_interactive_bind_s () precisa de SPN

Somente a adição do SPN à lista de SPN da máquina local funcionou para o meu serviço Python-LDAP usando sasl_interactive_bind_s (). Também devo observar que a etapa SPN pode ser ignorada se eu usar simple_bind_s (), mas esse método envia credenciais em texto não criptografado, o que é inaceitável.

No entanto, notei que o registro só permanece na lista do SPN por cerca de um minuto antes de desaparecer? Não há erros quando executo o comando setspn, os logs de eventos estão completamente vazios, não há duplicatas em nenhum lugar, verificados com a pesquisa -F em toda a floresta na base dn e nada. Eu adicionei e tentei adicionar novamente e remover e movi o SPN de um objeto para outro para verificar se ele não está oculto em nenhum lugar, mas no segundo que adiciono o objeto em qualquer lugar e depois tento adicioná-lo, notifico uma duplicata. Portanto, estou muito confiante de que não há uma duplicata oculta em algum lugar.

The Hack

Por enquanto, tenho uma tarefa agendada reexecutando o comando para manter o registro na lista, para que meu serviço funcione apropriadamente chamado "SPN Hack"

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

até que eu descubra por que o SPN está sendo limpo da lista.

Não sou o administrador principal desse AD em particular. O administrador poderia ter um serviço em execução que sincroniza o SPN de outro serviço no AD e não o conhece? Meu título é desenvolvedor da Web, não como desculpa, mas para explicar minha ignorância em relação ao Active Directory. Disseram-me para fazer do AD o usuário mestre do banco de dados e tenho lido muito, mas não consigo encontrar em nenhum lugar onde as pessoas estejam tendo problemas com o SPN sendo 'substituído' ou 'limpo' periodicamente e nenhum dos Os administradores estão muito familiarizados com o SPN fora das entradas do SQLServer.

Por que eu preciso do hack?

Até agora, meu hack não parece ter causado problemas a nenhum usuário ou serviço e não gerou nenhum erro. Portanto, o administrador diz que ele apenas o deixa executar e eu continuarei procurando. Mas então eu me encontro na situação precária de escrever um serviço cuja implementação é construída, essencialmente um cron hack / shiver ... Portanto, qualquer ajuda seria apreciada.


Atualizar

Após uma conversa com o administrador de sistemas, ele concordou que criar um serviço em cima de um hack não é uma solução; portanto, ele me deu permissão para criar um serviço local com criptografia de terminal que eu possa usar para meus propósitos, o resultado é o mesmo . Vou ficar de olho no que está causando o SPN. Ligações locais não são um problema ao usar o Python-LDAP e o serviço local já está em funcionamento após apenas uma hora. É lamentável que eu esteja essencialmente incorporando a funcionalidade incorporada no LDAP, mas fazemos o que temos que fazer.

Melignus
fonte
Bem, isso é um mistério. Os SPNs geralmente não desaparecem por conta própria. Aposto que um aplicativo está excluindo-o. O Python-Ldap registra automaticamente seus próprios SPNs? Se sim, está fazendo isso corretamente? Além disso, pode ser necessário configurar a auditoria de acesso a objetos no controlador de domínio para tentar descobrir quem é responsável por excluir o SPN a cada dois minutos.
perfil completo de Ryan Ries
1
O Python-LDAP não registra seu próprio SPN. Fiz uma transferência de dados dos meus serviços de teste e, em termos de rede, parece apenas um fluxo de login padrão, agora para saber se a solicitação inicial registraria ou não isso no lado do AD que parece derrotar o objetivo do SPN em primeiro lugar? Eu sei que o vínculo de texto não criptografado funciona sem o spn, é apenas a solicitação sasl que falha sem o registro SPN no AD ... Comecei a procurar serviços que possam estar gerenciando o SPN fora, quase parece uma limpeza e O script de substituição está sendo executado em algum lugar ...
Melignus 19/11/2013
Ei, você descobriu por que seu SPN estava desaparecendo? Parece que temos o mesmo comportamento depois de algumas horas ... #
David

Respostas:

6

Este é um fenômeno verdadeiramente interessante (e irritante) e insisto em que descubramos o que está acontecendo aqui.

Felizmente, o Windows Server possui algumas políticas de auditoria refinadas desde 2008, e podemos usar a auditoria para rastrear quem fez isso. Para fazer isso, precisaremos:

  1. Descubra onde ocorre a modificação do SPN
  2. Habilitar auditoria de alteração de objeto do AD DS
  3. Defina uma ACE de auditoria no objeto
  4. Reproduzir o erro
  5. Inspecione o log de segurança no controlador de domínio ofensor

Descubra onde ocorre a modificação do SPN:

Abra um prompt de comando elevado em um controlador de domínio e emita este comando:

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

A saída conterá o nome do controlador de domínio que originalmente escreveu a versão atual do valor dos atributos servicePrincipalName: repadmin iz boss

Habilite a auditoria de alteração de objeto do AD DS:

Se uma política de auditoria global ainda não estiver definida, você poderá fazer essa alteração na política de segurança local no Controlador de Domínio identificado na etapa anterior

Abra o Console de Gerenciamento de Diretiva de Grupo ( gpmc.msc) e localize Default Domain Controllers Policye edite-o.

  1. Vamos para Computer Configuration -> Windows Settings -> Security Settings
  2. Selecionar e expandir Local Policies -> Security Options
  3. Verifique se Auditoria: forçar configurações da subcategoria da política de auditoria ... está definida como Ativado Forçar subcategorias de auditoria nas quais categorias clássicas já estão sendo aplicadas
  4. Selecionar e expandir Advanced Audit Policy -> Audit Policies -> DS Access
  5. Certifique-se que auditar alterações de Serviços Diretório está definido para pelo menos Sucesso Alterações no serviço de diretório de auditoria

Defina uma ACE de auditoria no objeto:

Abra Usuários e computadores do Active Directory ( dsa.msc) e verifique a configuração "Recursos avançados" no menu "Exibir".
Navegue até o objeto de conta do computador, clique com o botão direito do mouse e selecione Propriedades. Escolha a guia Segurança e clique no botão "Avançado".

No prompt, selecione a guia Auditoria e verifique se "Gravar todas as propriedades" está sendo auditado para Todos . Caso contrário, ou em caso de dúvida, adicione uma nova entrada:

  1. Pressione Adicionar .
  2. Entrada "Everyone" como principal de destino
  3. Selecione "Sucesso" como o tipo
  4. Role para baixo em Propriedades e marque "Write servicePrincipalName"
  5. Pressione OK para adicionar a entrada e sair do ADUC

( Se você é preguiçoso, basta selecionar "Gravar todas as propriedades" )

Reproduzir o erro

Da sua pergunta, parece que o SPN é excluído a cada minuto, então esse é provavelmente o passo mais fácil. Faça uma aula de música de 1 minuto nesse meio tempo.

Inspecione o log de segurança no controlador de domínio ofensor

Agora que passou um minuto, vamos inspecionar o log de segurança no Controlador de Domínio identificado como o originador na etapa 1. Isso pode ser complicado em domínios grandes, mas a filtragem pode ajudar com isso:

  1. Abra o Visualizador de Eventos e navegue até Windows Logs -> Security
  2. No painel direito, selecione Filtrar registro atual
  3. No campo de entrada que diz " <All Event IDs>", entrada 5136 (este é o ID do evento para modificação do objeto de diretório)

Agora você deve conseguir encontrar uma entrada de evento para cada alteração no servicePrincipalNameatributo na conta do computador.

Identifique o "Assunto" responsável pela alteração e veja de onde ela veio. Mate esse processo / máquina / conta com fogo!

Se o assunto for identificado como SYSTEM, ANONYMOUS LOGONou uma descrição igualmente genérica, estamos lidando com o processamento interno no próprio controlador de domínio e precisaremos interromper algum Log de Diagnóstico NTDS para descobrir o que está acontecendo. Atualize a pergunta se for esse o caso

Mathias R. Jessen
fonte
Eu estava vendo exatamente o mesmo problema na minha tentativa de corrigir o mesmo problema de LDAP SPN. Eu segui suas sugestões, mas vejo apenas minhas modificações (bem-sucedidas) do SPN e nenhum registro de sua remoção subsequente.
Grisha Levit