executa comando com sudo e executa script Bash com sudo

1

Eu sempre achei que executar comandos com sudo e executar o script bash com o sudo era o mesmo. Mas hoje eu acho que eles são diferentes. Aqui está o que eu testei:

me@my_machine:~$ sudo echo $(whoami)

Eu executo o comando do terminal e obtenho a saída: me . Depois de ler este link: link , eu entenda isso.

Então eu crio um script bash chamado test.sh :

#!/usr/bin/env bash
echo $(whoami)

E eu executo este script: sudo ./test.sh , para minha surpresa, a saída agora se torna: root .

Portanto, executar comandos com sudo e executar scripts Bash com sudo são diferentes?

Se eu tiver o script s Bash, contendo o comando whoami , ele será executado com sudo , como obtenho me , em vez de root ?

    
por Yves 28.07.2018 / 12:59

1 resposta

3

Para o shell executar o comando

sudo echo $(whoami)

ele deve primeiro descobrir com que argumentos chamar sudo com. echo é apenas uma string simples, então o shell não faz nada, mas $(whoami) é uma substituição de comando que precisa ser expandida. Isso é feito executando whoami e substituindo a substituição de comando por sua saída. Então, ele está pronto para chamar sudo .

Isso significa que sudo será executado com echo e a saída de whoami (que foi executada como seu usuário sem privilégios) como argumentos.

Se você quiser executar whoami com sudo , poderá colocá-lo em um script e executar o script com sudo , como você fez, ou poderá usar

sudo sh -c 'echo "$(whoami)"'

Aqui, o script sh -c é executado como root, portanto, whoami também será executado como raiz.

O ponto é que o shell que executa whoami está sendo executado como usuário root.

O shell que executa whoami no primeiro comando, sudo echo $(whoami) , é executado como usuário comum, não como root.

    
por 28.07.2018 / 13:17