Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Отправка или «синхронизация» паролей из Active Directory в сторонний центр распространения ключей (центр распределения ключей / база данных) не является частью работы 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 на всех контроллерах домена. Вы должны взять Экстремальный будьте осторожны, если вы планируете его разрабатывать, поскольку, если вы вызываете сбой в lsass.exe, весь контроллер домена выходит из строя. И если один из них выйдет из строя из-за вашего фильтра паролей, то, вероятно, все они выйдут из строя, поскольку все они используют тот же самый фильтр паролей. И если все ваши контроллеры домена выходят из строя одновременно, вся ваша компания падает.

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

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