Linuxの動的リンカーがパスを検索する順序は何ですか?


11

これは私が使用するときに気づいた特異性を扱っているため、複製ではありません/etc/ld.so.conf

動的リンカーがライブラリを検索するパスを取得するには、コマンドを実行しldconfig -v | grep -v "^"$'\t' | sed "s/:$//g"ます。に/etc/ld.so.confパスがリストされていない場合。前のコマンドからの出力は

/lib
/usr/lib

/lib最初に検索し、それから検索すると考えました/usr/lib。私のような新しいパスを追加するとき/usr/local/libに、/etc/ld.so.confリメイク、その後と/etc/ld.so.cache、出力からはldconfig -v | grep -v "^"$'\t' | sed "s/:$//g"なり

/usr/local/lib
/lib
/usr/lib

リストされたディレクトリが検索される順序が上から下であることが正しい場合、追加のディレクトリが/libとの前に検索されるため、これは奇妙です/usr/lib。信頼できるディレクトリの前に追加のディレクトリが検索されること自体は奇妙ではありませんが、/libが前/usr/libに検索されると、/bin/sbin/usr/bin/usr/sbininの後に検索されるため、奇妙PATHです。

によってリストされたパスldconfig -v | grep -Ev "^"$'\t' | sed "s/:$//g"が下から上に検索された場合でも、信頼できるディレクトリの後に追加のディレクトリが検索され、の後に検索されるため、順序が歪ん/libでい/usr/libます。

では、ld.soライブラリのパスを検索する順序は何ですか?なぜ/lib以前に検索されるの/usr/libですか?そうでない場合、追加のディレクトリが検索されるのはなぜ/libですか?

回答:


13

順序は、ダイナミックリンカーのマニュアルに記載されていますld.so。それは:

  1. からのディレクトリLD_LIBRARY_PATH
  2. からのディレクトリ/etc/ld.so.conf
  3. /lib;
  4. /usr/lib

(私は少し簡略化しています。詳細はマニュアルを参照してください。)

この順序は、デフォルトの場所にあるライブラリをカスタムライブラリでオーバーライドする唯一の方法であると考える場合に意味があります。LD_LIBRARY_PATHユーザー設定です。他の設定よりも優先する必要があります。/etc/ld.so.confローカル設定であり、オペレーティングシステムのデフォルトの前に表示されます。したがって、ユーザーが別のバージョンのライブラリでプログラムを実行したい場合LD_LIBRARY_PATH、その異なるライブラリバージョンの場所を含むプログラムを実行できます。また、管理者として、ライブラリの別のバージョンをに入れて/usr/local/libリスト/usr/local/libすることができ/etc/ld.so.confます。

信頼はこれには入りません。すべてのライブラリがそこからロードされる可能性があるため、この検索パスにリストされているディレクトリは信頼されている必要があります。理論的には、システムで「より多くの信頼を必要とする」すべてのプログラムで使用されるライブラリ名をリストし、これらのすべてのライブラリが「最も信頼できる」ディレクトリに存在することを確認できます。 「信頼性が低い」プログラムを除いて、検索パス上のより信頼できるディレクトリの後にある場合に使用します。しかし、それは非常に壊れやすいでしょう。それはまた、かなり無意味であろう:攻撃者は値注入できる場合LD_LIBRARY_PATH又は要素を/etc/ld.so.conf、それらが確実に、より直接的な経路を有するような値を注入するように、任意のコードを実行するPATHと、LD_PRELOAD、など。ライブラリのロードパスでの信頼は、実行が信頼境界を超える場合、つまり追加の特権(たとえば、setuid / setgidプログラム、またはを介してsudo)でプログラムを実行する場合に重要です。この場合に何が起こるかは、LD_LIBRARY_PATH空白にされています。

用として/lib/usr/lib、それは問題であまりしません。彼らは同じエンティティ(オペレーティングシステム)によって提供しているとの両方に存在するのライブラリがあってはなりません。/lib(非常に小さな)パフォーマンス上の利点を提供するため、最初にリストすることは理にかなっています:最も頻繁に使用されるライブラリー、特に小さな基本的なプログラムで使用されるライブラリー-running program)、にあり/libます。


LD_LIBRARY_PATHに複数のディレクトリがリストされている場合、それらはどの順序で検索されますか?
argentum2f

@ argentum2f左から右へ、と同じPATH
Gilles 'SO-悪をやめる'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.