Jak uzyskać nazwę użytkownika, który uruchomił `sudo`

12

Mój problem: mam program w języku Python, a użytkownik uruchamia go za pomocą sudo. Czasami muszę zabrać użytkownika do domu i mogę to zrobić, znając tylko jego nazwę:

import pwd

pwd.getpwnam(username)

Więc: jak mogę uzyskać nazwę użytkownika, który uruchomił program?

rubik
źródło
1
W większości konfiguracji sudopozostawia HOMEnienaruszoną zmienną środowiskową (można to zmienić w czasie kompilacji lub wykonywania). Ale możesz, ale nie musisz, używać zmiennej środowiskowej, w zależności od tego, co chcesz się wydarzyć, jeśli użytkownik określi inną wartość HOME(co, jeśli bob działa HOME=/home/joe sudo your_script?). Prawdopodobnie powinieneś ustawić swój euid na użytkownika wywołującego (podanego przez SUDO_UID) przed uzyskaniem dostępu do dowolnego systemu plików (poza tym, co faktycznie wymaga uprawnień roota w skrypcie).
Gilles „SO- przestań być zły”
Dziękuję za radę. Ok, ustawię euidna SUDO_UID.
rubik

Odpowiedzi:

22

Kiedy odpalasz coś z sudoustawionymi kilkoma zmiennymi środowiskowymi, szczególnie myślę, że szukasz SUDO_UID. Powinny być one dostępne dla każdego programu działającego przez zwykłe kanały dostępu do zmiennych środowiskowych.

Możesz zobaczyć inne rzeczy ustawione przez oszustwo takie jak to z powłoki: sudo env | grep SUDO

Caleb
źródło
1
+1 WoW! Dziękuję Ci bardzo! Właśnie tego szukałem. Myślę, że użyję SUDO_UIDi SUDO_USER. Jeszcze raz dziękuję.
rubik
1
SUDO_USERbyło dokładnie tym, czego szukałem.
feniks