Como encontro qual usuário executa o script quando é usado o sudo?

1

O que eu quero é encontrar o nome do usuário que executa o script bash, quando este script é executado por sudo . A única maneira possível, que eu sei, é analisar a saída de who -m ( who am i ) desta forma:

user@UbuntuServer:~$ cat who.sh 
#!/bin/sh
whoami
echo $USER
who -m | awk '{print $1}'

user@UbuntuServer:~$ sudo ./who.sh 
root
root
user

O problema é: No Ubuntu Desktop 16.04.4 who -m (resp. who am i ) não faz nada. Por quê?

Outraperguntaéporquea página de manual on-line do Ubuntu para who é diferente de man who executado no Ubuntu Desktop ou Server?

Mas essas questões não são tão importantes de acordo com meus objetivos. E como é mencionado no título, a questão principal é: Como faço para encontrar qual usuário executa o script quando é usado sudo ?

Praticamente, o título original - Como encontro 'quem sou eu' no Ubuntu Desktop? - é o mesmo mas indevidamente perguntou.

    
por pa4080 09.05.2018 / 08:00

2 respostas

3

Eu tive um problema semelhante há um tempo atrás, e a única maneira que funcionou de forma confiável para mim até agora é:

echo ${SUDO_USER:-${USER}}

Desde que o usuário trabalhe com o shell como ele mesmo, $USER contém seu nome de usuário. Quando ele chama sudo , para o novo subshell $SUDO_USER é definido como o que é $USER no shell de chamada, e $USER se torna root , é claro.

O truque com o operador :- é que a expressão inteira é avaliada como $SUDO_USER se estiver definida (portanto, dentro da subshell aberta por sudo ) e, de outra forma, $USER . Portanto, você sempre tem o nome de usuário correto e não precisa se preocupar muito com o contexto em que a expressão é avaliada, o que achei conveniente.

    
por Wanderer 09.05.2018 / 15:35
2

Em vez de who am i try whoami

    
por denny john 09.05.2018 / 08:32