Solaris 環境では、少なくとも X コンソーシアムの X11R5 サンプルサーバーのセキュリティレベルが得られます。ただし、これを保証するために DPS では、PostScript のファイルオペレータからシステムファイルをアクセスできないようにすると同時に、機密保護コンテキストを生成する機能も提供しています。以下でこの 2 つの機能を説明します。
PostScript 言語ではファイル操作によりディスクファイルなどのシステムデバイスにユーザーがアクセスできますが、これがセキュリティ上の重大な問題になります。そのため Solaris 環境ではデフォルト時、PostScript のファイルオペレータでシステムファイルをオープンしたり、アクセスしたりできないようにしています。
アプリケーションの場合は、サーバーではなくクライアントでファイル操作を実行する必要があります。したがって、クライアントには、サーバーに必要な全アクセス特権が必要というわけではありません。PostScript のファイルオペレータでシステムファイルをアクセスしたい場合は、サーバー起動時に -dpsfileops オプションを指定してください (Xsun(1) のマニュアルページを参照)。このオプションを指定しないでシステムファイルをアクセスすると、PostScript の「undefinedfilename」というエラーになります。サーバープロセスはスーパーユーザーによって所有されるので、この問題は CDE や xdm 環境では特に重要です。
DPS のコンテキストは通常グローバルデータを使用できるため、あるコンテキストから別のコンテキストの動作を見ることができます。たとえば、あるコンテキストが作成中のドキュメントを、別のコンテキストから横取りすることもできるでしょう。この節では、Solaris 環境での機密保護コンテキストの生成方法を説明します。
『PostScript リファレンスマニュアル、第 2 版』の 7.1.1 節「コンテキストの作成」は、コンテキストが VM を共有するための方法として、次の 3 つを記載しています。
「ローカル VM とグローバル VM は、そのコンテキストに完全に固有である。」この機能はレベル 2 の新しいものですが、これに従って生成したコンテキストを「機密保護コンテキスト」といいます。
「ローカル VM はそのコンテキストに固有であるが、グローバル VM は他のコンテキストと共有されている。」XDPSCreateContext や XDPSCreateSimpleContext でコンテキストを生成すると、通常こうなります。
「ローカル VM とグローバル VM は、他のコンテキストと共有されている。」XDPSCreateContext や XDPSCreateSimpleContext で、パラメータの space に NULL 以外を指定してコンテキストを生成するとこうなります。
機密保護コンテキストを生成するには、XDPSCreateSecureContext を次のように使用してください。
XDPSCreateSecureContext DPSContext XDPSCreateSecureContext(dpy, drawable, gc, x, y, eventmask, grayramp, ccube, actual, textProc, errorProc, space) Display *dpy; Drawable drawable; GC gc; int x; int y; unsigned int eventmask; XStandardColormap *grayramp; XStandardColormap *ccube; int actual; DPSTextProc textProc; DPSErrorProc errorProc; DPSSpace space;
パラメータの意味はすべて XDPSCreateContext のものと同じですが、生成されるコンテキストは専用の専用グローバル VM を 1 つ持ちます。パラメータの space に NULL を指定しない場合は、機密保護コンテキストと一緒に生成する空間を指定しなければなりません。機密保護コンテキストと一緒に生成した空間を、非機密保護コンテキストの生成時に使用することはできません。機密保護コンテキストで非機密保護空間を指定したり、非機密保護コンテキストで機密保護空間を指定したりすると、アクセスエラーになります。