sudo -E não passando todas as variáveis

5

Lendo o man pages esperado sudo -E para passar todas as variáveis de ambiente para o subshell, mas não estou obtendo os resultados esperados.

Como esperado, impressionante:

$ export LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/
$ env | grep LD
LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/

Mais grandiosidade:

$ env -i LD_LIBRARY_PATH=/tmp/no/where env | grep LD
LD_LIBRARY_PATH=/tmp/no/where

Não é o esperado:

$ env -i LD_LIBRARY_PATH=$LD_LIBRARY_PATH sudo -E /usr/bin/env | grep LD
$
$ env -i LD_LIBRARY_PATH=/tmp/no/where sudo -E /usr/bin/env | grep LD
$

Então, como posso obter sudo -E para passar LD_LIBRARY_PATH , sem editar /etc/sudoers ?

Editar :

De acordo com Como faço para o sudo preservar minhas variáveis de ambiente? o OP indica que o shell pode desempenhar um papel em conjunto com !env_reset . Estou executando Arch Linux e o shell padrão é BASH . Mais uma vez, eu não quero editar /etc/sudoers , é possível?

    
por mmlb 31.01.2013 / 15:49

1 resposta

6

Determinadas variáveis de ambiente, incluindo LD_LIBRARY_PATH ou HOSTALIASES (lista completa está em sysdeps / generic / unsecvars.h ), são automaticamente desfeitos pela glibc ao executar um programa privilegiado (isto é, com o setuid bit ou com recursos do sistema de arquivos). Esse é um recurso de segurança, pois, caso contrário, os usuários poderiam carregar suas próprias bibliotecas em su ou sudo e induzi-los a aceitar qualquer senha.

Você precisará usar sudo env LD_LIBRARY_PATH=$LD_LIBRARY_PATH yourcommand para passar a variável aos comandos executados via sudo.

    
por 31.01.2013 / 17:33