)この問題を解決するために-undefined私は、既存の答えは実際に簡単な方法で質問に答えるかすることを見つける:
LD_RUN_PATH
は、リンカで使用されている(を参照してください)を参照してください。これは、コマンドラインに-rpath ...
がない場合にのみ使用されます(gccコマンドラインの-Wl,rpath ...
)。その変数に定義されているパスは、ELFバイナリファイルのRPATH
エントリに追加されます。 (あなたはそれが私の開発バイナリに表示されます!それはそこではないがあるobjdump -x binary-filename
-inほとんどのケースを使用してそのRPATHを見ることができますが、最終版がRPATH
をインストールします一度削除されます。)
LD_LIBRARY_PATH
は、実行時に使用され、ときにダイナミックリンカ(ldd
を参照)がライブラリを検索する必要があるディレクトリを指定します。間違ったパスを指定すると、間違ったライブラリがロードされる可能性があります。これは
LD_RUN_PATH
(1のように)あなたのバイナリで定義されているRPATH
値に加えて使用され、あなたがプログラマであり、それを使用する方法がわからない場合を除き、実際にはセキュリティ上の脅威が発生しません。 CMakeを使って私のソフトウェアを構築しているので、いつも-rpath
が使われています。そうすれば、ソフトウェアを実行するためにすべてをインストールする必要はありません。 ldd
はすべての.soファイルを自動的に見つけることができます。 (automake環境もそうするはずだったが、比較してもそれほど良くはなかった)
LD_LIBRARY_PATH
はランタイム変数であり、したがって注意する必要があります。それは、私たちがその特別な機能を持っていないと、多くの共有オブジェクトが対処するのが本当に難しいと言われています。セキュリティ上の脅威かどうかは、おそらくそうではありません。ハッカーがコンピュータを持ちこたえた場合、そのハッカーはLD_LIBRARY_PATH
にアクセスできます。何が起こるかは、その変数に間違ったパスを使用すると、バイナリがロードされないことがありますが、ロードすると、クラッシュするバイナリ、または少なくともバイナリが正しく動作しなくなる可能性があります。 1つの懸念は、時間がたつにつれてライブラリの新しいバージョンを取得し、LD_LIBRARY_PATH
を削除することを忘れてしまう可能性があります。つまり、安全でないバージョンのライブラリを使用している可能性があります。
セキュリティのもう一つの可能性は、バイナリが検索しているものと同じ名前の偽のライブラリをインストールした場合、同じ機能をすべて含むライブラリですが、それらの機能の一部が非正常なコードに置き換えられている場合です。彼はLD_LIBRARY_PATH
変数を変更して、そのライブラリをロードすることができます。その後、最終的にハッカーによって実行されます。ハッカーがあなたのシステムにそのようなライブラリを追加できるのであれば、彼はすでに入っていて、おそらく最初の場所でそれを行う必要はないでしょう(とにかく、彼はあなたのシステムを完全に制御しているからです)。あなたのUnixボックスが全体的に安全でない限り、ハッカーは自分のアカウントにライブラリを置くことしかできません。もしあなたの/usr/lib/...
ライブラリの1つをハッカーが置き換えることができれば、彼はすでにあなたのシステムに完全にアクセスできます。だからLD_LIBRARY_PATH
は必要ありません。
@Scoob:LD_RUN_PATHは、ランタイム環境のforknowledgeを想定しています...同じマシンでビルドして実行している場合は問題ありませんが、ELFの場合は避けてください。私はLD_RUN_PATHを指定することでどのように傷つけることができないのか分かりませんが、それは役に立たないかもしれません; -0 – corlettk