ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
Trusted Extensions 開発者ガイド Oracle Solaris 10 1/13 Information Library (日本語) |
1. Trusted Extensions API およびセキュリティーポリシー
Trusted X Window System のセキュリティー属性
Trusted X Window System のセキュリティーポリシー
Trusted Extensions X Window System API
9. Solaris Trusted Extensions ラベル API のための試験的な Java バインディング
以降のセクションでは、Trusted Extensions インタフェース呼び出しを使用するコード例の抜粋を示します。これらの呼び出しはセキュリティー属性を処理して、ラベルを文字列に変換します。この抜粋では、アプリケーションプログラムでもっとも一般的に管理されている属性である、ウィンドウのセキュリティー属性の処理に焦点を当てています。多くの場合、クライアントは適切な特権を使用して、別のアプリケーションで作成されたオブジェクトのセキュリティー属性を取得します。次に、クライアントはそれらの属性をチェックして、そのオブジェクトに対する操作がシステムのセキュリティーポリシーによって許可されているかどうかを判別します。このセキュリティーポリシーには、DAC ポリシーと MAC の同位書き込みおよび下位読み取りポリシーが含まれます。アクセスが拒否されると、アプリケーションは適宜エラーを生成するか、特権を使用します。特権が必要な場合については、「特権操作と Trusted X Window System」を参照してください。
Trusted Extensions API に渡すオブジェクト ID を取得する前に、そのオブジェクトを作成する必要があります。
XTSOLgetResAttributes() ルーチンは、ウィンドウのセキュリティー関連の属性を返します。次を指定します。
表示 ID
ウィンドウ ID
セキュリティー属性を必要とするオブジェクトがウィンドウであることを示すフラグ
返される属性を受け取る XtsolResAttributes 構造体
クライアントはそのクライアントが作成したウィンドウのセキュリティー属性を取得するので、特権は必要ありません。
このドキュメントに記載されているプログラム例は、API の紹介を中心としており、エラーチェックを行なっていないことに注意してください。実際に作成するアプリケーションでは、適切なエラーチェックを行うようにしてください。
/* Retrieve underlying window and display IDs with Xlib calls */ window = XtWindow(topLevel); display = XtDisplay(topLevel); /* Retrieve window security attributes */ retval = XTSOLgetResAttributes(display, window, IsWindow, &winattrs); /* Translate labels to strings */ retval = label_to_str(&winattrs.sl, &plabel, M_LABEL, LONG_NAMES); /* Print security attribute information */ printf(“Workstation Owner ID = %d\nUser ID = %d\nLabel = %s\n”, winattrs.ouid, winattrs.uid, string1);
printf 文によって次が出力されます。
Workstation Owner ID = 29378 User ID = 29378 Label = CONFIDENTIAL
この例は、プロセスの機密ラベルを取得し、フォントリストとピクセル幅を使用してそれを文字列に変換する方法を示しています。そのラベルを表す文字列を使用してラベルウィジェットが作成されます。プロセスの機密ラベルはウィンドウの機密ラベルと同等です。したがって、特権は必要ありません。
最後の文字列がピクセル幅に収まらない場合、その文字列はクリッピングされ、クリッピングを示すインジケータが使用されます。X Window System のラベル変換インタフェースでは指定されたピクセル数にクリッピングされ、ラベルクリッピングインタフェースでは文字数にクリッピングされることに注意してください。
注 - 英語以外の言語でlabel_encodings ファイルを使用する場合、ISO 標準のコード番号が 128 以上のアクセント文字では変換が機能しないことがあります。次の例は、アジア言語の文字セットでは機能しません。
retval = getplabel(&senslabel); /* Create the font list and translate the label using it */ italic = XLoadQueryFont(XtDisplay(topLevel), “-adobe-times-medium-i-*-*-14-*-*-*-*-*-iso8859-1”); fontlist = XmFontListCreate(italic, “italic”); xmstr = Xbsltos(XtDisplay(topLevel), &senslabel, width, fontlist, LONG_WORDS); /* Create a label widget using the font list and label text*/ i=0; XtSetArg(args[i], XmNfontList, fontlist); i++; XtSetArg(args[i], XmNlabelString, xmstr); i++; label = XtCreateManagedWidget(“label”, xmLabelWidgetClass, form, args, i);
この例は、ウィンドウの機密ラベルを取得する方法を示しています。プロセスの機密ラベルはウィンドウの機密ラベルと同等です。したがって、特権は必要ありません。
/* Retrieve window label */ retval = XTSOLgetResLabel(display, window, IsWindow, &senslabel); /* Translate labels to string and print */ retval = label_to_str(label, &string, M_LABEL, LONG_NAMES); printf(“Label = %s\n”, string);
たとえば、printf 文によって次が出力されます。
Label = PUBLIC
この例は、ウィンドウの機密ラベルを設定する方法を示しています。新しい機密ラベルは、ウィンドウの機密ラベルおよびプロセスの機密ラベルよりも優位です。クライアントでそれよりも優位なラベルを変換する場合は、その実効セットに sys_trans_label 特権が含まれている必要があります。また、クライアントでウィンドウの機密ラベルを変更するには、win_upgrade_sl 特権が必要です。
特権の使用の詳細は、『Oracle Solaris 10 セキュリティー開発者ガイド』を参照してください。
/* Translate text string to sensitivity label */ retval = label_to_str(string4, &label, M_LABEL, L_NO_CORRECTION, &error); /* Set sensitivity label with new value */ retval = XTSOLsetResLabel(display, window, IsWindow, label);
この例は、ウィンドウのユーザー ID を取得する方法を示しています。プロセスはウィンドウリソースを所有し、同じ機密ラベルで実行されています。したがって、特権は必要ありません。
/* Get the user ID of the window */ retval = XTSOLgetResUID(display, window, IsWindow, &uid);
この例は、X ウィンドウサーバーにログインしているユーザーの ID を取得する方法を示しています。プロセスの機密ラベルはウィンドウの機密ラベルと同等です。したがって、特権は必要ありません。
/* Get the user ID of the window */ retval = XTSOLgetWorkstationOwner(display, &uid);