So erhalten Sie den Namen des Benutzers, der `sudo` gestartet hat

12

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?

rubik
quelle
1
In den meisten Konfigurationen sudobleibt die HOMEUmgebungsvariable 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 angibt HOME(was ist, wenn Bob ausgeführt wird HOME=/home/joe sudo your_script?). Sie sollten Ihre euid wahrscheinlich auf den aufrufenden Benutzer (angegeben von SUDO_UID) einstellen, bevor Sie auf das Dateisystem zugreifen (abgesehen von dem, was tatsächlich die Root-Berechtigung in Ihrem Skript erfordert).
Gilles 'SO - hör auf böse zu sein'
Danke für den Ratschlag. Ok, ich werde meine euidauf einstellen SUDO_UID.
Rubik

Antworten:

21

Wenn Sie etwas mit sudoein paar Umgebungsvariablen abfeuern, werden diese eingestellt, insbesondere denke ich, dass Sie suchen SUDO_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

Caleb
quelle
+1 WoW! Vielen Dank! Genau das habe ich gesucht. Ich denke ich werde SUDO_UIDund verwenden SUDO_USER. Danke nochmal.
Rubik
SUDO_USERwar genau das, wonach ich gesucht habe.
Phoenix