LD_LIBRARY_PATH non impostato dallo schermo


13

L'esecuzione screenin bash cancella la variabile LD_LIBRARY_PATH. Ho letto un po 'e sembra che questo sia un comportamento previsto, ma devo aggirarlo.

La soluzione alternativa sta aggiungendo la dichiarazione LD_LIBRARY_PATH a ~/.bashrc. Nel mio caso, LD_LIBRARY_PATH viene cambiato molto tra l'avvio della shell e quando invoco lo schermo, quindi devo inserire il valore corrente di LD_LIBRARY_PATH nella screensessione.


hai esportato LD_KLIBRARY_PATH prima di eseguire la schermata?
kinnou02,

Domanda da superutente.
karlphillip,

Spiacenti, posso spostarlo in qualche modo o devo eliminare e ripubblicare?

Se ottieni cinque voti ravvicinati, verrà automaticamente respinto lì. Ancora uno da fare!
Thomas,

Risposte:


14

screennon disinserisce la variabile d'ambiente; viene rimosso da Linux stesso.

Sulla maggior parte dei sistemi, l' /usr/bin/screeneseguibile viene installato con il bit setgid per utmpgruppo, al fine di poter modificare il utmpdatabase. Utilizza anche setgid per controllare l'accesso alla directory socket ( /var/run/screen/).

Su Linux, quando un setuid (o setgid ) programma è Ran, non riceve alcune variabili d'ambiente (tra cui LD_LIBRARY_PATH, diverse altre LD_*variabili, e HOSTALIASES), al fine di ridurre i possibili punti di attacco: In caso contrario, si potrebbe scrivere una piccola biblioteca e trick suo sudonel chiamare le tue funzioni "migliorate" in quel modo.


Puoi rimuovere il bit setgid da screen, ma dovrai rendere la directory socket completamente accessibile a tutti (modalità 0777). Non dovrebbe essere un rischio per la sicurezza, tuttavia, poiché screencontrolla anche l'UID dell'attaccante stesso.

Tuttavia, si dovrebbe non rendere il utmpdatabase di mondo-scrivibili.


(Nota: non sono del tutto sicuro che le variabili di ambiente vengano rimosse dal kernel, da ld-linux.so o dal runtime di glibc.)
user1686

Ha funzionato davvero bene. Questi sono i comandi che devono essere eseguiti: chgrp root $(which screen)e chmod 777 /var/run/screen. Puoi provare con questo piccolo script bash: while true; do echo $LD_LIBRARY_PATH; sleep 2; done vedrai che il percorso è visualizzato correttamente. Grazie per la gravità.
lepe

7

Nel tuo .screenrc, puoi usare il setenvcomando per impostare un valore nell'ambiente dello schermo.

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

Questo è impostato prima dell'avvio della shell. Ovviamente LD_LIBRARY_PATH_SCREENdeve essere impostato prima di iniziare la schermata.


1
Vedi la risposta di grawity - LD_LIBRARY_PATH è una variabile speciale in questo contesto. Anche se funzionasse (setenv non ha bisogno di '=', a proposito) non sarebbe molto utile rinominare la variabile d'ambiente che stiamo cercando di impostare; i programmi guarderebbero comunque il nome canonico (vedi stackoverflow.com/questions/13974069/… ).
Andrew Wood,

Grazie per la correzione. Ho corretto la sintassi e avevo dimenticato di avere una variabile diversa nella schermata iniziale dell'ambiente. L' _SCREENuno può essere impostata nel file rc o in uno script wrapper che inizia schermo.
Droj,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.