sudo, runuser, su não funciona como eu esperava quando executado como root com o comando como “echo $ HOME”

2

Quando executo esses comandos, ele é exibido conforme mostrado. / root

$ sudo -u someuser -i "echo $HOME"
/root
$ runuser -l someuser -c "echo $HOME"
/root    
$ su - someuser -c "echo $HOME"
/root

O que eu esperava era

/home/someuser

Quando executo o comando env para inspecionar o ambiente Ele relata a variável HOME corretamente.

$ su - someuser -c "env"
...  
HOME=/home/someuser
...

$ sudo -u someuser -i "env"  
...  
HOME=/home/someuser
...

$ runuser -l someuser -c "env"  
...  
HOME=/home/someuser
...  

O que eu quero fazer é executar scripts no diretório inicial dos usuários. / home / someuser / scripts.
como $ {HOME} /scripts/somescript.sh

$ sudo -u someuser  ${HOME}/scripts/somescript.sh
sudo: /root/scripts/somescript.sh: command not found  

O que eu esperava era:

$ sudo -u someuser  ${HOME}/scripts/somescript.sh
...
script output.
...
    
por nelaaro 02.11.2012 / 10:15

2 respostas

1

Tangencialmente relacionado:

sudo -u someuser -i "echo $HOME"

não funciona para mim. Diz:

-bash: echo $HOME: command not found

Para o ponto: Quando você executa o comando

sudo -u someuser -i echo $HOME

a variável $HOME é expandida pelo shell antes que o sudo seja executado.

Para resolver isso, você poderia usar um comando como

sudo -u someuser -i bash -c 'echo $HOME'

Neste comando, echo $HOME é enviado literalmente para o bash depois de trocar o UID.

O resultado é o esperado:

/home/someuser
    
por 02.11.2012 / 10:30
3

Quando você faz

 su - someuser -c "echo $HOME"

O shell atual expande $ HOME primeiro , então o resultado é passado para o comando ( su neste caso) e daí para um processo shell sendo executado como o novo usuário.

Tente proteger a variável com aspas simples

 su - someuser -c 'echo $HOME'
    
por 02.11.2012 / 10:27