1 votes

Est-il possible de changer un mot de passe MIT Kerberos de manière programmatique ?

Tout d'abord, je ne suis pas un spécialiste de l'infrastructure, je suis un développeur, alors veuillez m'excuser si j'oublie des informations importantes. J'ai juste besoin de déterminer si ce qui suit est possible, et si oui, comment procéder.

Lorsqu'un utilisateur change son mot de passe Active Directory, je voudrais le synchroniser avec MIT Kerberos.

Du côté AD, je vois qu'il y a quelque chose appelé Filtres de mots de passe disponible pour être exécuté lors du changement de mot de passe. Mais je ne connais rien à Kerberos. Est-il possible de changer le mot de passe d'un utilisateur de manière programmatique ? Si oui, peut-on utiliser le langage C# ? Ou faut-il que ce soit Java ou C++ ?

Toute aide est appréciée. Merci d'avance pour vos commentaires.

3voto

Ryan Ries Points 54671

Lorsqu'un utilisateur change son mot de passe Active Directory, je voudrais le synchroniser avec MIT Kerberos.

Dans sa forme actuelle, cette affirmation est trop vague pour qu'on puisse y répondre en une seule fois.

L'envoi ou la "synchronisation" des mots de passe d'Active Directory à un KDC (centre de distribution de clés/base de données) tiers ne fait pas partie du fonctionnement de Kerberos. Je ne peux pas non plus penser à une bonne raison de le faire. Jamais.

Active Directory utilise un modèle de réplication de base de données faiblement cohérent pour garantir que la base de données des noms d'utilisateur et des mots de passe (et bien d'autres choses) est synchronisée et maintenue à jour d'un contrôleur de domaine (KDC) à l'autre. Il va sans dire que les KDC MIT Kerberos ne peuvent pas participer à cette réplication. (Du moins pas d'une manière supportable qui soit digne d'une organisation professionnelle).

Il est techniquement possible d'accomplir ce que vous décrivez, mais très peu judicieux.

Est-il possible de changer par programme le mot de passe d'un utilisateur en quelque chose ?

Bien sûr. Vous pouvez réinitialiser administrativement le mot de passe d'un utilisateur dans Active Directory avec ce que vous voulez, quand vous voulez, en supposant que vous avez les droits pour le faire. Vous pouvez le faire en code natif ou en code géré. Voici un exemple simple :

using (var context = new PrincipalContext( ContextType.Domain ))
{
  using (var user = UserPrincipal.FindByIdentity( context, IdentityType.SamAccountName, userName ))
  {
      user.SetPassword( "newpassword" );
      // or
      user.ChangePassword( "oldPassword", "newpassword" );
      user.Save();
  }
}

La différence essentielle est que pour "changer" le mot de passe d'un utilisateur, il faut connaître le mot de passe actuel de l'utilisateur. La "réinitialisation" du mot de passe d'un utilisateur peut être effectuée sans connaître le mot de passe actuel de l'utilisateur, mais nécessite des privilèges administratifs.

Je ne suis pas sûr que cela ait un rapport avec votre question initiale de synchronisation des mots de passe d'Active Directory vers une base de données non AD, cependant.

Du côté AD, je vois qu'il y a quelque chose appelé Filtres de mots de passe.

Les filtres de mots de passe ne peuvent être développés qu'en code natif (C ou C++). Aucun code géré n'est autorisé. Les filtres de mot de passe sont des modules qui sont chargés dans le processus Lsass sur tous les contrôleurs de domaine. Vous devez prendre Extrême Faites attention si vous envisagez d'en développer un, car si vous provoquez un plantage de lsass.exe, c'est tout le contrôleur de domaine qui s'arrête. Et si l'un d'entre eux tombe en panne à cause de votre filtre de mot de passe, ils tomberont probablement tous en panne puisqu'ils utilisent tous le même filtre de mot de passe. Et si tous vos contrôleurs de domaine tombent en panne simultanément, c'est toute votre entreprise qui est hors service.

Oui, vous pourriez théoriquement utiliser un filtre de mot de passe. Le filtre de mots de passe pourrait enregistrer chaque changement de mot de passe dans un fichier texte ou une base de données séparée. Ou bien il pourrait transmettre le mot de passe à un autre serveur sur le réseau. La façon dont vous choisissez de transmettre et de sécuriser le mot de passe vous appartient entièrement. Vous feriez mieux d'utiliser TLS au minimum. Je jure que si vous transmettez ou stockez les mots de passe en texte clair, je viendrai vous trouver en enfer et vous torturerai moi-même.

(Je plaisante sur cette dernière partie.)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X