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

15

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

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 eco $ HOME
/ home / nbest

Isso me permitiria dizer:

sudo -u tanum ls ~

e obtenha a listagem do diretório inicial do usuário de destino. Não é o caso. Isso é causado pelo env_resetpadrão em sudoers?

Se sim, -H tem algum efeito? Qual é a maneira mais segura de substituir esse comportamento?

Caso contrário, qual é o efeito pretendido de -H?

Por favor, me ajude.

Neil Best
fonte

Respostas:

16

$HOMEe ~se expandir pelo seu shell, eles não são interpretados por echo.

Em outras palavras, echonão vê $HOMEcomo argumento. Na verdade, 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

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


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'

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


Uma outra alternativa é usar ~username, que é expandido para a casa desse usuário, sem a necessidade de usar sudoou su. Experimentar:

nbest@geo:~$ echo ~tanum
Andrea Corbellini
fonte
11
Claro. Que vergonha! sudo do what I mean
Neil Best
11
Isso não funciona para mim. por exemplo, sudo -H -u buildbot bash -c "echo $HOME"dá-me /home/ubuntu, que é o usuário padrão em algumas imagens do Ubuntu.
Cerin
A @Cerin usa aspas simples para impedir a expansão:sh -c 'echo $HOME'
Andrea Corbellini
3

Tente por favor:

sudo -H -u tanum bash -c 'echo $HOME'
tpf
fonte