$ LIB変数はUbuntu Server 18.10では何も拡張されません。

$ LIB変数はUbuntu Server 18.10では何も拡張されません。

私はこれと同じ問題があります質問以前の投稿では/etc/ld.so.preload正しいアーキテクチャを傍受できませんでした。いくつかの背景知識:ld.so.preloadバイナリが実行されているすべてのファイルで参照される共有オブジェクト(64ビット)をコンパイルしました。問題は、ERROR: ld.so: object '/usr/local/lib/mysharedobject.so' from /etc/ld.so.preload cannot be preloaded (wrong ELF class: ELFCLASS64): ignored.32ビットプログラムの実行中にエラーが発生したことです。

その質問に対する答えに基づいて問題を解決するために、2つのディレクトリ(およびlib/i386-linux-gnux86_64-linux-gnu例えばin /var/opt)を作成し、プログラムアーキテクチャに従って正しいライブラリがプリロードされるように /var/opt/$LIB/mysharedobject.soinを指定する必要がありました。/etc/ld.so.preload

したがって、この場合、Debianベースのシステムは次/var/opt/$LIB/mysharedobject.soのように拡張されます。

  • /var/opt/lib/i386-linux-gnu/mysharedobject.so32ビットプログラムの場合。
  • /var/opt/x86_64-linux-gnu/mysharedobject.so64ビットプログラムの場合。

しかし、これを適用した後、私が実行しているすべてのバイナリ(たとえばls)は次の「エラー」を出力します。
ERROR: ld.so: object '/var/opt/$LIB/mysharedobject.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.

ご覧のとおり、$LIB は何も拡張されません。また、このライブラリを使用してアップデートシステムを設定し$LD_LIBRARY_PATH/var/opt実行しましたが、成功しませんでした。ldconfigここで問題は何ですか?

ベストアンサー1

これシェル拡大する$LIBしかし、次のような場合は不可能です。

指定する/var/opt/$LIB/mysharedobject.so存在する/etc/ld.so.preload

これマニュアルページ言及する/etc/ld.so.preloadグローバル拡張や環境変数の可能性についての言及はありません。

プログラムの前にロードするスペースで区切られたELF共有オブジェクトのリストを含むファイル。ディスカッションを見るLD_PRELOAD以上。両方ともLD_PRELOADそして /etc/ld.so.preload使用されると、指定されたライブラリ LD_PRELOADまず事前にロードしてください。 /etc/ld.so.preloadシステム全体に影響を与え、システムで実行されているすべてのプログラムに指定されたライブラリが事前にロードされます。 (これは一般的に望ましくなく、通常はライブラリ構成エラーの問題に対する一時的な解決策などの緊急解決策としてのみ使用されます。)

しばらく停止し、データがどのように使用されるかを考えると、その可能性もほとんどありません。

  • glob拡張は、データ(曖昧さ)があらゆる種類の興味深いファイルと一致する可能性があるため、セキュリティ上の問題になる可能性があります。
  • 環境変数を設定する必要があります。どこかにで、ユーザーごとに簡単に異なる場合があります。

これで、このマニュアルはマニュアルページに記載されています。$LIBrpathで使用できますが、LD_PRELOAD次のように言います。

セーフランモードでは、スラッシュを含む事前ロードパス名は無視されます。 また、共有オブジェクトは標準検索ディレクトリからのみプリロードされ、ユーザーID設定モードビットが有効になっている場合にのみ(通常ではありません)。

これはあなたに影響を与えるトラップです。/var/optおそらく標準検索目次。

おすすめ記事