Mein Problem: Ich habe ein Python-Programm und der Benutzer startet es mit sudo
. Manchmal muss ich das Haus des Benutzers erreichen, und ich kann dies nur tun, wenn ich seinen Namen kenne:
import pwd
pwd.getpwnam(username)
Also: Wie kann ich den Namen des Benutzers ermitteln, der das Programm gestartet hat?
sudo
bleibt dieHOME
Umgebungsvariable intakt (dies kann zur Kompilierungs- oder Laufzeit überschrieben werden). Möglicherweise können Sie die Umgebungsvariable jedoch verwenden oder nicht, je nachdem, was passieren soll, wenn der Benutzer einen anderen Wert für angibtHOME
(was ist, wenn Bob ausgeführt wirdHOME=/home/joe sudo your_script
?). Sie sollten Ihre euid wahrscheinlich auf den aufrufenden Benutzer (angegeben vonSUDO_UID
) einstellen, bevor Sie auf das Dateisystem zugreifen (abgesehen von dem, was tatsächlich die Root-Berechtigung in Ihrem Skript erfordert).euid
auf einstellenSUDO_UID
.Antworten:
Wenn Sie etwas mit
sudo
ein paar Umgebungsvariablen abfeuern, werden diese eingestellt, insbesondere denke ich, dass Sie suchenSUDO_UID
. Diese sollten für jedes Programm zugänglich sein, das über die üblichen Kanäle für den Zugriff auf Umgebungsvariablen ausgeführt wird.Sie können die anderen Dinge sehen, die durch Betrügen wie folgt von einer Shell aus festgelegt wurden:
sudo env | grep SUDO
quelle
SUDO_UID
und verwendenSUDO_USER
. Danke nochmal.SUDO_USER
war genau das, wonach ich gesucht habe.