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.


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.


(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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.