Por que o sudo -E não mantém minha variável de ambiente $ HOME?

2

Na minha máquina Red Hat, quando executo o comando echo $HOME com minha conta de usuário normal, recebo /home/snrub . Quando executo o comando sudo vim foo.txt e dentro do vim eu digito echo $HOME recebo /root retornado. Eu quero que ele retorne /home/snrub para que ele analise meus plugins do Vim, mesmo quando estou editando um arquivo com o sudo. De acordo com a sudo manpage, as opções -E ou -H devem funcionar, mas se eu executar sudo -E vim foo.txt ou sudo -H vim foo.txt ou sudo -EH vim foo.txt , elas ainda não analisam o arquivo .vimrc da minha casa e retornam /root quando digito echo $HOME .

Eu também tentei adicionar a seguinte linha ao arquivo sudoers e salvar:

Defaults   env_keep += "HOME"

Ainda não está funcionando. Se eu executar sudo vim foo.txt e, em seguida, dentro do tipo de vim echo $HOME , ele ainda diz /root . Da mesma forma (e para verificar se isso não é estritamente um problema com o Vim), se eu digitar sudo emacs foo.txt e pressionar Enter, digite Alt-X, digite getenv e pressione Enter, digite HOME e pressione Enter, ainda retornará /root . Como faço para retornar /home/snrub ?

    
por MrSnrub 20.12.2016 / 14:22

1 resposta

0

Como precaução de segurança, sudo redefine uma lista de variáveis de ambiente (TERM, PATH, HOME, E-MAIL, SHELL, LOGNAME, USER, USERNAME e SUDO_ *) sob a opção env_reset , que é ativada por padrão. Para que o HOME transitasse de sua conta de usuário para um ambiente sudo , você teria que:

  • use a tag SETENV na regra sudo junto com a opção -E ou

  • especificamente, desmarque a opção env_reset .

Além disso, assegure-se de que always_set_home esteja desativado (o que é por padrão).

Veja a página de manual do sudoers para todos os detalhes e interações.

    
por 20.12.2016 / 14:47