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?
sudo
deixa aHOME
variá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 paraHOME
(e se bob for executadoHOME=/home/joe sudo your_script
?). Você provavelmente deve configurar seu euid para o usuário que está chamando (fornecido porSUDO_UID
) antes de fazer qualquer acesso ao sistema de arquivos (além do que realmente requer permissão de root no seu script).euid
aSUDO_UID
.Respostas:
Quando você dispara algo com
sudo
algumas variáveis de ambiente, é definido especificamente que você está procurandoSUDO_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
fonte
SUDO_UID
eSUDO_USER
. Mais uma vez obrigado.SUDO_USER
era exatamente o que eu estava procurando.