LD_LIBRARY_PATH desconfigurado por tela

13

A execução screenno bash limpa a variável LD_LIBRARY_PATH. Eu li algumas coisas e parece que esse é um comportamento esperado, mas preciso contornar isso.

A solução alternativa é adicionar a declaração LD_LIBRARY_PATH a ~/.bashrc. No meu caso, LD_LIBRARY_PATH é alterado muito entre o lançamento do shell e quando invoco a tela, portanto, preciso inserir o valor atual de LD_LIBRARY_PATH na screensessão.

Andrew Wood
fonte
você exportou LD_KLIBRARY_PATH antes de executar a tela?
precisa saber é o seguinte
Pergunta do superusuário.
precisa saber é o seguinte
Desculpe, posso movê-lo de alguma forma ou devo excluir e republicar?
Se você receber cinco votos próximos, ele será recebido automaticamente. Mais um para ir!
Thomas

Respostas:

14

screennão desativa a variável de ambiente; é removido pelo próprio Linux.

Na maioria dos sistemas, o /usr/bin/screenexecutável é instalado com o setgid bit for utmpgroup, para poder modificar o utmpbanco de dados. Ele também usa setgid para controlar o acesso ao diretório do soquete ( /var/run/screen/).

No Linux, quando um setuid (ou setgid ) programa é executado, ele não recebe certas variáveis de ambiente (incluindo LD_LIBRARY_PATH, várias outras LD_*variáveis, e HOSTALIASES), a fim de reduzir os possíveis pontos de ataque: Caso contrário, você poderia escrever uma pequena biblioteca e truque suou sudopara chamar suas funções "aprimoradas" dessa maneira.


Você pode remover o bit setgidscreen , mas precisará tornar o diretório do soquete totalmente acessível a todos (modo 0777). Não deve ser um risco de segurança, como screentambém verifica o próprio UID do attacher.

No entanto, você não deve tornar o utmpbanco de dados gravável mundialmente.

user1686
fonte
(Nota: Não tenho certeza se as variáveis ​​de ambiente são removidas pelo kernel, pelo ld-linux.so ou pelo glibc runtime.) #
User1686
Funcionou muito bem. Estes são os comandos que precisam ser executados: chgrp root $(which screen)e chmod 777 /var/run/screen. Você pode testar com este pequeno script bash: while true; do echo $LD_LIBRARY_PATH; sleep 2; done Você verá que o caminho é exibido com sucesso. Graças grawity.
Lepe
7

No seu .screenrc, você pode usar o setenvcomando para definir um valor no ambiente da tela.

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

Isso é definido antes do seu shell ser iniciado. Obviamente, LD_LIBRARY_PATH_SCREENprecisa ser definido antes de você iniciar a tela.

Droj
fonte
11
Veja a resposta do grawity - LD_LIBRARY_PATH é uma variável especial neste contexto. Mesmo se isso funcionasse (setenv não precisa de '=', btw), não seria muito útil renomear a variável de ambiente que estamos tentando definir; os programas ainda estariam visualizando o nome canônico (consulte stackoverflow.com/questions/13974069/… ).
Andrew Wood
Than's para a correção. Corrigi a sintaxe e esqueci que tinha uma variável diferente na tela inicial do ambiente. A _SCREENum pode ser definido em seu arquivo rc ou em um script que inicia tela.
Droj
1

Tentando exporta variável de ambiente em que você está interessado.

export LD_LIBRARY_PATH
Benjamin Bannier
fonte