首先,我不是基础设施专家,我是一名开发人员,所以如果我遗漏了重要信息,请原谅。我只需要确定以下内容是否可行,如果可行,如何进行。
当用户更改其 Active Directory 密码时,我希望将其同步回 MIT Kerberos。
从 AD 方面来看,我看到有一种东西叫做密码过滤器可以在密码更改时执行。但我对 Kerberos 一无所知。是否可以以编程方式将用户密码更改为其他内容?如果可以,可以使用 C# 吗?还是必须是 Java 或 C++?
任何帮助都值得感激。提前感谢您的评论。
答案1
当用户更改其 Active Directory 密码时,我希望将其同步回 MIT Kerberos。
就目前的形式而言,这一表述过于模糊,因此无法一次性给出答案。
将密码从 Active Directory 发送或“同步”到第三方 KDC(密钥分发中心/数据库)不是 Kerberos 的工作方式。我也想不出这样做的充分理由。永远都想不到。
Active Directory 使用松散一致的数据库复制模型来确保用户名和密码数据库(以及许多其他内容)在域控制器 (KDC) 之间保持同步和最新。毋庸置疑,MIT Kerberos KDC 无法参与该复制。(至少不能以任何适合专业组织的可支持方式参与。)
不过,从技术上来说,实现你所描述的是可行的非常不明智。
是否可以通过编程将用户密码更改为其他内容?
当然。您可以随时以管理员身份重置 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。我发誓,如果你以纯文本形式传输或存储密码,我会在地狱里找到你并亲自折磨你。
(最后一部分只是开个玩笑。)