如何在python中获取sudo用户名?

Aks*_*hay 3 python unix

我正在尝试运行我的脚本,如下所示,并希望访问运行此脚本的sudo用户.

:$sudo -u usergroup script.py
Run Code Online (Sandbox Code Playgroud)

所以在这里我期待'usergroup'作为输出.我试过的是,

  • getpass:这为您提供实际用户而不是sudo用户

.

:$ sudo -u usergroup ipython

In [1]: import getpass

In [2]: getpass.getuser()
Out[2]: 'akshay'
Run Code Online (Sandbox Code Playgroud)
  • os.getenv

.

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

In [5]: os.getenv("USER")
Out[5]: 'akshay'
Run Code Online (Sandbox Code Playgroud)

我使用下面的python版本.

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]: 
Run Code Online (Sandbox Code Playgroud)

请在这里帮忙.无法遇到任何现有问题或解决方案.

fal*_*tru 6

您需要使用os.geteuid以获得有效的用户ID(euid,用于大多数访问检查).

>>> import os
>>> os.geteuid()
0
Run Code Online (Sandbox Code Playgroud)

然后,传递返回值以pwd.getpwuid获取有关返回的uid的信息:

>>> import pwd
>>> pwd.getpwuid(os.geteuid())
pwd.struct_passwd(pw_name='root', pw_passwd='x', ...)
Run Code Online (Sandbox Code Playgroud)

获取有效用户的用户名的访问pw_name属性(或[0])pwd.getpwuid().

>>> pwd.getpwuid(os.geteuid()).pw_name
'root'
>>> pwd.getpwuid(os.geteuid())[0]
'root'
Run Code Online (Sandbox Code Playgroud)

要获得有效的组信息,请使用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'
Run Code Online (Sandbox Code Playgroud)