Когда Вы исчерпываете что-то с sudo
несколько переменных среды установлены, конкретно я думаю, что Вы ищете SUDO_UID
. Они должны быть доступны для любой программы, пробегающей обычные каналы доступа к переменным среды.
Вы видите другие вещи, установленные путем обмана как это от оболочки: sudo env | grep SUDO
Это то, что я сейчас использую для покрытия 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
SUDO_UID
иSUDO_USER
.Еще раз спасибо. – rubik 16.04.2011, 21:46