Как получить имя пользователя, который запустил 'sudo'

Можно использовать Python csv модуль.

Простой пример:

import csv
reader = csv.reader(open("test.csv", "r"))
for row in reader:
    for col in row:
        print col

12
16.04.2011, 21:50
2 ответа

Когда Вы исчерпываете что-то с sudo несколько переменных среды установлены, конкретно я думаю, что Вы ищете SUDO_UID. Они должны быть доступны для любой программы, пробегающей обычные каналы доступа к переменным среды.

Вы видите другие вещи, установленные путем обмана как это от оболочки: sudo env | grep SUDO

21
27.01.2020, 19:55
  • 1
    +1 WoW!Большое спасибо! Это было точно, что я искал. Я думаю, что буду использовать SUDO_UID и SUDO_USER.Еще раз спасибо. –  rubik 16.04.2011, 21:46

Это то, что я сейчас использую для покрытия systemd (= "root" ), sudo, pkexec и обычного выполнения. Конечно, можно было бы сделать красивее:

import os
import shutil
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
0
27.12.2020, 22:52

Теги

Похожие вопросы