[英]PHP : How to lock an active directory user account?
我有一个工作脚本,允许我解锁用户帐户(通过将lockouttime AD属性设置为0)这样的事情:
$entry["lockouttime"][0]=0;
$mod=ldap_mod_replace($ds,$dn,$entry)
现在我想做相反的事情:锁定帐户。 我已经读过lockouttime是一个系统属性,而active目录不允许我们将其值设置为0。
所以我试图用用户帐户和密码错误绑定到服务器,但这似乎不起作用。
for($i=0;$i<10;$i++){
ldap_bind($ds,$dn, "theWrongPasswd");
}
运行此将显示此错误
Warning: ldap_bind(): Unable to bind to server: Invalid credentials
但该帐户仍然可以解锁。
你知道我怎么能这样做吗? 提前致谢。
LDAP绑定尝试不计入登录尝试。 使用LogonUser和CreateProcessWithLogon等API生成登录尝试。
无法通过userAccountControl
的LOCKOUT
标志( 0x0010
)锁定用户。 此标志与AD的密码策略相关,如果登录尝试次数过多, 将由系统设置。 我自己尝试过:在设置了标志并将更改提交给AD之后,值没有改变 - 没有抛出异常。
禁用帐户将可以实现您想要做的同样的事情。 为此,您必须设置ACCOUNTDISABLE
标志( 0x0002
)。
这是所有UAC标志的列表: http : //support.microsoft.com/kb/305144/en-us
查看http://support.microsoft.com/kb/305144表明普通帐户的UAC值为512。
锁定0x0010 16 NORMAL_ACCOUNT 0x0200 512
我认为将其设置为528(锁定+普通帐户)将锁定用户帐户。
$entry["userAccountControl"][0]=512;
$mod=ldap_mod_replace($ds,$dn,$entry);
我建议使用会话变量自己计算失败的绑定尝试并基于此自行锁定帐户。
要锁定帐户,您需要累积用户帐户控制选项并设置UserAccountControl属性。
参考http://support.microsoft.com/kb/305144 ,锁定将是:
$controlOption["useraccountcontrol"][0] = '514';
$mod = ldap_modify($ds, $dn, $controlOption);
514值来自NORMAL_ACCOUNT(512)+ ACCOUNTDISABLE(2)。
解锁将是NORMAL_ACCOUNT,512的值。
最终代码:
for ($i = 0; $i < 10; $i++) {
$result = ldap_bind($ds, $dn, "theWrongPasswd");
if (!$result) {
$_SESSION['failed-login']++;
}
if ($_SESSION['failed-login'] >= $maxCount) {
$controlOption["useraccountcontrol"][0] = 512 + 2;
$mod = ldap_modify($ds, $dn, $controlOption);
}
}
试试这个:
开锁:
$acctEntry["lockouttime"][0] = '1';
$mod = ldap_modify($ds, $dn, $acctEntry);
锁定:
$acctEntry["lockouttime"][0] = '0';
$mod = ldap_modify($ds, $dn, $acctEntry);
启用:
$acctEntry["useraccountcontrol"][0] = '512';
$mod = ldap_modify($ds, $dn, $acctEntry);
要禁用:
$acctEntry["useraccountcontrol"][0] = '514';
$mod = ldap_modify($ds, $dn, $acctEntry);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.