リンカーとライブラリ

セキュリティー

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

実行時リンカーは、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 は無視されます。セキュリティー保護されたプロセスは、デフォルト構成ファイルが存在する場合、この構成ファイルを使用します。crle(1) のマニュアルページを参照してください。

セキュリティー保護されたプロセスでは、LD_SIGNAL は無視されます。

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

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

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