ここでは、特権付きアプリケーションを開発する際の注意点を次に列挙します。
隔離されたシステムの使用: 特権付きアプリケーションのデバッグは本稼働システム上で決して行うべきではありません。不完全な特権付きアプリケーションを実行すると、セキュリティーが損なわれる可能性があります。
適切な ID 設定: 呼び出し元のプロセスの実効セット内に proc_setid 特権が含まれていないと、そのプロセスはユーザー ID、グループ ID、または追補グループ ID を変更できません。
特権の囲い込みの使用: アプリケーションが特権を使用する場合、システムのセキュリティーポリシーよりも優先されます。機密情報を危険にさらすことのないよう、囲い込みを使って特権操作を注意深く制御する必要があります。特権を囲い込みする方法については、「特権のコーディング例」を参照してください。
基本特権から始める: 最小限の操作には基本特権が必要です。特権付きアプリケーションは基本セットから始める必要があります。その後、アプリケーションは必要に応じて特権の削除/追加を行う必要があります。一般的な起動シナリオを、次に示します。
デーモンがスーパーユーザーとして起動します。
デーモン内で基本特権セットがオンになります。
デーモン内で、PRIV_FILE_LINK_ANY など、不要な基本特権のすべてがオフになります。
デーモン内で、PRIV_FILE_DAC_READ など、その他の必要な特権が追加されます。
UID がデーモンの UID に切り替わります。
シェルエスケープの回避: シェルエスケープ内の新しいプロセスは、親プロセスの継承可能セットに含まれるすべての特権を使用できます。このため、一般ユーザーがシェルエスケープ経由で、セキュリティーを侵害する可能性があります。たとえば、一部のメールアプリケーションは、!command 行をコマンドと解釈し、それを実行します。したがって、一般ユーザーは、メールアプリケーションの任意の特権を利用するスクリプトを作成できます。不要なシェルエスケープを削除することをお勧めします。