Comment obtenir le nom de l'utilisateur qui a lancé `sudo`

12

Mon problème: j'ai un programme Python, et l'utilisateur le lance en utilisant sudo. Parfois, je dois rentrer chez l'utilisateur, et je ne peux le faire qu'en connaissant son nom:

import pwd

pwd.getpwnam(username)

Alors: comment puis-je obtenir le nom de l'utilisateur qui a lancé le programme?

rubik
la source
1
Dans la plupart des configurations, sudolaisse la HOMEvariable d'environnement intacte (elle peut être remplacée lors de la compilation ou de l'exécution). Mais vous pouvez ou non être en mesure d'utiliser la variable d'environnement, selon ce que vous voulez faire si l'utilisateur spécifie une valeur différente pour HOME(que faire si bob s'exécute HOME=/home/joe sudo your_script?). Vous devriez probablement définir votre euid sur l'utilisateur appelant (donné par SUDO_UID) avant de faire un accès au système de fichiers (en dehors de ce qui nécessite réellement l'autorisation root dans votre script).
Gilles 'SO- arrête d'être méchant'
Merci pour le conseil. Ok, je tournerai ma euidà SUDO_UID.
rubik

Réponses:

22

Lorsque vous lancez quelque chose avec sudoun couple de variables d'environnement définies, je pense que vous recherchez spécifiquement SUDO_UID. Celles-ci devraient être accessibles à tout programme fonctionnant via les canaux habituels d'accès aux variables d'environnement.

Vous pouvez voir les autres choses en trichant comme ça depuis un shell: sudo env | grep SUDO

Caleb
la source
1
+1 WoW! Merci beaucoup! C'était exactement ce que je cherchais. Je pense que je vais utiliser SUDO_UIDet SUDO_USER. Merci encore.
rubik
1
SUDO_USERétait exactement ce que je cherchais.
phoenix