Как получить имя пользователя, запустившего `sudo`


12

Моя проблема: у меня есть программа на Python, и пользователь запускает ее, используя sudo. Иногда мне нужно добраться до дома пользователя, и я могу сделать это, только зная его имя:

import pwd

pwd.getpwnam(username)

Итак: как я могу получить имя пользователя, запустившего программу?


1
Индера большинства конфигураций, sudoлисты HOMEпеременной среды нетронутая (это может быть переопределены в compile- или во время выполнения). Но вы можете или не сможете использовать переменную окружения, в зависимости от того, что вы хотите сделать, если пользователь указывает другое значение HOME(что, если bob запускается HOME=/home/joe sudo your_script?). Вы, вероятно, должны установить свой euid для вызывающего пользователя (заданного пользователем SUDO_UID), прежде чем делать какой-либо доступ к файловой системе (кроме того, что фактически требует разрешения root в вашем скрипте).
Жиль "ТАК - перестань быть злым"

Спасибо за совет. Хорошо, я установлю euidдля себя SUDO_UID.
Рубик

Ответы:


22

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

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


1
+1 WoW! Большое спасибо! Это было именно то, что я искал. Я думаю, что я буду использовать SUDO_UIDи SUDO_USER. Еще раз спасибо.
Рубик

1
SUDO_USERбыло именно то, что я искал.
Феникс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.