1

statfs 関数を呼び出すときにルート権限が必要なバイナリ ファイル (名前は bmu) が 1 つあります。

OS はSuSE Linux 2.6.16.60-0.21-smp
bmu を実行するユーザーであり、root 以外のユーザーであるテストです。

test@SuSE:~> id
uid=1056(test) gid=0(root) groups=0(root),16(dialout),33(video)

3種類のシナリオをテストしました。

--->シナリオ 1
bmu が SUID で構成されていない場合、bmu は実行できますが、呼び出しは失敗します。

-rwxr-xr-x 1 test root 14389879 2012-04-10 10:38 bmu

--->シナリオ 2
bmu が SUID で構成されている場合、bmu をテストで実行すると、「DBMS API ライブラリ 'libclntsh.so' の読み込みに失敗しました」というプロンプトが表示されて失敗します。

-rwsr-sr-x 1 root root 14389879 2012-04-10 10:38 bmu

--->シナリオ 3
bmu を root で実行すると、正常に実行されます。もちろん、SUID が構成されているかどうかは関係ありません。

-rwxr-xr-x 1 root root 14389879 2012-04-10 10:38 bmu
-rwsr-sr-x 1 root root 14389879 2012-04-10 10:38 bmu

シナリオ 2 からは構成の問題のように見えますLD_LIBRARY_PATHが、シナリオ 1 からは、これはLD_LIBRARY_PATH構成の問題ではないことがわかります。シナリオ 3 から、bmu が root によって実行可能であることがわかります。

問題があるのはシナリオ 2 だけなので、誰か提案をいただけますか? ありがとう!

4

1 に答える 1

2

プログラムが setuid として実行される場合、LD_LIBRARY_PATH環境内の変数は潜在的なセキュリティの脆弱性であるため無視されます。

$ORIGIN依存ライブラリへの相対 rpath を使用するか、ライブラリへの絶対 rpath 参照を使用して、バイナリをリンクする必要があります。$ORIGIN rpath の詳細については、ld のマニュアル ページを参照してください。

于 2012-04-10T08:09:49.540 に答える