Як отримати ім'я користувача, який запустив `sudo`


12

Моя проблема: у мене програма Python, і користувач запускає її за допомогою sudo. Іноді мені доводиться повертатися додому, і я можу це зробити, лише знаючи його ім'я:

import pwd

pwd.getpwnam(username)

Отже: як я можу отримати ім’я користувача, який запустив програму?


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

Дякую за пораду. Добре, я поставлю мій euidTo SUDO_UID.
rubik

Відповіді:


22

Коли ви знімаєте щось із sudoпарою змінних середовища, то я думаю, що ви шукаєте SUDO_UID. Вони повинні бути доступні будь-якій програмі, що працює через звичні канали змінних середовища.

Ви можете бачити інші речі, встановлені шляхом такого обману з оболонки: sudo env | grep SUDO


1
+1 WoW! Дуже дякую! Саме це я і шукав. Я думаю, що буду використовувати SUDO_UIDі SUDO_USER. Ще раз дякую вам.
rubik

1
SUDO_USERбуло саме те, що я шукав.
фенікс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.