Usando o sudo 1.7.4p4 no Solaris 5.10 e o sudo 1.6.7p5 no RHEL4 u6, não consigo ver como preservar minhas variáveis de ambiente, por exemplo $ PYTHONPATH. Adicionei esta linha aos sudoers, mas não faz diferença:
Defaults !env_reset
Estou fazendo algo errado ou a instalação do sudo simplesmente não está respeitando o sinalizador env_reset?
Edit: Pelo menos no Solaris, descobrimos que esse problema depende do shell! O shell raiz padrão é Bourne, se sudo bash
rodarmos o bash sob sudo ( ) por outro lado,! Env_preset preservará o ambiente (incluindo PATH e LD_LIBRARY_PATH). Este é um comportamento bastante confuso, devo dizer.
Respostas:
Use com cuidado, há problemas de segurança com sudo e variáveis.
De
man sudoers
eu achei que você deveria usarNo Ubuntu,
sudo
preserva algumas variáveis.sudo -i
é mais como fazer login como root e depois executar o comando Ambos podem ser inconvenientes, o primeiro parasudo nano myfile
deixa os arquivos pertencentes à raiz dentro de sua casa e o segundo parasudo -i nano myfile
tenta abrir / root / myfile.Corre
e veja o que dá. Aqui dá
por exemplo. Agora execute
sudo visudo
e adicione a linhasubstituindo pelo que você encontrou pouco antes. Anexe um novo caminho a ele, se necessário.
Sobre bibliotecas:
As distribuições Linux são muito cuidadosas
PATH
e você deve ter muito cuidado antes de brincar. Seja especialmente cuidadoso ao adicionar caminhos como ".
" ou/home/username
, não é seguro.Um dos perigos de adicionar caminhos é que ele abre a possibilidade de os arquivos serem executados
root
, abrindo uma janela na segurança do sistema que pode ser explorada por software malicioso. Pode haver outros perigos. Apenas certifique-se de saber o que está fazendo. Ignorarsudo
medidas de segurança pode tornar seu Solaris tão seguro quanto o Windows XP.fonte
sudo
escritores foram cuidadosos ao impedir que você o fizesse. Você não deseja que a biblioteca maliciosa seja carregada porque foi encontrada no caminho usado pelo sudo. Então, é por isso que é redefinido. Se você estiver codificando coisas que devem ser executadas pela raiz, copie-as para o diretório do sistema apropriado.Brincar
sudoers
é para ser feito com cautela, como outros já disseram.Uma abordagem mais simples para casos mais simples, quando há variáveis de ambiente específicas que você deseja preservar, é apenas passar a variável de ambiente desejada diretamente através do sudo (isso é mostrado
[VAR=value]
na ajuda do sudo cmdline).Veja este pequeno exemplo em que também o demonstrei para mais de uma variável.
Para o
PYTHONPATH
exemplo original da pergunta, basta usar o seguinte:Criar um alias para esse tipo de coisa é útil. Igual a:
fonte
Você
Defaults !env_reset
parece bem, supondo que você também não esteja chamando o sudo com a-E
opçãoVocê pode tentar remover completamente essa entrada.
Você verificou que está editando o arquivo sudoers correto? Eu estou supondo que poderia ser
/etc/sudoers
ou/usr/local/etc/sudoers
dependendo de como foi instalado. Você editou usandovisudo
?Como você está executando o sudo?
sudo python
,sudo su
,sudo su -
,sudo -s
, Outra coisa? Somentesudo python
esudo su
preservaria seu ambiente.O que
env | grep PYTHONPATH
diz? Se nada, verifique se o PYTHONPATH é exportado executandoexport PYTHONPATH
e tente novamente.O que
sudo env | grep PYTHONPATH
diz? Se ele imprimir o valor esperado, algo mais estará substituindo seu valor PYTHONPATH. Talvez o .bashrc ou o .bash_profile do root ou os arquivos de configuração do sistema.fonte
editor
oupassprompt
para ver se você possui o arquivo correto. Ou use strace, dtrace, truss ou similar e veja quais arquivos ele abre.De acordo com a documentação do Ubuntu para LD_LIBRARY_PATH :
Então:
Adicione um
ld.so
arquivo de configuração/etc/ld.so.conf.d/
com o caminho do seuLD_LIBRARY_PATH
Atualize o cache com:
fonte