実行可能なA.binがlibY.soおよびlibZ.soを使用するこのシナリオを検討してください。 A.c、Y.cおよびZ.cはすべてC言語で書かれています。 Z.cとY.cはそれぞれの.soファイルにコンパイルされています。setuidビットを設定した後にプログラムをロードできない
私が実行すると、ファイルのディレクトリ構造
の$ HOME/binに/ A.bin $ホーム/
libZ.so/libにlibに/ libY.so $ホーム/です.bin通常のユーザーとして、A.binは正常に正常に実行されます。 注:$ LD_LIBRARY_PATHには$ home/libが含まれています
A.cでは、管理者権限(1000未満のポートへのバインドなど)が必要な機能を追加しました。 A.bin、libY.so、およびlibZ.soのsetuidビットをrwsrwsrwsに設定し、ファイルの所有権をrootに変更します。私はA.binを実行しようとすると、私は次のエラーを取得する
ld.so.1の:A.bin:致命的な:libY.soは:オープンに失敗しました:いつそのようなファイルやディレクトリ が
を殺していませんこれらすべてのファイルからsetuidパーミッションを削除するだけで、バイナリの実行はroot特権が必要な場所では機能が失敗します。
この問題を解決するにはどうすればよいですか?
編集:いくつかのUnixでOSのSolaris 5.10である
*どれ* UNIXライクなOSは、setuidバイナリのためにLD_LIBRARY_PATHを無視しているそれ以外の場合は、あなたを介してトラックを運転できるセキュリティホールです。 – caf
@caf:私は遭遇しなかったものに遭遇しました。すべてのsetuidバイナリは静的にリンクされていました。 – Joshua