Можно ли программно изменить пароль MIT Kerberos?

Прежде всего, я не специалист по инфраструктуре, я разработчик, поэтому, пожалуйста, извините, если я ухожу важная информация. Мне просто нужно определить, возможно ли следующее, и если да, то как действовать.

Когда пользователь меняет свой пароль Active Directory, я хотел бы синхронизировать его обратно с MIT Kerberos.

Со стороны AD я вижу, что есть что-то под названием Фильтры паролей , доступные для выполнения по паролю. менять. Но я ничего не знаю о Kerberos. Можно ли программно изменить пароль пользователя на что-нибудь? Если да, то можно ли использовать C #? Или это должна быть Java или C ++?

Любая помощь приветствуется. Заранее благодарим за комментарии.

1
задан 3 November 2016 в 19:36
1 ответ

Когда пользователь меняет свой пароль Active Directory, я хотел бы снова синхронизировать его с MIT Kerberos.

В его нынешней форме это слишком расплывчатое утверждение, чтобы оно действительно могло быть ответил одним выстрелом.

Отправка или «синхронизация» паролей из Active Directory в сторонний KDC (центр распределения ключей / база данных)не является частью работы Kerberos. И я не могу придумать веской причины для этого. Когда-либо.

Active Directory использует слабо согласованную модель репликации базы данных, чтобы гарантировать, что база данных имен пользователей и паролей (и многое другое) синхронизируется и поддерживается в актуальном состоянии от одного контроллера домена (KDC) до следующего. . Излишне говорить, что KDC MIT Kerberos не могут участвовать в этой репликации. (По крайней мере, никаким поддерживаемым способом, который подобает профессиональной организации.)

Технически возможно выполнить то, что вы описываете, хотя очень опрометчиво.

Возможно ли это сделать. программно изменить пароль пользователя на что-нибудь?

Конечно. Вы можете административно изменить пароль пользователя в Active Directory на все, что захотите, когда захотите, при условии, что у вас есть на это права. Вы можете сделать это либо в машинном коде, либо в управляемом коде. Вот простой пример:

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();
  }
}

Ключевое отличие состоит в том, что «изменение» пароля пользователя требует знания текущего пароля пользователя. «Сброс» пароля пользователя может быть выполнен без знания текущего пароля пользователя, но требует прав администратора.

Не уверен, какое это имеет отношение к вашему первоначальному вопросу о синхронизации паролей из Active Directory с базой данных, не относящейся к AD,

Со стороны AD я вижу, что есть нечто, называемое фильтрами паролей

Фильтры паролей могут быть разработаны только в собственном коде (C или C ++). Управляемый код запрещен. Фильтры паролей - это модули, которые загружаются в процесс Lsass на всех контроллерах домена. Вы должны проявить Extreme осторожность, если планируете его разработку, поскольку, если вы вызываете сбой в lsass.exe, весь контроллер домена выходит из строя. И если один из них выйдет из строя из-за вашего фильтра паролей, то, вероятно, все они выйдут из строя, поскольку все они используют тот же фильтр паролей. А если все ваши контроллеры домена выйдут из строя одновременно, вся ваша компания выйдет из строя.

Да, теоретически вы можете использовать фильтр паролей. Фильтр паролей может записывать каждое изменение пароля, которое происходит в текстовом файле или отдельной базе данных. Или он может передать пароль на другой сервер по сети. Как вы решите передать и защитить пароль, полностью зависит от вас. Лучше как минимум использовать TLS. Клянусь, если вы передадите или сохраните пароли в виде обычного текста, я найду вас в аду и сам буду мучить вас.

(Шучу насчет последней части.)

3
ответ дан 3 December 2019 в 18:32

Теги

Похожие вопросы