画面で設定されていないLD_LIBRARY_PATH


13

screenbashで実行すると、変数LD_LIBRARY_PATHが消去されます。いくつか読んだところ、これは予想される動作のようですが、回避する必要があります。

回避策は、LD_LIBRARY_PATH宣言をに追加すること~/.bashrcです。私の場合、LD_LIBRARY_PATHはシェルの起動からscreenを呼び出すまでの間に大幅に変更されるため、LD_LIBRARY_PATH の現在の値をscreenセッションに取得する必要があります。


実行画面の前にLD_KLIBRARY_PATHをエクスポートしましたか?
kinnou02

スーパーユーザーの質問。
karlphillip、2011年

申し訳ありませんが、どうにか移動できますか、それとも削除して再投稿しますか?

あなたが5つの近い票を獲得した場合、それはそこに自動的にぶつかります。もう1つ!
Thomas

回答:


14

screen環境変数の設定を解除しません。Linux自体によって削除されます。

ほとんどのシステムでは、データベースを変更できるようにするために、/usr/bin/screen実行可能ファイルはグループのsetgidビットでインストールされます。また、setgidを使用して、ソケットディレクトリ()へのアクセスを制御します。utmputmp/var/run/screen/

Linuxでは、setuidプログラム(またはsetgidの)プログラムが実行され、それが特定の環境(含む変数受信しないLD_LIBRARY_PATH、いくつかの他LD_*の変数、およびHOSTALIASES可能な攻撃ポイントを減少させるために、)を:そうでなければ、小さな図書室やトリックを書くことができsuたりsudo「改善された」関数をそのように呼び出すことに。


からsetgidビットを削除できscreenますが、ソケットディレクトリを全員が完全にアクセスできるようにする必要があります(モード0777)。ただし、screenアタッチメントのUID自体もチェックするため、セキュリティ上のリスクはありません。

しかし、あなたがすべきではない作るutmpデータベースは誰でも書き込めます。


(注:環境変数がカーネル、ld-linux.so、glibcランタイムのいずれによって削除されたかは、よくわかりません。)
user1686

本当にうまくいきました。これらは実行する必要があるコマンドです:chgrp root $(which screen)chmod 777 /var/run/screen。この小さなbashスクリプトでテストできwhile true; do echo $LD_LIBRARY_PATH; sleep 2; done ます。パスが正常に表示されていることがわかります。おかげさまでありがとう。
lepe

7

では.screenrcsetenvコマンドを使用して画面の環境に値を設定できます。

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

これは、シェルが起動する前に設定されます。もちろん、LD_LIBRARY_PATH_SCREEN画面を起動する前に設定する必要があります。


1
grawityの回答を参照してください-LD_LIBRARY_PATHは、このコンテキストの特別な変数です。これが機能したとしても(setenvは '='である必要はありません)、設定しようとしている環境変数の名前を変更することはあまり役に立ちません。プログラムはまだ正規名を見ています(stackoverflow.com/questions/13974069/…を参照)。
Andrew Wood

修正用です。構文を修正し、環境の開始画面に別の変数があることを忘れていました。_SCREEN一つは、あなたのrcファイルまたは画面を起動するラッパースクリプトに設定することができます。
Droj 2013年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.