web-dev-qa-db-ja.com

ld.so.preloadとは何ですか?

ld.so.preloadというファイルを偶然見つけましたが、実際の使用法を見つけることができません。環境変数LD_PRELOADと関係がありますか?

11
Teee

良い質問!実際、/ etc/ld.so.preloadLD_PRELOADを置き換えます。

LD_PRELOADは、セキュリティ上の懸念により厳しい制限を受けます。任意のsetuidバイナリを実行できません。可能であれば、ライブラリルーチンを独自の悪意のあるコードに置き換える可能性があるためです。たとえば ここ はいい議論です。実際、あなたは ld.so'user manual で読むことができます:

LD_PRELOAD

他のすべての前にロードされる追加のユーザー指定のELF共有ライブラリのリスト。リストの項目は、スペースまたはコロンで区切ることができます。これは、他の共有ライブラリの関数を選択的にオーバーライドするために使用できます。ライブラリは、DESCRIPTIONで指定されたルールを使用して検索されます。 set-user-ID/set-group-ID ELFバイナリの場合、スラッシュを含むプリロードパス名は無視され、標準検索ディレクトリのライブラリは、ライブラリファイルでset-user-ID許可ビットが有効になっている場合にのみロードされます。

代わりに、ファイル/ etc/ld.so.preloadにはそのような制限はありません。つまり、ディレクトリ/ etcに読み書きできる場合、ルート認証情報をすでに持っています。したがって、その使用。最初は持っていないように見えても、may使用/ etc/ld.so.preloadであることを覚えておいてください。それは-の機能にすぎません- glibc、したがって、すべてのLinuxディストリビューション(ただし、私の知る限りでは、Unixフレーバーではありません)。したがって、それを作成して、anyLinuxディストリビューションで動作します。

16
MariusMatutiae