2017-03-31 6 views
0

私は、文字列usernamepasswordがあれば、そのアカウントに管理者権限があるかどうかを調べることができるのだろうか?例えばユーザー名とパスワードのアカウントに管理者権限があるかどうかを確認する方法はありますか?

、私は2人のinputの持っている場合:

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の別のユーザーが管理者であるかどうかを確認したいと思います。事前に

おかげで、

デビッドCallanan

+0

おそらく、私は何かが不足していますが、あなたがどのシステム/アプリケーション/ソフトウェアを参照しているかは不明です。あなた自身のパーミッションシステムを構築したり、既存のシステムをチェックしたりしていますか?もしそうなら、どんなシステム? –

+0

@CopyandPasteコンピュータ上に存在するアカウントに管理者権限があるかどうかを確認して通知するプログラムを作成しているだけなので、管理者のアカウントがわかります。 –

+0

コンピュータでは?特定のオペレーティングシステムのwindows/linux/macログインを参照していますか? –

答えて

1

は、Windows XP/2003年からSeTcbPrivilegeを必要としていないLogonUserを呼び出し、ユーザーのアクセストークンを取得します。次に、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」が検索されるかどうかがわかりますか? –

関連する問題