リンカーとライブラリ

セキュリティ

セキュアプロセスには、その依存関係を評価し、不当な依存関係の置換またはシンボルの挿入を防ぐために使用されるいくつかの制約があります。

実行時リンカーは、そのユーザーがルートではなく、実際のユーザーと実効ユーザー ID が同じではない場合 (getuid(2)geteuid(2)を参照)、または実際のグループと実効グループ ID が同じではない場合 (getgid(2)getegid(2)を参照)、プロセスをセキュアとして分類します。

事実上、LD_LIBRARY_PATH あるいは LD_LIBRARY_PATH_64 環境変数がセキュアプロセス用である場合 (「実行時リンカーによって検索されるディレクトリ」を参照)、この変数によって指定されたトラストディレクトリが、実行時リンカーの検索規則を補強するために使用されます。現在、実行時リンカーが認識する唯一のトラストディレクトリは、32 ビットのオブジェクトの場合は /usr/lib/secure、64 ビット SPARC オブジェクトの場合は /usr/lib/secure/sparcv9 です。

セキュアプロセスでは、アプリケーションまたはその依存関係によって指定された実行パスの設定 (「実行時リンカーによって検索されるディレクトリ」を参照) が使用され、フルパス名が提供されます。つまり、パス名の冒頭部分に `/' が付きます。

追加オブジェクトは、LD_PRELOAD 環境変数 (「追加オブジェクトの読み込み」を参照) を使用したセキュアプロセスで読み込まれ、オブジェクトは単純ファイル名、つまり名前に `/' が付いていないファイル名で指定されます。このようなオブジェクトの配置は、前に説明した検索パスの制約によって決まります。

セキュアプロセスでは、単純ファイル名を構成する依存関係は、概説したパス名の制約を使用して処理されます。フルパス名または相対パス名で表示された依存関係は、そのまま使用されます。そのため、セキュアプロセスの開発者は、フルパス名または相対パス名の依存関係として参照されるターゲットディレクトリを、不当な侵入から確実に保護する必要があります。


注 -

セキュアプロセス内では、$ORIGIN (「動的ストリングトークン」を参照) ストリングの展開は許可されていません。


セキュアプロセスを作成する場合には、依存関係の表示や、dlopen(3DL)パス名の構築に、相対パス名は使用しないことをお勧めします。この制約は、アプリケーションと依存関係すべてに適用されます。