8

setcap CAP_NET_RAW を有効にして Python を使用しています。私の python スクリプトは、RPATH に $ORIGIN を持つ共有ライブラリをインポートします。私の python は現在 suid アプリであるため、 $ORIGIN は評価されず、ライブラリは正しく読み込まれません (これはglibc で見つかったセキュリティ リークが原因です)。私のライブラリパスが安全であることをリンカに伝え、ライブラリをロードする方法はありますか?

さらにいくつかのメモ:

  1. この機能は開発段階でのみ必要です。私は生産ソリューションを探していません。
  2. ルートとして作業すると、すべてが機能します。
  3. 私はルートとして働きたくありません。

ありがとう、デイブ

4

2 に答える 2

2

これらのいずれかを試すことができます。rpath参照<path-to-mylib>を解決した後の絶対パス名であると考えてください。$ORIGIN

  1. ライブラリの場所を指定した後、ldconfig を再実行します。

    $ echo "<path-to-mylib>" > /etc/ld.so.conf.d/my-new-library.conf
    $ ldconfig -v
    
  2. root として実行することができない場合は、プロセスの実行ごとに正しいディレクトリで LD_LIBRARY_PATH をエクスポートします。

    $ echo "export LD_LIBRARY_PATH=<path-to-mylib>" >> ~/.bashrc
    $ export LD_LIBRARY_PATH=<path-to-mylib>
    $ # then run your stuff...
    
于 2012-11-21T21:00:20.123 に答える
1

あなたはsudoを試しましたか?

$ORIGIN の代わりに、setuid プログラムで動作するため、開発中は固定パスを使用してください。メインのビルド プロセスを変更しないでください。単に patchelf を使用して rpath を必要なものに設定してください。次のようなシェル スクリプトを作成できます。

ln=`readelf -d |grep RPATH`
IFS=:
set -- $ln
newrpath=`echo $2 |sed 's/\$ORIGIN/\/devel\/myprog\/lib/'`
patchelf --set-rpath newrpath myprogram

その後、バイナリは $ORIGIN/../lib を検索しなくなりますが、/devel/myprog/lib/../lib を検索します。

于 2011-07-14T05:56:46.480 に答える