実行可能ファイル A.bin が libY.so と libZ.so を使用するシナリオを考えてみましょう。Ac、Yc、Zc はすべて CZc で記述され、Yc はそれぞれの .so ファイルにコンパイルされます。
これはファイルのディレクトリ構造です
$home/bin/A.bin $home/lib/libY.so $home/lib/libZ.so
A.bin を通常のユーザーとして実行すると、A.bin は期待どおりに正常に実行されます。注: $LD_LIBRARY_PATH には $home/lib が含まれています
Ac の一部のコードを変更して、管理者権限が必要な機能を追加しました (1000 未満のポートへのバインドなど)。A.bin、libY.so、および libZ.so の setuid ビットを rwsrwsrws に設定し、ファイルの所有権を root に変更します。A.bin を実行しようとすると、次のエラーが表示されます
ld.so.1: A.bin: 致命的: libY.so: オープンに失敗しました: そのようなファイルまたはディレクトリはありません Killed
これらすべてのファイルから setuid 権限を削除すると、ルート権限が必要な機能が失敗することを除いて、バイナリが実行されます。
この問題を克服するには?
編集:OSはSolaris 5.10です