Python と C++ の両方のライブラリを持つアプリケーションを作成しています。Python 部分は未加工のパケットを送受信する必要があるため、Python 実行可能ファイルにCAP_NET_RAW
機能を与えています。
同じプログラムで、Cython を使用して C++ 共有ライブラリもロードします。依存関係の相対パスを使用して共有ライブラリをコンパイルしたい - つまり、$ORIGIN
特別な変数を使用します。
ただし、Python にはCAP_NET_RAW
機能があるため、Linux はプログラムとして扱い、共有ライブラリの依存関係定義内の文字列setuid
を無視するため、読み込みに失敗します。$ORIGIN
$ORIGIN
セキュリティ上の理由から、ダイナミック リンカでは、set-user および set-group ID プログラムで置換シーケンスを使用することはできません。DT_RUNPATH
動的配列エントリによって指定された文字列内に現れるそのようなシーケンスの場合、そのシーケンスを含む特定の検索パス$ORIGIN
は無視されます (ただし、同じ文字列内の他の検索パスは処理されます)。パラメータとして渡され$ORIGIN
たエントリまたはパス内のシーケンスは、エラーとして扱われます。拡張セキュリティ メカニズムがインストールされているシステムでは、最小限以上の権限を持つプロセスにも同じ制限が適用される場合があります。DT_NEEDED
dlopen()
このセキュリティ機能は、私たちに多くの苦痛をもたらします。共有ライブラリをコンパイルする必要があり、完全なパスの依存関係があり、開発マシン間で移植することはできません。
Linux でこのセキュリティ機能を無効にし$ORIGIN
て、追加の機能を持つプログラムで解釈されるようにする方法はありますか?