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?

sudodeja laHOMEvariable 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 paraHOME(¿qué pasa si se ejecuta bobHOME=/home/joe sudo your_script?). Probablemente debería configurar su euid para el usuario llamante (dado porSUDO_UID) antes de hacer cualquier acceso al sistema de archivos (aparte de lo que realmente requiere permiso de root en su script).euidaSUDO_UID.Respuestas:
Cuando disparas algo con
sudoun par de variables de entorno configuradas, específicamente creo que estás buscandoSUDO_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 SUDOfuente
SUDO_UIDySUDO_USER. Gracias de nuevo.SUDO_USERera exactamente lo que estaba buscando.