Python - checking if a user has administrator privileges

前端 未结 4 764
被撕碎了的回忆
被撕碎了的回忆 2021-01-01 04:41

I\'m writing a little program as a self-learning project in Python 3.x. My idea is for the program to allow two fields of text entry to the user, and then plug the user\'s i

相关标签:
4条回答
  • 2021-01-01 05:04

    Most straightforward way is try to change the key at the beginning, maybe to a stub value - if that fails, catch the error and tell the user.

    0 讨论(0)
  • 2021-01-01 05:09

    With pywin32, something like the following should work...:

    import pythoncom
    import pywintypes
    import win32api
    from win32com.shell import shell
    
    if shell.IsUserAnAdmin():
       ...
    

    And yes, it seems pywin32 does support Python 3.

    0 讨论(0)
  • 2021-01-01 05:24

    I needed a simple, Windows/Posix solution to test if a user has root/admin privileges to the file system without installing an 3rd party solution. I understand there are vulnerabilities when relying on environment variables, but they suited my purpose. It might be possible to extend this approach to read/write the registry.

    I tested this with Python 2.6/2.7 on WinXP, WinVista and Wine. If anyone knows this will not work on Pyton 3.x and/or Win7, please advise. Thanks.

    def has_admin():
        import os
        if os.name == 'nt':
            try:
                # only windows users with admin privileges can read the C:\windows\temp
                temp = os.listdir(os.sep.join([os.environ.get('SystemRoot','C:\\windows'),'temp']))
            except:
                return (os.environ['USERNAME'],False)
            else:
                return (os.environ['USERNAME'],True)
        else:
            if 'SUDO_USER' in os.environ and os.geteuid() == 0:
                return (os.environ['SUDO_USER'],True)
            else:
                return (os.environ['USERNAME'],False)
    
    0 讨论(0)
  • 2021-01-01 05:25

    Here's a short article on how to determine if an application requires elevated privileges.

    You can use pywin32 or ctypes to do the CreateProcess() call.

    I suggest ctypes since it comes standard in python now, and there is a good example of using CreateProcess with ctypes here.

    0 讨论(0)
提交回复
热议问题