O Debian e o Ubuntu enviam um /etc/sudoers
arquivo que contém Defaults env_reset
, que redefine as variáveis de ambiente.
No entanto, o comportamento de env_reset
foi alterado de não tocar em $ HOME para redefini-lo para a casa do usuário de destino.
O Ubuntu decidiu corrigir a versão deles sudo
para manter o comportamento anterior:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
No Ubuntu, para redefinir a variável de ambiente $ HOME para o usuário de destino, é preciso definir um Defaults always_set_home
ou Defaults set_home
(nesse caso, apenas sudo -s
o HOME será atualizado) /etc/sudoers
.
Este bug no rastreador Ubuntu tem um pouco mais de razão para não definir $ HOME no sudo:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
Veja o comentário 4:
Se o HOME for removido, por exemplo, vim, bash, etc., usará /root/.vimrc, /root/.bashrc, etc, em vez do ~ / .vimrc, ~ / .bashrc do usuário, etc. Embora seja uma má ideia Para executar clientes X via sudo, eles também provavelmente procurariam nos locais errados arquivos de configuração, e há uma chance de que os clientes X11 nem consigam se conectar ao servidor X11 se estiverem direcionados ao arquivo .Xauthority errado.
É uma decisão consciente dos desenvolvedores do Ubuntu.
Esta resposta tem mais detalhes sobre as opções de sudoers, como always_set_home
:
https://unix.stackexchange.com/a/91572/281844
Há uma segunda questão na sua pergunta, sudo echo $HOME
que ainda mostra a casa do usuário, mesmo no Debian.
Isso acontece porque o shell está se expandindo $HOME
antes de executar o sudo
comando.
Então, é isso:
$ sudo echo $HOME
É primeiro expandido pelo shell para:
$ sudo echo /home/user
E então o sudo executa echo /home/user
como root ...
Isso deve demonstrar a diferença também:
$ sudo bash -c 'echo $HOME'
/root
Ou obtenha um shell raiz completo e veja a variável de ambiente lá:
$ sudo -s
# echo $HOME
/root