如何获取启动“sudo”的用户名

如何获取启动“sudo”的用户名

我的问题:我有一个 Python 程序,用户使用sudo.有时我必须获取用户的家,而我只需知道其名称即可做到这一点:

import pwd

pwd.getpwnam(username)

那么:如何获取启动该程序的用户的名称?

答案1

当您启动一些sudo设置了几个环境变量的东西时,特别是我认为您正在寻找SUDO_UID.通过访问环境变量的常用渠道运行的任何程序都应该可以访问这些内容。

您可以通过从 shell 中像这样进行作弊来查看其他设置:sudo env | grep SUDO

答案2

这是我目前用于涵盖 systemd (="root")、sudo、pkexec 和正常执行的方法。肯定可以变得更漂亮:

import os
import getpass
import pwd

def get_user():
    """Try to find the user who called sudo/pkexec."""
    try:
        return os.getlogin()
    except OSError:
        # failed in some ubuntu installations and in systemd services
        pass

    try:
        user = os.environ['USER']
    except KeyError:
        # possibly a systemd service. no sudo was used
        return getpass.getuser()

    if user == 'root':
        try:
            return os.environ['SUDO_USER']
        except KeyError:
            # no sudo was used
            pass

        try:
            pkexec_uid = int(os.environ['PKEXEC_UID'])
            return pwd.getpwuid(pkexec_uid).pw_name
        except KeyError:
            # no pkexec was used
            pass

    return user
➜  ~ python3 /home/mango/getuser.py
mango
➜  ~ sudo python3 /home/mango/getuser.py
mango
➜  ~ pkexec python3 /home/mango/getuser.py
mango

相关内容