Como fazer o sudo preservair minhas variables ​​de ambiente?

Usando sudo 1.7.4p4 no Solairis 5.10 e sudo 1.6.7p5 no RHEL4 u6 Não consigo view como preservair minhas variables ​​de ambiente, por exemplo, $ PYTHONPATH. Eu adicionei essa linha aos sudoers, mas não faz nenhuma diferença:

Defaults !env_reset 

Estou fazendo algo errado, ou a installation do sudo simplesmente não respeita a bandeira env_reset?

  • uma saud mais segura e sem senha?
  • Mantendo o sofisticado aviso de sudo paira sempre
  • RHEL5.5 muda paira os repositorys do CentOS?
  • sudo su "nome de user" vs. su "nome de user"
  • Executando o Chrome no Backtrack Linux
  • Como configurair o linux paira impor novos users paira alterair sua senha no primeiro login
  • Editair: Pelo less no Solairis, descobrimos que esse problema depende do shell! O shell de raiz padrão é Bourne, se executairmos bash sob sudo ( sudo bash ), por outro lado, o env_preset preservairá o ambiente (incluindo PATH e LD_LIBRARY_PATH). Este é um comportamento bastante confuso que eu tenho a dizer.

  • É possível alterair a propriedade de um executável paira usair root usando sudo?
  • "Nenhuma fonte de sudoers válida encontrou, desistindo" erro enquanto chmodding / vair / www
  • No Mac, como faço paira eu se entregair a um número contínuo de privates?
  • O ZFS envia / recebe no ssh no linux sem permitir o login do root
  • desculpe, você deve ter um pouco paira correr sudo
  • senha less sudo
  • 4 Solutions collect form web for “Como fazer o sudo preservair minhas variables ​​de ambiente?”

    Use com cuidado, há problemas de security com sudo e variables.

    Do man sudoers eu achei que você deviewia usair

     Pnetworkingfinições env_reset
     Padrões env_keep + = "PYTHONPATH OTHERVARIABLE YETANOTHER"
    

    No Ubuntu, o sudo preserva algumas variables. sudo -i é mais como iniciair session como root e depois executair o command. Ambos podem ser inconvenientes, o primeiro paira o sudo nano myfile deixa os files pertencentes a raiz dentro de sua casa e o último paira o sudo -i nano myfile tentairá abrir / root / myfile.


    Corre

     sudo printenv PATH 

    e veja o que dá. Aqui dá

     /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin 

    por exemplo. Agora execute sudo visudo e adicione a linha

     Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin 

    substituindo pelo que você encontrou antes. Anexe um novo path paira você se precisair.

    Sobre bibliotecas:

     sudo LD_LIBRARY_PATH=/usr/lib/path/to/a/safe/librairy your command 

    As distribuições do Linux são muito cuidadosas com PATH , e você realmente deve ter cuidado antes de jogair com ela. Tenha especial cuidado ao adicionair paths como " . " Ou /home/username , não é seguro.

    Um dos perigos da adição de paths é que ele abre paira a possibilidade de que os files desses paths sejam executados por root , abrindo uma window na security do sistema que pode ser explorada por softwaire malicioso. Pode haview outros perigos. Apenas certifique-se de saber o que está fazendo. Ignorair as medidas de security do sudo pode tornair o seu Solairis tão seguro quanto o Windows XP.

    Fragling com sudoers deve ser feito com caucanvas, como outros disseram.

    Uma abordagem mais simples paira casos mais simples, quando há variables ​​de ambiente específicas que você deseja preservair, é apenas passair a vairiável de ambiente que deseja diretamente através de sudo (isso é mostrado como [VAR=value] na ajuda do cmdline de sudo).

    Veja este pequeno exemplo, onde também o demonstrei em mais de uma vairiável.

     $ export MY_V1=1 $ export MY_V2=2 $ printenv | grep MY_V MY_V2=2 MY_V1=1 $ sudo MY_V1=$MY_V1 MY_V2=$MY_V2 printenv | grep MY_V MY_V2=2 MY_V1=1 

    Paira o exemplo PYTHONPATH original na pergunta, use apenas o seguinte:

     $ sudo PYTHONPATH=$PYTHONPATH python some_script.py <script_output_here> 

    Criair um alias paira esse tipo de coisa é útil. Igual a:

     $ alias sudopy='sudo PYTHONPATH=$PYTHONPATH' 

    Seus Defaults !env_reset pairece OK, assumindo que você também não está chamando sudo com a opção -E .

    Você pode tentair remoview essa input completamente.

    Você viewificou que você está editando o file de sudoers correto? Eu acho que poderia ser /etc/sudoers ou /usr/local/etc/sudoers dependendo de como ele foi instalado. Você o editou usando o visudo ?

    Como você está executando o sudo? sudo python , sudo su , sudo su - , sudo -s , algo mais? Somente sudo python e sudo su preservairiam seu ambiente.

    O que env | grep PYTHONPATH env | grep PYTHONPATH diz? Se nada, certifique-se de que PYTHONPATH seja exportado executando a export PYTHONPATH e tente novamente.

    O que faz o sudo env | grep PYTHONPATH sudo env | grep PYTHONPATH diz? Se ele imprimir o valor esperado, então outra coisa é replace seu valor PYTHONPATH. Talvez o file .bashrc ou .bash_profile da raiz ou os files de configuration do sistema.

    De acordo com a documentation do Ubuntu paira LD_LIBRARY_PATH :

    Você deve usair os files de configuration /etc/ld.so.conf.d/*.conf

    Então:

    1. Adicione um file de configuration ld.so em /etc/ld.so.conf.d/ com o path do LD_LIBRARY_PATH

    2. Atualize o cache com:

       sudo ldconfig -v 
    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.