Eu tenho um script bash myhome.sh
contendo apenas uma linha:
echo $HOME
O proprietário do script é um usuário:
$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh
No Ubuntu 16.04 e 17.10 , recebo:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
$ sudo bash myhome.sh
/home/user
No Debian Buster/Testing eu recebo:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
# WHY ?
$ sudo bash myhome.sh
/root
Não entendo porque dentro do script no Debian, se for executado com sudo, sempre recebo $HOME=/root
enquanto no Ubuntu recebo $HOME=/home/user
. Alguém sabe o que os desenvolvedores do Ubuntu mudaram?
Tanto o Debian quanto o Ubuntu enviam um
/etc/sudoers
arquivo que contémDefaults env_reset
, que redefine as variáveis de ambiente.No entanto, o comportamento de não tocar
env_reset
foi alterado para redefini-lo para a casa do usuário de destino.$HOME
Em versões até 19.04, o Ubuntu corrigiu sua versão
sudo
para manter o comportamento anterior (de não alterar$HOME
): https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140Isso foi desfeito para 19.10 e, a partir de então, o Ubuntu faz o que o upstream
sudo
e todas as outras distribuições do Linux fazem e muda$HOME
para o usuário de destino. Veja este Q&A em askubuntu.com para todos os detalhes: Como o sudo lida com $HOME de forma diferente desde 19.10? . A reversão não foi feita para versões anteriores, então 18.04 LTS ainda tem o comportamento específico do Ubuntu.O seguinte é o texto antigo desta resposta e se aplica às versões do Ubuntu até 19.04, incluindo 18.04 LTS.
No Ubuntu, para redefinir a variável de ambiente $HOME para o usuário de destino, é necessário definir
Defaults always_set_home
ouDefaults set_home
(nesse caso, apenassudo -s
o HOME será atualizado) em seu arquivo/etc/sudoers
.Este bug no rastreador do Ubuntu tem mais razões para não definir $HOME no sudo: https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
Veja o comentário nº 4:
É 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/281844Há um segundo problema em sua pergunta,
sudo echo $HOME
que ainda exibe a casa do usuário mesmo no Debian.Isso acontece porque o shell está se expandindo
$HOME
antes de executar osudo
comando.Então, é isso:
É primeiro expandido pelo shell em:
E então o sudo é executado
echo /home/user
como root ...Isso deve demonstrar a diferença também:
Ou obtenha um shell root completo e veja a variável de ambiente lá: