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

我们运行一个多目录环境(AD和OpenLDAP)并通过一个内部webapp执行密码同步。 这很好,因为我们已经禁止用户通过OpenLDAP更改自己的密码,AD只能通过less数需要AD的服务来访问。

不过,我们现在正在考虑允许PC连接到AD域。 最初,我认为为用户禁用密码更改就像更改帐户configuration期间我们分配的初始userAccountControl LDAP属性一样简单。 事实certificate,这并不像我设想的那么简单。

我们目前使用Python和pythonldap进行帐户configuration(下面的代码),根据Microsoft文档 ,我们将userAccountControl设置为66048(普通帐户并且不会过期密码)。 我试着把它改为66112(66048 +禁用用户密码更改),但AD没有保留该值,而是将其logging为66048。

有没有人做过这样的事情? 我希望通过在AD上使用Python或set-and-forget-it设置来实现它。

仅供参考:以下是帐户configurationPython代码的外观:

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, ) 

我不是一个Windowspipe理员,但这不是一个组策略的东西? 简单的谷歌search产生http://support.microsoft.com/kb/309799 ,这似乎几乎完全是你想要的。 这将是“一劳永逸”的模式。

另外, 这个 vbscripts声称做你想做的事情。

从你链接的文件中:

PASSWD_CANT_CHANGE

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

财产标志描述:

PASSWD_CANT_CHANGE – 用户不能更改密码。 这是用户对象的权限。

换句话说,位掩码中的特定位不能被设置,并且在计算用户对象的权限之后被返回。

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

你要做的是拒绝SELF伪用户访问来更改密码。 最好的办法是在整个OU上configuration权限来限制密码的更改。 从这里,将所有相关的用户对象移动到此OU中,并确保用户对象从OUinheritance其权限。

如果您在设置安全性方面遇到问题,请确保已在ADUC中启用了“高级function”(查看 – >高级function)。

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

我不知道如何实现这个使用程序,但在Active Directory用户和计算机。 select用户并转到属性。 有“用户不能更改密码”选项的选项。

你也可以检查下面的url,如果有帮助:

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