我正在使用 Python 开发一个小的密码管理器工具。它允许中央密码管理器和一次性密码,因此没有人会知道服务器的密码,当员工去其他雇主时,我们不需要更改所有密码。
无论如何,该软件的设计是为了将它用于电话回家(从而消除许多防火墙/网络问题)并作为服务运行。我们现在可以同步系统的用户,验证我们得到的密码是否正确。但是登录后重置密码是我们目前正在努力解决的问题。
win32.net NetUserchangePassword 好像有我们想要的。正如(我认为)它称为“网络用户*”。经过测试,我发现它确实称为 msvc 库的 netUserchangePassword 功能。问题是当我输入旧密码为无时它不起作用。
该过程以完全管理员身份运行。并且应该能够在不知道旧密码的情况下更改用户密码(免责声明:我来自 unix 背景,因此 root(超级管理员)可以做任何事情,如果我对 Windows 操作系统有误,请纠正我)。
那么,作为超级管理员,我如何在不知道旧密码的情况下使用 Python 脚本语言更改本地用户的密码?
谢谢!
更新:
def set_password(username, password):
from win32com import adsi
ads_obj = adsi.ADsGetObject("WinNT://localhost/%s,user" % username)
ads_obj.Getinfo()
ads_obj.Put('Password', password)
ads_obj.SetInfo()
def verify_success(username, password):
from win32security import LogonUser
from win32con import LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT
try:
LogonUser(username, None, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT)
except:
return False
return True
u = "test_usr"
p = "TheNewStrongP@S$w0rd!"
set_password(u, p)
if verify_success(u, p):
print "W00t it workz"
else:
print "Continue Googling"
你猜怎么着,行不通。