Laufen screen
in bash wischt die Variable LD_LIBRARY_PATH. Ich habe etwas gelesen und es scheint, dass dies erwartetes Verhalten ist, aber ich muss es umgehen.
Die Problemumgehung besteht darin, die LD_LIBRARY_PATH-Deklaration hinzuzufügen ~/.bashrc
. In meinem Fall wird LD_LIBRARY_PATH zwischen dem Start der Shell und dem Aufrufen des Bildschirms stark geändert, sodass ich den aktuellen Wert von LD_LIBRARY_PATH in die screen
Sitzung übernehmen muss.
bash
environment-variables
gnu-screen
Andrew Wood
quelle
quelle
Antworten:
screen
hebt die Umgebungsvariable nicht auf; es wird von Linux selbst entfernt.Auf den meisten Systemen wird die
/usr/bin/screen
ausführbare Datei mit dem Bit setgid fürutmp
group installiert , um dieutmp
Datenbank ändern zu können . Außerdem wird setgid verwendet , um den Zugriff auf das Socket-Verzeichnis (/var/run/screen/
) zu steuern .Wenn unter Linux ein setuid- (oder setgid- ) Programm ausgeführt wird, empfängt es bestimmte Umgebungsvariablen (einschließlich
LD_LIBRARY_PATH
mehrerer andererLD_*
Variablen undHOSTALIASES
) nicht, um die möglichen Angriffspunkte zu verringern: Andernfalls könnten Sie eine kleine Bibliothek und einen Trick schreibensu
odersudo
auf diese Weise Ihre "verbesserten" Funktionen aufzurufen.Sie können das setgid- Bit aus entfernen
screen
, müssen jedoch das Socket-Verzeichnis für alle zugänglich machen (Modus 0777). Es sollte jedoch kein Sicherheitsrisiko darstellen, dascreen
auch die UID des Anhängers selbst überprüft wird.Sie sollten jedoch nicht die machen
utmp
Datenbank Welt beschreibbar.quelle
chgrp root $(which screen)
undchmod 777 /var/run/screen
. Sie können mit diesem kleinen Bash-Skript testen:while true; do echo $LD_LIBRARY_PATH; sleep 2; done
Sie werden sehen, dass der Pfad erfolgreich angezeigt wird. Danke Grawity.In Ihrem
.screenrc
können Sie densetenv
Befehl verwenden, um einen Wert in der Bildschirmumgebung festzulegen.Dies wird festgelegt, bevor Ihre Shell gestartet wird. Muss natürlich
LD_LIBRARY_PATH_SCREEN
eingestellt werden, bevor Sie den Bildschirm starten.quelle
_SCREEN
kann in Ihrer RC-Datei oder in einem Wrapper-Skript festgelegt werden, das den Bildschirm startet.Probieren
export
Sie die Umgebungsvariable aus, an der Sie interessiert sind.quelle