2017-02-27 108 views
1

我正在嘗試構建一個腳本,用於檢查當前登錄用戶的本地帳戶上的密碼是否具有在Windows中不爲空的密碼。我需要將它作爲安全合規性背景檢查的一部分來運行;它會報告給Nagios服務器。我需要在Python中完成這項工作,但如果Python不這樣做,我會向PowerShell開放。使用Python檢查本地帳戶是否有空白密碼

因此,該腳本將需要檢測:

  • 在當前登錄用戶的用戶名。
  • 上述用戶是否有空白密碼。
  • 如果密碼不爲空,則返回錯誤代碼0,如果是,則返回錯誤代碼2。

我被困在任何一段代碼將允許我檢查當前用戶的密碼是否是「」。我有一個佈局,未經太多的裝飾,看起來是這樣的:

import os 
import Tkinter 
import tkMessageBox 
from Tkinter import Tk, Toplevel 

MyGui.update_idletasks() 
MyGui.attributes('-topmost', True) 
MyGui.geometry('{}x{}'.format(300, 150)) 
MyGui.resizable(width=False, height=False) 
MyGui.withdraw() 

ThisUser = os.getlogin() 
ThisPassword = ... # line of code necessary to test for blank password; this is the part where I'm stuck 

if ThisPassword = "": 
    tkMessageBox.showerror("Error For User Here", parent=MyGui) 
    print "No password set!" 
    sys.exit(2) 
else: 
    print "Password exists." 
    sys.exit(0) 

我發現this article,其中WinAPI的讚揚LogonUser被使用,但我不精明與C#。 Python更適合我的舒適區域,我無法弄清楚如何檢查密碼是否爲空。我不想收集密碼本身。

回答

0

如果用戶的密碼不爲空,則嘗試使用空密碼登錄將失敗,錯誤代碼爲ERROR_LOGON_FAILURE。如果爲空,則登錄將成功,或者如果系統策略禁止空密碼,則將失敗,錯誤代碼爲ERROR_ACCOUNT_RESTRICTION。例如:

import winerror 
import win32security 

def is_password_blank(username): 
    try: 
     token = win32security.LogonUser(username, None, '', 
        win32security.LOGON32_LOGON_INTERACTIVE, 
        win32security.LOGON32_PROVIDER_DEFAULT) 
    except win32security.error as e: 
     if e.winerror == winerror.ERROR_ACCOUNT_RESTRICTION: 
      return True 
     elif e.winerror == winerror.ERROR_LOGON_FAILURE: 
      return False 
     raise 
    else: 
     token.Close() 
     return True 
相關問題