11

LD_PRELOADsetuid パーミッションを持つアプリケーションでライブラリをプリロードするために使用しようとしています。最初に試しLD_PRELOADてみたところ、setuid バイナリでは無視されているように見えましたがlsdirなどで試してみると機能していました。

LD_PRELOAD のドキュメントから:

   LD_PRELOAD
          A whitespace-separated list of additional, user-specified, ELF shared
          libraries to be loaded before all others.  This can be used to
          selectively override functions in other shared libraries.  For set-
          user-ID/set-group-ID ELF binaries, only libraries in the standard
          search directories that are also set-user-ID will be loaded.

上記のこのドキュメントに従って setuid パーミッションを使用してライブラリを/usr/lib/usr/local/lib、およびに配置しようとしましたが、まだ機能していないようです。/usr/lib64setuidLD_PRELOADを使用して標準ディレクトリにライブラリがある場合にパスを指定しないと、ライブラリが見つからないように見えます。パスを指定しても、何もしません。

setuid バイナリは、root 以外のユーザー シェルで実行される root 権限バイナリです。何かご意見は?パスや環境変数が欠落しているのか、上記のドキュメントを誤解しているのかわかりません。

編集: 要求された権限は次のとおりです。

としょうかん:

-rwsr-sr-x 1 root root 72580 2012-02-10 07:51

アプリ:

-rwsr-xr-x 1 root root 137517601 2012-02-10 

env | grep LD
LD_LIBRARY_PATH=/usr/lib (I added this manually myself, usually LD_LIBRARY_PATH is empty)
4

5 に答える 5

14

LD_PRELOAD は setuid では使用できません。これは Linux のセキュリティ機能です。参照については、この記事 を確認してください。この記事LD_PRELOADでは、 の例で、一部のライブラリ呼び出しをカスタム コードに置き換えるために使用する方法について詳しく説明していますmalloc

于 2012-06-21T23:16:31.043 に答える
5

SELinux を使用している場合、これが原因である可能性があります。glibc がサポートする ELF 補助ベクトルの 1 つにAT_SECURE. この特定のパラメーター (デフォルトでは 0 または 1) は、ELF 動的リンカーに、システムにとって潜在的に有害であると見なされるさまざまな環境変数の設定を解除するように指示します。これらの 1 つですLD_PRELOAD。通常、この環境サニテーションは setuid/setgid アプリケーションが呼び出されたときに行われます (明らかな脆弱性を防ぐため)。SELinux はまた、アプリケーションが SELinux でドメイン遷移をトリガーするたびにこのサニテーションを強化しました (たとえば、 というラベルの付いたバイナリsysadm_tを介してなど)。SELinux は、読み込まれたアプリケーション (例では mozilla/firefox) のフラグを設定します。mozilla_tmozAT_SECURE

このnoatsecure許可は、特定の移行の環境衛生活動を無効にします。これは、次の allow ステートメントを使用して行うことができます (上記の例に適用されるように)。

allow sysadm_t mozilla_t:process { noatsecure };
于 2012-02-11T09:50:35.040 に答える
0

LD_PRELOAD can't be used with set-user-ID/set-group-ID program, except that the et-user-ID/set-group-ID program is running as the same real and effective user and group.

For example, after fork and before exec*, setting

  • setreuid to the owner of the set-user-ID program
  • setregid to the group of the set-group-ID program
于 2019-12-27T17:18:54.853 に答える
-1

次のように lib をインストールします。

  • 場所: /lib または /usr/lib
  • パーミッション: ルート:ルート
  • setuid と setgid がオンになっている

LD_PRELOAD が環境にエクスポートされていることを確認してください

$ export LD_PRELOAD=/usr/lib/yourlib.so
$ env | grep LD_PRELOAD  # verify

次に、プログラムを実行します。

于 2012-02-10T19:26:07.180 に答える