Como obter o nome do usuário que lançou o `sudo`

12

Meu problema: tenho um programa Python e o usuário o inicia usando sudo. Às vezes, tenho que chegar em casa do usuário e posso fazer isso apenas sabendo o nome:

import pwd

pwd.getpwnam(username)

Então: como posso obter o nome do usuário que iniciou o programa?

rubik
fonte
1
Na maioria das configurações, sudodeixa a HOMEvariável de ambiente intacta (isso pode ser substituído em tempo de compilação ou de execução). Mas você pode ou não conseguir usar a variável de ambiente, dependendo do que deseja que aconteça se o usuário especificar um valor diferente para HOME(e se bob for executado HOME=/home/joe sudo your_script?). Você provavelmente deve configurar seu euid para o usuário que está chamando (fornecido por SUDO_UID) antes de fazer qualquer acesso ao sistema de arquivos (além do que realmente requer permissão de root no seu script).
Gilles 'SO- stop be evil'
Obrigado pelo conselho. Ok, eu porei a minha euida SUDO_UID.
precisa

Respostas:

22

Quando você dispara algo com sudoalgumas variáveis ​​de ambiente, é definido especificamente que você está procurando SUDO_UID. Eles devem estar acessíveis a qualquer programa executado nos canais usuais de acesso às variáveis ​​de ambiente.

Você pode ver as outras coisas definidas trapaceando assim de um shell: sudo env | grep SUDO

Caleb
fonte
1
+1 WoW! Muito obrigado! Era exatamente o que eu estava procurando. Eu acho que vou usar SUDO_UIDe SUDO_USER. Mais uma vez obrigado.
Rubik
1
SUDO_USERera exatamente o que eu estava procurando.
31419 Phoenix