Go to main content
Oracle® Solaris 11.3 リンカーとライブラリガイド

印刷ビューの終了

更新: 2015 年 10 月
 
 

ランタイムセキュリティー

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

実行時リンカーは、issetugid(2) システム呼び出しがプロセスに対して true を返した場合、そのプロセスをセキュアとして分類します。

32 ビットオブジェクトの場合、実行時リンカーが認識しているデフォルトのトラストディレクトリは、/lib/secure/usr/lib/secure です。64 ビットオブジェクトの場合、実行時リンカーが認識しているデフォルトのトラストディレクトリは、/lib/secure/64/usr/lib/secure/64 です。ユーティリティー crle(1) を使用すれば、セキュアなアプリケーション向けに追加のトラストディレクトリを指定できます。この方法を使用する場合には、管理者は、ターゲットディレクトリを悪意のある侵入から適切に保護する必要があります。

あるセキュアなプロセスに対して LD_LIBRARY_PATH ファミリ環境変数が有効になっている場合、実行時リンカーの検索規則を拡張するために使用されるのは、この変数に指定されたトラストディレクトリだけです。実行時リンカーが検索するディレクトリを参照してください。

セキュアなプロセスでは、アプリケーションまたはその依存関係によって指定された実行パスの指定が使用されます。ただし、実行パスはフルパス名である、つまりパス名は「/」から始まる必要があります。

セキュアなプロセスでは、$ORIGIN 文字列の拡張は、その文字列がトラストディレクトリに拡張されるときにかぎり許可されます。セキュリティーを参照してください。ただし、$ORIGIN を展開することですでに依存関係を提供したディレクトリに一致する場合、そのディレクトリは暗黙にセキュアです。このディレクトリは、追加の依存関係を提供するために使用できます。

セキュアなプロセスでは、LD_CONFIG は無視されます。ただし、セキュアなアプリケーションで記録された構成ファイルは使用されます。ld(1)–c オプションを参照してください。記録済み構成ファイルは、完全パス名、つまり「/」で始まるパス名である必要があります。記録される構成ファイルが $ORIGIN 文字列を使用する場合、そのファイルは既知のトラストディレクトリに制限されます。セキュアなアプリケーション内の構成ファイルを記録する開発者は、構成ファイルディレクトリを悪意のある侵入から適切に保護する必要があります。記録済み構成ファイルが存在せず、デフォルトの構成ファイルが存在する場合は、セキュアなプロセスはこのデフォルトの構成ファイルを使用します。crle(1) のマニュアルページを参照してください。

セキュアなプロセスでは、LD_SIGNAL は無視されます。

セキュアなプロセスで追加オブジェクトをロードするには、LD_PRELOAD、LD_AUDIT のいずれかの環境変数を使用します。これらのオブジェクトはフルパス名または単純ファイル名で指定しなければなりません。フルパス名は、既知のトラストディレクトリに限定されます。単純ファイル名 (名前に「/」がついていない) は、前述した検索パスの制約に従って配置されます。単純ファイル名は、既知のトラストディレクトリにのみ解決されることになります。

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

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