Trusted Solaris 開発ガイド

ラベルのガイドライン

この節では、アクセス制御の回避や、機密ラベルの変更を行うために、プログラムが、特権を必要とする場合に守るべきガイドラインを示します。

機密ラベル

ほとんどのアプリケーションは、次のどれかの方法で動作するため、アクセス制御を回避するときに特権は使用しません。

アプリケーションがそのプロセスの機密ラベルとは異なる機密ラベルでデータにアクセスし、そのアクセスが拒否される場合、プロセスは特権を必要とします。特権によりアプリケーションは、file_mac_readfile_dac_readfile_mac_writefile_dac_writefile_mac_search、または file_dac_search を使用して必須または任意のアクセス制御の適用を回避したり、proc_setsl を使用して必須アクセスが与えられるようにプロセスの機密ラベルを変更したり、あるいは file_upgrade_slfile_downgrade_sl を使用してデータの機密ラベルを昇格または降格することができます。どのような方法でアクセスするにせよ、アクセスされるデータの格付けに害を及ぼすことがないように、この節に示されたガイドラインを守ってアプリケーションを設計する必要があります。

必須アクセス制御の回避

特権を使用して必須アクセス制限が適用されないようにする場合、アプリケーションは、データを読み取るレベルよりも低い機密ラベルでデータを書き込むことができません。また、プログラムエラーによるデータの降格を行うことがないようにアプリケーションを設計してください。

機密ラベルの昇格または降格

アプリケーションがそれ自体の機密ラベルまたは別のオブジェクトの機密ラベルを変更する場合、次のガイドラインに従ってください。

別の機密ラベルでのプロセスの作成

プロセスの機密ラベルを変更する代わりに、新しいプロセスを fork() により起動し、フォークされた子プロセスの機密ラベルを変更することによって、子プロセスが、親プロセスのデータとは異なるレベルで作業できるようになります。子プロセスは、親プロセスに対して情報を返すか、あるいは別のプロセスに情報を送る必要があります。

変更された機密レベルで子プロセスが返す情報には、必要不可欠な情報だけが含まれるようにします。たとえば、処理が成功したか失敗したかを表示しても、実際のデータは表示しないようにします。特定の情報を渡すことにより、処理に使用されるデータを守り、1 つのレベルのデータが別のレベルのデータと混ざることのないようにします。