Como configurar sudoers para manter sempre a variável de enviori LD_LIBRARY_PATH?

3

Não importa o que eu tente, parece que a variável de ambiente LD_LIBRARY_PATH não é mantida depois que eu executo um comando com o sudo. A única maneira que eu consegui manter, é prefixar o meu comando sudo com LD_LIBRARY_PATH=/the/path sempre que eu chamo da linha de comando, mas eu gostaria de não ter que fazer isso toda vez.

Parece que a opção env_keep ignora essa variável, assim como a opção exempt_group.

Meu grupo% tem atualmente ALL=(ALL) NOPASSWD:ALL como seu acesso em sudoers. Eu gostaria que essa variável de ambiente específica fosse mantida para qualquer comando que eu executasse.

Como posso fazer isso?

Meu servidor está executando o Red Hat Enterprise Linux 5.7.

    
por Yanick Girouard 20.03.2012 / 17:36

4 respostas

12

Você pode esperar que você possa fazer isso usando

Defaults env_keep += "LD_LIBRARY_PATH FRED" 

mas um teste rápido em CentOS 6.2 com Sudo version 1.7.4p5 não passa LD_LIBRARY_PATH , mas passa FRED . A página man sudoers tem isso a dizer

Note that the dynamic linker on most operating systems will remove variables that
can control dynamic linking from the environment of setuid executables, including
sudo. Depending on the operating system this may include _RLD, DYLD_, LD_, 
LDR_, LIBPATH, SHLIB_PATH, and others. These type of variables are removed from 
the environment before sudo even begins execution and, as such, it is not 
possible for sudo to preserve them

Parece que o sistema remove o LD_LIBRARY_PATH do ambiente antes que o sudo o veja.

    
por 20.03.2012 / 18:15
4

Para que isso funcionasse eu tive que fazer isso:

  1. Adicione Defaults env_keep += "LD_LIBRARY_PATH" aos sudoers
  2. Adicione este alias ao meu arquivo .bashrc: alias sudo='sudo LD_LIBRARY_PATH=/mypath'

Agora, qualquer comando que eu chamar com o sudo terá a configuração da variável.

    
por 21.03.2012 / 18:14
0

Isso está acontecendo não apenas para o LD_LIBRARY_PATH, mas para algumas outras variáveis de ambiente que podem ser temperadas com seu ambiente de criação. No meu caso, o sudo se tornou:

sudo -HE env PATH=${PATH} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} PYTHONPATH=${PYTHONPATH} my_command
    
por 01.07.2016 / 09:29
-1

Parece que você ainda não fez export LD_LIBRARY_PATH . Isso fará com que a variável ambiental esteja disponível para tudo e resolva esse problema.

Como alternativa, se você quiser uma variável ambiental persistente infalível, considere anexá-la ao arquivo bashrc ( ~/.bashrc ) e abra uma nova sessão de terminal.

    
por 20.03.2012 / 17:45