Création d'un service Python pour interroger des attributs AD
J'intègre notre AD avec des services Web exécutant Python sur linux en utilisant Python-LDAP sur SASL (DIGEST-MD5) pour interroger les attributs utilisateur AD 2012 (division, département, extension téléphonique, e-mail, etc.). Après avoir déterminé les anomalies spécifiques à mon service par rapport à un AD 2003, j'ai commencé à rencontrer une erreur SPN par rapport à notre nouvel AD 2012, que le digest-uri ne correspondait à aucun SPN sur le serveur. J'ai croisé la liste SPN pour les deux serveurs et ils contiennent des analogues identiques l'un de l'autre.
L'erreur: le résumé-uri ne correspond à aucun SPN LDAP enregistré pour ce serveur
Le correctif?
Cela a été corrigé en exécutant:
setspn -A ldap/<Domain_Name> <Computer_Name>
Notez que la création d'un compte de service n'a pas résolu mon erreur SPN même lorsque la commande suivante a été exécutée:
setspn -A ldap/<Domain_Name> <Domain_Name>/<Service_Account_Name>
simple_bind_s () n'a pas besoin de SPN, sasl_interactive_bind_s () a besoin de SPN
Seul l'ajout du SPN à la liste SPN de l'ordinateur local a fonctionné pour mon service Python-LDAP à l'aide de sasl_interactive_bind_s (). Je dois également noter que l'étape SPN peut être ignorée si j'utilise simple_bind_s () mais cette méthode envoie des informations d'identification en texte clair, ce qui est inacceptable.
Cependant, j'ai remarqué que l'enregistrement ne reste sur la liste SPN que pendant environ une minute avant de disparaître? Il n'y a aucune erreur lorsque j'exécute la commande setspn, les journaux d'événements sont complètement vides, il n'y a aucun doublon nulle part, vérifié avec la recherche à l'échelle de la forêt -F sur le dn de base et rien. J'ai ajouté et essayé de rajouter et de supprimer et de déplacer le SPN d'un objet à un autre pour vérifier qu'il ne se cache nulle part, mais la seconde j'ajoute l'objet n'importe où, puis j'essaye de le rajouter, il m'informe d'un doublon. Je suis donc très confiant qu'il n'y a pas de doublon caché quelque part.
The Hack
Pour l'instant, j'ai une tâche planifiée réexécutant la commande pour conserver l'enregistrement sur la liste afin que mon service fonctionne correctement nommé "SPN Hack"
cmd.exe /C "setspn -A ldap/<Domain_Name> <Computer_Name>"
jusqu'à ce que je puisse découvrir pourquoi le SPN est nettoyé de la liste.
Je ne suis pas l'administrateur principal de cette AD particulière, l'administrateur peut-il avoir un service en cours d'exécution qui synchronise le SPN à partir d'un autre service sur l'AD et ne pas en être conscient? Mon titre est Développeur Web, non pas comme excuse mais pour expliquer mon ignorance en matière d'Active Directory. On m'a dit de faire de l'AD la base de données utilisateur maître et j'ai beaucoup lu, mais je ne trouve nulle part où les gens ont un problème avec le SPN étant «écrasé» ou «nettoyé» périodiquement et aucun des les administrateurs connaissent très bien le SPN en dehors des entrées SQLServer.
Pourquoi ai-je besoin du hack?
Jusqu'à présent, mon piratage ne semble pas avoir causé de problèmes pour les utilisateurs ou les services et n'a généré aucune erreur, donc l'administrateur dit qu'il va simplement le laisser fonctionner et je continuerai à chercher. Mais alors je me retrouve dans la situation précaire d'écrire un service dont l'implémentation est construite, essentiellement un cron hack / shiver ... Donc, toute aide serait appréciée.
Mise à jour
Après une conversation avec l'administrateur système, il a convenu que la création d'un service au-dessus d'un hack n'est pas une solution, il m'a donc donné la permission de créer un service local avec un cryptage de point de terminaison que je peux utiliser à mes fins, le résultat est le même . Je garderai un œil sur ce qui cause le nettoyage du SPN. Les liaisons locales ne sont pas un problème en utilisant Python-LDAP et le service local est déjà opérationnel après seulement une heure environ. Il est regrettable que j'encapsule essentiellement les fonctionnalités intégrées à LDAP, mais nous faisons ce que nous devons faire.