Я разрабатываю небольшой инструмент управления паролями, используя Python. Он позволяет использовать центральный менеджер паролей и одноразовые пароли, поэтому никто никогда не узнает пароль сервера, и нам не нужно будет менять все пароли, когда сотрудник перейдет к другому работодателю.Изменение пароля Windows с помощью Python
В любом случае, дизайн программного обеспечения был для него в Phone-Home (и, таким образом, устраняет многие проблемы с брандмауэром/Natting) и запускается как служба. Теперь мы можем синхронизировать пользователей системы, проверить, правильно ли получены пароли. Но сброс пароля после входа в систему - это то, с чем мы сейчас сталкиваемся.
win32.net NetUserchangePassword, похоже, имеет то, что мы хотим. Как я думал, он называется «net user *». После тестирования я понял, что это действительно называется функцией netUserchangePassword для msvc-библиотек. Проблема в том, что он не работает, когда я вводил старый пароль как None.
Процесс работает как полный админ. И должен иметь возможность изменять пароли пользователей, не зная старого (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я из фонового раздела unix, поэтому root (superadmin) может делать все, ciorrect me, если я ошибаюсь в ОС Windows).
Итак, как я могу как супер-администратор изменить пароль для локальных пользователей, не зная старый пароль с использованием языка сценариев Python?
Спасибо!
Update:
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 = "[email protected]$w0rd!"
set_password(u, p)
if verify_success(u, p):
print "W00t it workz"
else:
print "Continue Googling"
Угадайте, что не работает.
Figuredout метод, который _might_ работа: В псевдо-C: HRESULT SetPassword (const char * имя пользователя, пароль BSTR) { HRESULT hr = S_OK; IADsUser * pUser; pUser = GetObject ("WinNT: // MYCOMPUTER /" + имя пользователя + ", пользователь"); if (! PUser) {return E_FAIL;} hr = pUser-> SetPassword (пароль); if (hr == S_OK) printf («Установлен пароль пользователя»); pUser-> Release(); return hr; } – Stolas