Cómo obtener el nombre del usuario que lanzó `sudo`

12

Mi problema: tengo un programa Python y el usuario lo inicia usando sudo. A veces tengo que acceder a la casa del usuario, y puedo hacerlo solo sabiendo su nombre:

import pwd

pwd.getpwnam(username)

Entonces: ¿cómo puedo obtener el nombre del usuario que lanzó el programa?

rubik
fuente
1
En la mayoría de las configuraciones, sudodeja la HOMEvariable de entorno intacta (esto puede anularse en tiempo de compilación o ejecución). Pero puede o no puede usar la variable de entorno, dependiendo de lo que quiera que suceda si el usuario especifica un valor diferente para HOME(¿qué pasa si se ejecuta bob HOME=/home/joe sudo your_script?). Probablemente debería configurar su euid para el usuario llamante (dado por SUDO_UID) antes de hacer cualquier acceso al sistema de archivos (aparte de lo que realmente requiere permiso de root en su script).
Gilles 'SO- deja de ser malvado'
Gracias por el consejo. Ok, voy a configurar mi euida SUDO_UID.
rubik

Respuestas:

22

Cuando disparas algo con sudoun par de variables de entorno configuradas, específicamente creo que estás buscando SUDO_UID. Estos deben ser accesibles para cualquier programa que se ejecute a través de los canales habituales de acceso a las variables de entorno.

Puedes ver las otras cosas establecidas haciendo trampas como esta desde un shell: sudo env | grep SUDO

Caleb
fuente
1
+1 WoW! ¡Muchas gracias! Eso era exactamente lo que estaba buscando. Creo que usaré SUDO_UIDy SUDO_USER. Gracias de nuevo.
rubik
1
SUDO_USERera exactamente lo que estaba buscando.
Phoenix