É possível alterar uma senha do Kerberos do MIT programaticamente?

1

Primeiro de tudo, eu não sou um cara de infraestrutura, sou um desenvolvedor, então, por favor, me desculpe se eu deixar informações importantes. Eu só preciso determinar se o seguinte é possível e, em caso afirmativo, como proceder.

Quando um usuário altera sua senha do Active Directory, eu gostaria de sincronizá-lo novamente no MIT Kerberos.

Do lado do AD, vejo que há algo chamado Filtros de Senha disponíveis para execução mediante alteração de senha. Mas eu não sei nada sobre o Kerberos. É possível alterar programaticamente uma senha de usuário para algo? Se sim, o C # pode ser usado? Ou tem que ser Java ou C ++?

Qualquer ajuda é apreciada. Agradecemos antecipadamente por seus comentários.

    
por silverCORE 03.11.2016 / 18:36

1 resposta

3

When a user changes their Active Directory password, I would like to sync it back into MIT Kerberos.

Na sua forma atual, isso é muito vago para que seja realmente respondido de uma só vez.

Enviar ou "sincronizar" senhas do Active Directory para um KDC de terceiros (centro de distribuição de chaves / banco de dados) não faz parte de como o Kerberos funciona. Nem posso pensar em uma boa razão para fazê-lo. Ever.

O Active Directory usa um modelo de replicação de banco de dados pouco consistente para garantir que o banco de dados de nomes de usuário e senhas (e muito mais) seja sincronizado e atualizado de um controlador de domínio (KDC) para o próximo. Não é preciso dizer que os KDCs Kerberos do MIT não podem participar dessa replicação. (Pelo menos não em qualquer tipo de forma suportável que seja condizente com uma organização profissional.)

É tecnicamente viável realizar o que você está descrevendo, embora seja muito desaconselhado.

Is it possible to programmatically change a user password's to something?

Claro. Você pode redefinir administrativamente a senha de um usuário no Active Directory para o que quiser, quando quiser, desde que tenha os direitos para fazê-lo. Você pode fazer isso em código nativo ou em código gerenciado. Aqui está um exemplo simples:

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

A principal diferença é que "alterar" a senha de um usuário requer conhecimento da senha atual do usuário. "Redefinir" a senha de um usuário pode ser feito sem o conhecimento da senha atual do usuário, mas requer privilégios administrativos.

Não sei o que isso tem a ver com a sua pergunta original de sincronização de senhas do Active Directory para um banco de dados não-AD.

From the AD side, I see that there's something called Password Filters

Os filtros de senha só podem ser desenvolvidos em código nativo (C ou C ++). Nenhum código gerenciado permitido. Filtros de senha são módulos que são carregados no processo Lsass em todos os controladores de domínio. Você deve tomar cuidado Extreme se planeja desenvolver um, pois se você causar uma falha em lsass.exe, todo o controlador de domínio ficará inativo. E se um deles travar por causa do seu filtro de senhas, todos eles provavelmente falharão, já que todos eles estão executando o mesmo filtro de senhas. E se todos os seus controladores de domínio falharem simultaneamente, toda a sua empresa estará inativa.

Sim, você poderia, teoricamente, usar um filtro de senha. O filtro de senha pode registrar todas as alterações de senha que ocorram em um arquivo de texto ou em um banco de dados separado. Ou pode transmitir a senha para outro servidor pela rede. Como você escolhe transmitir e proteger a senha, depende inteiramente de você. É melhor você usar o TLS no mínimo. Eu juro que se você transmitir ou armazenar as senhas em texto simples, eu irei encontrá-lo no inferno e torturá-lo eu mesmo.

(Brincadeira sobre essa última parte.)

    
por 04.11.2016 / 16:24