禁用用户在 Active Directory 上更改密码的能力

禁用用户在 Active Directory 上更改密码的能力

我们运行多目录环境(AD 和 OpenLDAP)并通过内部 Web 应用执行密码同步。这种方法效果很好,因为我们已禁止用户通过 OpenLDAP 更改自己的密码,并且只有少数需要 AD 的服务才能访问 AD。

但是,我们现在正在研究允许 PC 连接到 AD 域。最初,我认为禁用用户密码更改就像更改初始密码一样简单用户帐户控制我们在帐户配置期间分配的 LDAP 属性。事实证明这并不像我想象的那么简单。

我们目前使用 Python 和python-ldap对于帐户配置(下面的代码),PerMicrosoft 文档, 我们设置用户帐户控制改为 66048(普通账户,密码不会过期)。我尝试将其改为 66112(66048 + 禁用用户密码更改),但 AD 没有保留该值,而是将其记录为 66048。

以前有人做过这样的事吗?我更愿意使用 Python 或 AD 上的“一劳永逸”设置来实现它。

仅供参考:目前帐户配置 Python 代码如下所示:

import ldap

l = ldap.initialize(server)
l .simple_bind_s(admin_cn, admin_pass)

attributes = [
    ('displayName', login),
    ('sAMAccountName', login),
    ('cn', login),
    ('givenName', fn),
    ('sn', ln),
    ('name', full_name),
    ('userPrincipalName', '%[email protected]' % login),
    ('objectClass', ['person', 'top', 'organizationalPerson', 'user']),
    ('userAccountControl', '66048'), # <--- Line I thought I could change but not working as expected
    ('unicodePwd', encoded_password)
]

l.add_s(
    'cn=%s,ou=users,dc=example,dc=com' % login,
    attributes,
)

答案1

我不是 Windows 管理员,但这不正是组策略的用途吗?在 Google 上简单搜索一下,结果如下:http://support.microsoft.com/kb/324744,这似乎几乎完全符合您的要求。这就是“设置后就忘记”模型。

还,vbscripts 旨在做您想做的事情。

答案2

从您链接的文档中:

密码无法更改

注意:您不能通过直接修改 UserAccountControl 属性来分配此权限。有关如何以编程方式设置权限的信息,请参阅“属性标志说明”部分。

以及属性标志说明:

PASSWD_CANT_CHANGE - 用户无法更改密码。这是用户对象的权限。

或者换句话说,位掩码中的特定位无法设置,并且在计算用户对象的权限后返回。

该文档还链接有http://msdn.microsoft.com/en-us/library/aa746398.aspx,描述了如何以编程方式调整用户对象的权限。

您要做的就是拒绝 SELF 伪用户更改密码的权限。最好的方法是配置整个 OU 的权限以限制密码更改。从这里开始,将所有相关用户对象移到此 OU,并确保用户对象从 OU 继承其权限。

如果您在设置安全性时遇到问题,请确保在 ADUC 中启用了高级功能(查看 --> 高级功能)。

答案3

与 maniargaurav 的解决方案类似,但您可以使用 PowerShell 以编程方式执行此操作(如果是 Server 2008 R2 或使用 Qwest AD cmdlet链接文本) 或 VBscript。如果您现在使用 Python,则枚举所有用户并执行如下脚本应该没有问题(来自 MS 的脚本专家)链接文本

答案4

我不确定如何使用程序在 Active Directory 用户和计算机中实现此目的。选择用户并转到属性。有“用户无法更改密码”选项。

您还可以查看以下 URL 是否有帮助:

http://msdn.microsoft.com/en-us/library/ms680832(VS.85).aspx

相关内容