2017-03-31 104 views
0

我想知道如果在python中是否有可能,給定字符串usernamepassword,找出該帳戶是否有管理權限?如何檢查用戶名和密碼中的帳戶是否具有管理員權限?

舉例來說,如果我有兩個input S:

u = input("Username: ") 
p = input("Password: ") 

# hasAdminRights is a placeholder to checking if the account first of all exists, and then if it has admin. 

if hasAdminRights(u,p): 
    print "This account has admin privileges!" 
else: 
    print """This account either 
    1) does not have admin 
    2) is not a real account 
    3) entered the wrong password""" 

我需要能夠檢查這個即使登錄的用戶是不是管理員。

我看過很多關於檢查當前用戶是否有管理員的stackoverflow問題,但我想檢查一下PC上的其他用戶是否有管理員。

由於提前,

大衛·卡拉南

+0

也許,我錯過了一些東西,但它不清楚你指的是什麼系統/應用程序/軟件。您是在談論構建自己的權限系統,還是檢查另一個預先存在的系統?如果是這樣的系統? –

+0

@CopyandPaste我只是創建一個程序來檢查並告訴你,如果一臺計算機上存在的帳戶有管理員權限或沒有,所以你可以找出哪些帳戶有管理員。 –

+0

在電腦上?你是指某個特定操作系統的windows/linux/mac登錄嗎? –

回答

1

爲了獲得訪問令牌用戶,呼叫LogonUser,其自Windows XP/2003已經不需要SeTcbPrivilege。接下來調用GetTokenInformation以獲取標記中的高程類型,鏈接標記和組列表。例如:

from win32security import (
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, SE_GROUP_ENABLED, 
    TokenElevationType, TokenLinkedToken, TokenGroups, 
    TokenElevationTypeLimited, WinBuiltinAdministratorsSid, 
    LogonUser, GetTokenInformation, CreateWellKnownSid) 

def is_user_an_admin(username, password, allow_elevation=True): 
    token = LogonUser(username, None, password, 
     LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT) 
    elevation_type = GetTokenInformation(token, TokenElevationType) 
    admin_group = CreateWellKnownSid(WinBuiltinAdministratorsSid) 
    if elevation_type == TokenElevationTypeLimited and allow_elevation: 
     linked_token = GetTokenInformation(token, TokenLinkedToken) 
     token_list = [token, linked_token] 
    else: 
     token_list = [token] 
    for token in token_list: 
     for group, attrs in GetTokenInformation(token, TokenGroups): 
      enabled = attrs & SE_GROUP_ENABLED 
      if enabled and group == admin_group: 
       return True 
    return False 

本示例不會屏蔽異常,如密碼不正確。

+0

感謝這幾乎可以工作,但你是否能夠在網絡上使用它。 –

+0

您沒有聲明用戶名是UPN格式(例如[email protected])還是完全限定的(例如server.domain.com \\ username)。 – eryksun

+0

我忘了在問題中加入這個。如果網絡「NETWORK_NAME」上的用戶運行該程序並輸入用戶名「example」,您知道這是否會查找「NETWORK_NAME \ example」? –

相關問題