python - Sådan kontrolleres, om en konto fra brugernavn og adgangskode har administratorrettigheder/privilegier?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg spekulerer på, om i python er det muligt, i betragtning af strengene username og password, at finde ud af om denne konto har administratorrettigheder?


For eksempel, hvis jeg har to 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"""


Jeg skal kunne tjekke dette, selvom den logget bruger ikke er en administrator.


Jeg har set mange stackoverflow spørgsmål om at kontrollere, om den nuværende bruger har admin, men jeg vil gerne tjekke om en anden bruger på pc'en har admin.


Tak på forhånd,


David Callanan

Bedste reference


For at få adgangstoken til brugeren, ring til LogonUser, som ikke har krævet SeTcbPrivilege siden Windows XP/2003. Næste opkald GetTokenInformation for at få elevationstypen, linket token og liste over grupper i symbolet. For eksempel:


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


Dette eksempel maskerer undtagelser, f.eks. For en forkert adgangskode.