プロセスで特権を使用すると、通常はシステムセキュリティポリシーによって禁止されているセキュリティ関連の処理を実行できます。承認が与えられると、ユーザーは、ユーザー全員には許容されてない特権処理を実行できます。それぞれの承認は、1 つの特権処理に対応します。特権処理の実行を許容する場合、事前に必ずユーザーの承認を確認してください。
特権を持つアプリケーションの開発、テスト、デバッグは、メインシステム上のセキュリティポリシーがソフトウェア上の問題や未完成のコードで損なわれることのないように、常に独立した開発用のマシンで行ってください。
特権は、プロセスが処理の実行に必要な、最低限のセキュリティ関連の権限を付与します。同様に、承認は、各ユーザーまたは役割が処理の実行に必要な、最低限のセキュリティ関連の権限を付与します。
システム管理者は、ユーザーと役割に対し実行プロファイルを介して承認を割り当てます。chkauth(3) ルーチンは、有効なユーザー名と承認をパラメータとして受け取り、そのユーザーに承認が割り当てられると true を返します。特権は、開発段階で実行可能ファイルに対して割り当てることも、実行時にユーザーまたは役割の実行可能プロファイルから継承するようにもできます。あるいは、この両方を設定することもできます。
プログラムが特権とユーザーの承認チェックが必要な処理を実行するかどうかを確認するには、次の点を調べてください。
その処理は特権を必要とするか
システムコールの特権の詳細は、Intro(2) のマニュアルページと、各システムコールのマニュアルページに記載されています。
ライブラリルーチンの特権の詳細は、そのライブラリルーチンのマニュアルページに記載されているか、あるいは基底となるシステムコールが存在する場合はそのシステムコールのマニュアルページに記載されています。システムコールの一覧については、ライブラリルーチンのマニュアルページの「参照」の節を確認してください。ライブラリルーチンのマニュアルページに特権に関する情報がない場合には、この「参照」先に特権情報が示されています。
priv_desc(4) のマニュアルページには、Trusted Solaris 7 の特権とそれらの特権によって可能となる処理の説明が記載されています。
特権をファイルに割り当てるべきか、継承すべきか、あるいは割り当てと継承の両方を実施すべきかを決定するための情報は、第 3 章「特権」を参照してください。
アプリケーションにどの特権が必要か調べるには、『Trusted Solaris 管理の手順』またはこのマニュアルの付録 A 「プログラマーズリファレンス」 の 「特権デバッグ」に説明されているように、特権デバッグモードを使用してください。
その処理に承認があるか - auth_desc(4) のマニュアルページに、Trusted Solaris 7 承認の一覧と承認に対応する処理の説明が記載されています。
次の例は、ファイルの機密ラベルの降格を含む処理を実行する前に、file_downgrade_sl 特権に対するプロセスの許可された特権のセット (許可セット) と、ユーザー ID zelda に対するユーザーの「ファイルの機密ラベルを降格」承認をチェックします。特権が許可セットに含まれており、 zelda に承認がある場合、このコードは有効な特権のセット (有効セット) 内で file_downgrade_sl 特権をオン (有効) にして処理を実行します。処理が終了すると、file_downgrade_sl はオフ (無効) になります。
この例は、次のライブラリを使用してコンパイルしています。
-ltsoldb -lnsl -lcmd -ltsol
許可セットにはプロセスが実行中に使用できる特権が含まれ、有効セットには一定の時間にプロセスが実際に使用する特権が含まれます。有効な特権を一定の期間オンにして、その後オフにすることを、「特権のブラケット化」と言います。詳細は、第 3 章「特権」に挙げられています。
#include <tsol/priv.h> #include <tsol/auth.h> main() { char *zelda = "zelda"; priv_set_t priv_set; /* 許可された特権のセットを得る */ getppriv(PRIV_PERMITTED, &priv_set); if(PRIV_ISASSERT(&priv_set, PRIV_FILE_DOWNGRADE_SL) && chkauth(TSOL_AUTH_FILE_DOWNGRADE_SL, zelda)) { set_effective_priv(PRIV_ON, 1, PRIV_FILE_DOWNGRADE_SL); /* ファイルの機密ラベルを降格させる*/ set_effective_priv(PRIV_OFF, 1, PRIV_FILE_DOWNGRADE_SL); } else {/* エラーを出力する */} }