Por que o $ HOME não muda se eu usar o sudo?

13

Eu esperava que a opção -H me desse o ambiente do usuário-alvo.

nbest@geo:~$ sudo -H -u tanum echo $HOME
/home/nbest
nbest@geo:~$ sudo -u tanum echo $HOME
/home/nbest
nbest@geo:~$ sudo -i -u tanum echo $HOME
/home/nbest
nbest@geo:~$ sudo -H -i -u tanum echo $HOME
/home/nbest

Isso me permite dizer:

sudo -u tanum ls ~

e obtenha a listagem do diretório inicial do usuário-alvo. Não é o caso. Isso é causado pelo env_reset padrão em sudoers ?

Em caso afirmativo, -H tem algum efeito? Qual é a maneira mais segura de substituir esse comportamento?

Se não é o efeito pretendido de -H?

Por favor, me endireite.

    
por Neil Best 28.08.2013 / 17:40

2 respostas

14

$HOME e ~ são expandidos pelo seu shell, eles não são interpretados por echo .

Em outras palavras, echo não vê $HOME como argumento. Na verdade, ele vê /home/nbest . Portanto, os seguintes comandos são exatamente idênticos (no seu caso):

nbest@geo:~$ sudo -H -u tanum echo $HOME
nbest@geo:~$ sudo -H -u tanum echo /home/nbest

Não importa o que você tente ( -H , -i , ...) você nunca obterá o comportamento desejado. Porque $HOME é substituído pelo seu shell e seu shell é executado como seu usuário. sudo não afeta seu shell de alguma forma.

Para contornar esse 'problema' (que, na verdade, é um recurso), você pode iniciar um novo subshell:

nbest@geo:~$ sudo -H -u tanum sh -c 'echo $HOME'

(Note que estou usando aspas simples para evitar a expansão). Dessa forma, o novo shell sh será executado como usuário tanum e imprimirá seu diretório pessoal.

Outra alternativa é usar ~username , que é expandido para a página inicial desse usuário, sem a necessidade de usar sudo ou su . Experimente:

nbest@geo:~$ echo ~tanum
    
por Andrea Corbellini 28.08.2013 / 17:42
2

Por favor, tente:

sudo -H -u tanum bash -c 'echo $HOME'
    
por tpf 28.08.2013 / 17:54