setuid/setgid 権限を必要とするプログラムの malloc/free 機能をオーバーライドしようとしています。これには LD_PRELOAD 変数を使用します。 ~によるとld文書、私のライブラリを標準の検索ディレクトリの1つ(私は/ usr / libを選択)に入れ、setuid / setgid権限を付与する必要があります。私はすでにこれをしました。ただし、.soファイルに接続できず、エラーが発生します。
object 'liballoc.so' from LD_PRELOAD cannot be preloaded: ignored
考えられる理由は何ですか? setuid / setgid権限なしでプログラムでこの.soファイルをテストしましたが、すべてがうまくいきました。オペレーティングシステム:Red Hat 7.0
ベストアンサー1
ldドキュメントによると、私のライブラリを標準の検索ディレクトリの1つに置く必要があります(私の選択
/usr/lib
)。
それは間違いです。これを入れる必要があります/usr/lib64
(マシンがx86_64であると仮定)。
私はCentos 7 VM(RHEL 7と同じでなければなりません)のマンページでレシピを試してみました。
rootユーザーとして:
cynt# cc -shared -fPIC -xc - <<<'char *setlocale(int c, const char *l){ errx(1, "not today"); }' -o /usr/lib64/liblo.so
cynt# chmod 4755 /usr/lib64/liblo.so
setuidプログラムを使用する一般ユーザーとして:
cynt$ LD_PRELOAD=liblo.so su -
su: not today
この機能を使用するのが良いアイデアかどうかはまったく異なります(IMHO、そうではありません)。