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.
fonte
Respostas:
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:
Descubra onde ocorre a modificação do SPN:
Abra um prompt de comando elevado em um controlador de domínio e emita este comando:
A saída conterá o nome do controlador de domínio que originalmente escreveu a versão atual do valor dos atributos servicePrincipalName:
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 localizeDefault Domain Controllers Policy
e edite-o.Computer Configuration -> Windows Settings -> Security Settings
Local Policies -> Security Options
Advanced Audit Policy -> Audit Policies -> DS Access
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:
( 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:
Windows Logs -> Security
<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
servicePrincipalName
atributo 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 LOGON
ou 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 casofonte