Akshay
Akshay

Reputation: 1371

How to get sudo username in python?

I am trying to run my script as below and want access to sudo user running this script.

:$sudo -u usergroup script.py

So here I am expecting 'usergroup' as output. What I have tried is,

.

:$ sudo -u usergroup ipython

In [1]: import getpass

In [2]: getpass.getuser()
Out[2]: 'akshay'

.

In [4]: os.getenv("SUDO_USER")
Out[4]: 'akshay'

In [5]: os.getenv("USER")
Out[5]: 'akshay'

I am using below python version.

In [7]: sys.version
Out[7]: '2.7.11 (default, Apr 25 2016, 09:27:56) \n[GCC 5.2.1 20150902 (Red Hat 5.2.1-2)]'

In [8]: 

Kindly help here. Could not came across any existing question or solution for it.

Upvotes: 4

Views: 3055

Answers (1)

falsetru
falsetru

Reputation: 369274

You need to use os.geteuid to get effective user id (euid, used for most access checks).

>>> import os
>>> os.geteuid()
0

Then, pass the return value to pwd.getpwuid to get information about the uid returned:

>>> import pwd
>>> pwd.getpwuid(os.geteuid())
pwd.struct_passwd(pw_name='root', pw_passwd='x', ...)

Access pw_name attribute (or [0]) of the pwd.getpwuid() to get username of the effective user.

>>> pwd.getpwuid(os.geteuid()).pw_name
'root'
>>> pwd.getpwuid(os.geteuid())[0]
'root'

To get effective group information, use os.getegid + grp.getgrgid.

>>> grp.getgrgid(os.getegid())
grp.struct_group(gr_name='root', gr_passwd='x', gr_gid=0, gr_mem=[])
>>> grp.getgrgid(os.getegid()).gr_name
'root'

Upvotes: 9

Related Questions