2017-02-27 8 views
1

現在ログインしているユーザーのローカルアカウントのパスワードのパスワードがWindowsで空でないかどうかを確認するスクリプトを作成しようとしています。セキュリティコンプライアンスのバックグラウンドチェックの一環としてこれを実行する必要があります。それはNagiosサーバーに報告するつもりです。私はこれをPythonで行う必要がありますが、PythonがそれをしないとPowerShellに公開しています。ローカルアカウントに空白のパスワードがあるかどうかを確認するPython

ので、スクリプトを検出する必要があります。

  • 現在ログインしているユーザーのユーザー名を。
  • 上記のユーザーに空白のパスワードがあるかどうか。
  • パスワードが空白でない場合はエラーコード0が返されます。エラーコード2の場合はエラーコード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 
関連する問題