screen
bashで実行すると、変数LD_LIBRARY_PATHが消去されます。いくつか読んだところ、これは予想される動作のようですが、回避する必要があります。
回避策は、LD_LIBRARY_PATH宣言をに追加すること~/.bashrc
です。私の場合、LD_LIBRARY_PATHはシェルの起動からscreenを呼び出すまでの間に大幅に変更されるため、LD_LIBRARY_PATH の現在の値をscreen
セッションに取得する必要があります。
screen
bashで実行すると、変数LD_LIBRARY_PATHが消去されます。いくつか読んだところ、これは予想される動作のようですが、回避する必要があります。
回避策は、LD_LIBRARY_PATH宣言をに追加すること~/.bashrc
です。私の場合、LD_LIBRARY_PATHはシェルの起動からscreenを呼び出すまでの間に大幅に変更されるため、LD_LIBRARY_PATH の現在の値をscreen
セッションに取得する必要があります。
回答:
screen
環境変数の設定を解除しません。Linux自体によって削除されます。
ほとんどのシステムでは、データベースを変更できるようにするために、/usr/bin/screen
実行可能ファイルはグループのsetgidビットでインストールされます。また、setgidを使用して、ソケットディレクトリ()へのアクセスを制御します。utmp
utmp
/var/run/screen/
Linuxでは、setuidプログラム(またはsetgidの)プログラムが実行され、それが特定の環境(含む変数受信しないLD_LIBRARY_PATH
、いくつかの他LD_*
の変数、およびHOSTALIASES
可能な攻撃ポイントを減少させるために、)を:そうでなければ、小さな図書室やトリックを書くことができsu
たりsudo
「改善された」関数をそのように呼び出すことに。
からsetgidビットを削除できscreen
ますが、ソケットディレクトリを全員が完全にアクセスできるようにする必要があります(モード0777)。ただし、screen
アタッチメントのUID自体もチェックするため、セキュリティ上のリスクはありません。
しかし、あなたがすべきではない作るutmp
データベースは誰でも書き込めます。
chgrp root $(which screen)
とchmod 777 /var/run/screen
。この小さなbashスクリプトでテストできwhile true; do echo $LD_LIBRARY_PATH; sleep 2; done
ます。パスが正常に表示されていることがわかります。おかげさまでありがとう。
では.screenrc
、setenv
コマンドを使用して画面の環境に値を設定できます。
setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN
これは、シェルが起動する前に設定されます。もちろん、LD_LIBRARY_PATH_SCREEN
画面を起動する前に設定する必要があります。
_SCREEN
一つは、あなたのrcファイルまたは画面を起動するラッパースクリプトに設定することができます。
export
興味のある環境変数を試してみてください。
export LD_LIBRARY_PATH