Come ottenere il nome dell'utente che ha lanciato `sudo`


12

Il mio problema: ho un programma Python e l'utente lo avvia usando sudo. A volte devo ottenere la casa dell'utente, e posso farlo solo conoscendo il suo nome:

import pwd

pwd.getpwnam(username)

Quindi: come posso ottenere il nome dell'utente che ha avviato il programma?


1
Nella maggior parte delle configurazioni, sudola HOMEvariabile di ambiente rimane intatta (ciò può essere sovrascritto in fase di compilazione o di runtime). Ma potresti o non essere in grado di utilizzare la variabile d'ambiente, a seconda di cosa vuoi che accada se l'utente specifica un valore diverso per HOME(cosa succede se bob viene eseguito HOME=/home/joe sudo your_script?). Probabilmente dovresti impostare il tuo euid sull'utente chiamante (dato da SUDO_UID) prima di effettuare qualsiasi accesso al filesystem (a parte qualsiasi cosa richieda effettivamente l'autorizzazione di root nel tuo script).
Gilles 'SO- smetti di essere malvagio' il

Grazie per il consiglio. Ok, io metterò la mia euida SUDO_UID.
rubik,

Risposte:


22

Quando spegni qualcosa con sudoun paio di variabili d'ambiente vengono impostate, in particolare penso che tu stia cercando SUDO_UID. Questi dovrebbero essere accessibili a qualsiasi programma in esecuzione attraverso i soliti canali di accesso alle variabili di ambiente.

Puoi vedere le altre cose impostate barando in questo modo da una shell: sudo env | grep SUDO


1
+1 WoW! Grazie mille! Era esattamente quello che stavo cercando. Penso che userò SUDO_UIDe SUDO_USER. Grazie ancora.
rubik,

1
SUDO_USERera esattamente quello che stavo cercando.
Phoenix,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.