SunSHIELD 基本セキュリティモジュール

第 4 章 デバイスの割り当て

C2 レベル以上のコンピュータシステムに関する Trusted Computer System Evaluation Criteria (TCSEC) のオブジェクト再使用要件は、デバイス割り当て機構によって達成されます。この章では、デバイスを管理する上で必要な情報について説明します。

割り当て可能にするべきデバイスがあるかどうか、そしてあるとしても、デフォルトの割り当てがサイトのセキュリティーポリシーに適していない場合は、どのデバイスを割り当てるのかを決定する必要があります。

デバイスの使用に伴うリスク

各種 I/O デバイスの使用に伴うセキュリティ上のリスクの一例として、一般にカートリッジデバイスがどのように使用されるかを考えてみてください。通常は複数のユーザが 1 つのテープドライブを共有しますが、それは各ユーザのマシンが配置されている場所から離れたオフィスや研究所に配置されていることがあります。これは、ユーザがテープをテープドライブにロードしてから、マシンに戻ってテープとの間でデータを読み書きするコマンドを起動するまでに、ある程度の時間が経過することを意味します。また、ユーザが戻ってテープをドライブから取り出すまでにも時間が経過します。テープデバイスにはユーザ全員がアクセスできるのが普通なので、テープのそばにユーザがいない間に、権限を持たないユーザがテープ上のデータにアクセスしたり、上書きしたりする可能性があります。

デバイス割り当て機構によって、特定のデバイスを一度に 1 人のユーザに割り当てることができます。これにより、デバイスが特定のユーザの名前に割り当てられている間は、そのユーザしかアクセスできなくなります。

デバイス割り当て機構によって、テープデバイスに関して次のことが保証され、それに関連するセキュリティサービスが他の割り当て可能デバイスに提供されます。

デバイス割り当て機構の構成要素

デバイス割り当てを管理するには、割り当て機構の次の構成要素を理解しておかなければなりません。

ユーザが allocatedeallocatedminfolist_devices コマンドを起動する方法については、「デバイス割り当てユーティリティの使用方法」を参照してください。すべてのオプションと他の記述の定義については、マニュアルページを参照してください。

device_allocate ファイル、device_map ファイル、ロックファイルは、各マシンに固有のものです。テープドライブ、フロッピーディスクドライブ、プリンタは、すべて特定のマシンに接続されているので、構成ファイルが NIS データベースとして管理されることはありません。

デバイス割り当てユーティリティの使用方法

この節では、root でなければ使用できない allocatedeallocatelist_devices のオプションを使用して管理者が実行できる処理について説明します。各コマンドについての詳細は、それぞれのマニュアルページを参照してください。

allocate -F device_special_filename

指定するデバイスを再度割り当てます。通常は、このオプションを -U オプションと併用して、指定するデバイスを指定するユーザに再度割り当てます。-U オプションを指定しなければ、デバイスは root に割り当てられます。 オプションを指定しなければ、デバイスは root に割り当てられます。

allocate -U username

デバイスは、現在のユーザではなく指定するユーザに割り当てられます。このオプションを使用すると、root になっている間は、指定するユーザの識別情報がなくても、そのデバイスを割り当てることができます。

deallocate -F device_special_filename

ユーザに割り当てられたデバイスは、プロセスが終了するとき、またはそのユーザがログアウトするときに、自動的に割り当て解除されます。ユーザがテープドライブの割り当てを解除し忘れたときには、root になっている間に -F オプションを使用して割り当てを解除させることができます。

deallocate -I

割り当て可能なすべてのデバイスの割り当てを強制的に解除させます。このオプションは、システムの初期化時にのみ使用してください。

list_devices

list_devices を実行して、device_maps ファイル内にリストされたデバイスに関連付けられたすべてのデバイス特殊ファイルのリストを取得します。

list_devices -U username

指定したユーザ名に関連付けられたユーザ ID に割り当て可能か割り当て済みのデバイスがリストされます。このため、root になっている間に、どのデバイスを別のユーザに割り当て可能か、または割り当て済みかをチェックできます。

割り当てエラー状態

割り当てエラー状態については、割り当て構成要素に関するマニュアルページを参照してください。割り当て可能デバイスは、デバイス特殊ファイルモードが 0100 になっているユーザ bin とグループ bin に所有されている場合に、割り当てエラー状態になります。ユーザが割り当てエラー状態になっているデバイスを割り当てたい場合は、-F オプションを指定して deallocate コマンドを使用して、そのデバイスの割り当てを強制的に解除するか、または allocate -U を使用してユーザに割り当ててから、表示されるエラーメッセージを調べる必要があります。デバイス関連の問題が解決されたら、deallocate -F または allocate -F コマンドをもう一度実行して、デバイスから割り当てエラー状態を解除しなければなりません。

device_maps ファイル

/etc/security/device_maps ファイルを調べると、各割り当て可能デバイスに関連付けられたデバイス名、デバイスタイプ、デバイス特殊ファイルを検索できます。 device_maps(4) のマニュアルページを参照してください。デバイスマップは、デバイス割り当てを設定するときにシステム管理者によって作成されます。基礎となるファイルは、BSM が使用可能になると bsmconv によって作成されます。この初期マップファイルは、あくまでも出発点として使用する必要があります。このシステム管理者は、個々のサイトの device_maps を強化してカスタマイズすることができます。

このファイルでは、デバイスごとにデバイス特殊ファイルのマッピングが定義されます。多くの場合、このマッピングは単純ではありません。このファイルによって、各種のプログラムはどのデバイス特殊ファイルがどのデバイスにマップされているかを検出できます。たとえば、dminfo コマンドを使用すると、デバイスタイプとデバイス特殊ファイルを取得して、割り当て可能なデバイスを設定するときに指定できます。dminfodevice_maps ファイルを使用します。

各デバイスは、次の形式の 1 行のエントリで表されます。

device-name:device-type:device-list

このファイル内の各行の終わりに ¥ を付けて、エントリを次行に継続させることができます。また、コメントも挿入できます。# を付けると、それに続くすべてのテキストは、¥ の直後にない次の改行までコメントになります。

どのフィールドにも先行ブランクと後続ブランクを使用できます。

device-name

st0fd0、または audio などのデバイス名です。ここで指定するデバイス名は、/etc/security/dev ディレクトリ内で使用されるロックファイルの名前と対応しなければなりません。

device-type

汎用デバイスタイプ (stfdaudio などのデバイスクラス名) です。device-type では、関連するデバイスが論理的にグループ化されます。

device-list

物理デバイスに関連付けられたデバイス特殊ファイルのリストです。device-list には、特定のデバイスにアクセスできるすべての特殊ファイルが入っていなければなりません。リストが不完全な場合は、悪意を持ったユーザでも個人情報を入手または変更できることになります。また、次の例のように、バイナリ互換を保つために、/devices の下の実デバイスファイルや /dev 内のシンボリックリンクが device-list の有効なエントリであることに注意してください。

次の画面は、device_maps ファイル内の SCSI テープ st0 とディスケット fd0 に関するエントリの例を示しています。

fd0:¥
	fd:¥
	/dev/fd0 /dev/fd0a /dev/fd0b /dev/fd0c /dev/rfd0 /dev/rfd0a¥
 /dev/rfd0b /dev/rfd0c:¥
					.
					.
					.
st0:¥
	st:¥
	/dev/rst0 /dev/rst8 /dev/rst16 /dev/rst24 /dev/nrst0 /dev/nrst8¥
 /dev/nrst16 /dev/nrst24:¥

device_allocate ファイル

device_allocate ファイルを変更して、デバイスを割り当て可能から割り当て不可に変更したり、新しいデバイスを追加したりします。 表 4-1 は、device_allocate ファイルのサンプルを示しています。

表 4-1 device_allocate ファイルのサンプル
st0;st;;;;/etc/security/lib/st_clean
fd0;fd;;;;/etc/security/lib/fd_clean
sr0;sr;;;;/etc/security/lib/sr_clean
audio;audio;;;*;/etc/security/lib/audio_clean

管理者は、基本セキュリティモジュールの初期構成中に、どのデバイスを割り当て可能にするかを定義します。表 4-1 のように、デフォルトのデバイスとその定義済み特性をそのまま使用するように決定できます。システムを稼働させた後の実行中にマシンにデバイスを追加するときには、新しいデバイスを割り当て可能にするかどうかを決定しなければなりません。

管理者は、デバイスをインストールした後に、device_allocate ファイル内でそのデバイスのエントリを変更できます。割り当てたいデバイスは、使用する前に各マシン上の device_allocate ファイル内で定義しなければなりません。現在、カートリッジテープドライブ、フロッピーディスクドライブ、CD-ROM デバイス、オーディオチップは割り当て可能と見なされ、デバイスクリーンスクリプトが用意されています。


注 -

XylogicsTM テープドライブまたは Archive テープドライブを追加する場合は、SCSI デバイス用に用意されている st_clean スクリプトも使用できます。他には、モデム、端末、グラフィックスタブレットなどのデバイスを割り当て可能にすることができますが、この種のデバイスの場合は独自のデバイスクリーンスクリプトを作成する必要があります。また、その場合、スクリプトはそのタイプのデバイスのオブジェクト再使用要件を満たさなければなりません。


device_allocate ファイル内のエントリは、デバイスが割り当て可能であると特に記述されていない限り、そのデバイスが割り当て可能であることを意味しません。表 4-1 で、オーディオデバイスエントリの第 5 フィールドにアスタリスク (*) が入っているので注意してください。第 5 フィールド内のアスタリスクは、そのデバイスが割り当て可能でないことをシステムに指示します。つまり、システム管理者はユーザにデバイスを使用する前に割り当てたり、後で割り当てを解除するように要求する必要がありません。このフィールド内の他の文字列は、デバイスが割り当て可能であることを示します。

device_allocate ファイル内で、次の書式の 1 行のエントリで各デバイスを表します。


device-name;device-type;reserved;reserved;alloc;device-clean

たとえば、次の行はデバイス名 st0: のエントリを示しています。


st0;st;;;;;/etc/security/lib/st_clean

device_allocate 内の各行の終わりに ¥ を付けて、エントリを次行に継続させることができます。コメントも挿入できます。# を付けると、その後のすべてのテキストは、¥ の直後にない次の改行までコメントになります。どのフィールドでも先行ブランクと後続ブランクを使用できます。

次の各段落では、device_allocate ファイル内の各フィールドについて詳しく説明します。

device-name

st0fd0、または sr0 など、デバイス名を指定します。新しい割り当て可能デバイスを作成するときには、device_maps ファイル内の device-name フィールドから device-name を検索するか、または dminfo コマンドを使用します (この名前は、デバイスの DAC ファイル名でもあります)。

device-type

汎用デバイスタイプ (stfdsr など、デバイスクラスの名前) を指定します。このフィールドによって、関連するデバイスがグループ化されます。新しい割り当て可能デバイスを作成するときには、device_maps ファイル内の device-type フィールドから device-type を探すか、または dminfo コマンドを使用してください。

reserved

これらのフィールドは、将来のために予約されています。

alloc

デバイスが割り当て可能かどうかを指定します。このフィールドにアスタリスク (*) が入っている場合は、デバイスが割り当て不可であることを示します。このフィールドに他の文字列が入っている場合や、空の場合は、デバイスが割り当て可能であることを示します。

device-clean

割り当て処理中にクリーンアップやオブジェクト再使用防止などの特殊処理のために呼び出されるプログラムのパス名を与えます。デバイスが deallocate -F によって強制的に割り当て解除されるときなど、デバイスが deallocate によって有効になると、必ず device-clean プログラムが実行されます。

デバイスクリーンスクリプト

デバイスクリーン (device-clean) スクリプトは、使用可能なすべてのデータを再使用する前に物理デバイスからパージするというセキュリティ要件に対応するものです。デフォルトでは、カートリッジテープドライブ、フロッピーディスクドライブ、CD-ROM デバイス、オーディオデバイスには、必要なデバイスクリーンスクリプトが用意されています。この節では、デバイスクリーンスクリプトによって実行される処理について説明します。

オブジェクトの再使用

デバイス割り当てによって、オブジェクト再使用の要件の一部が満たされます。デバイスクリーンスクリプトによって、あるユーザがデバイス上に残したデータは、そのデバイスが別のユーザによって割り当て可能にされる前に確実にクリアされます。

テープ用のデバイスクリーンスクリプト

表 4-2 は、サポートされる 3 つのテープデバイスと、それぞれに使用するデバイスクリーンスクリプトを示しています。

表 4-2 サポートされる 3 つのテープデバイスのデバイスクリーンスクリプト

テープデバイスのタイプ 

デバイスクリーンスクリプト 

SCSI 1/4 インチテープ 

st_clean

アーカイブ 1/4 インチテープ 

st_clean

オープンリール 1/2 インチテープ 

st_clean

スクリプトは、mtrewoffl オプションを使用して、デバイスのクリーンアップに影響を与えます。mt(1) マニュアルページを参照してください。スクリプトは、システムブート中に実行されると、デバイスを照会し、そのデバイスがオンラインになっていてメディアが挿入されているかどうかを調べます。

メディアが残っている 1/4 インチのテープデバイスは強制的に割り当てエラー状態になるので、管理者はそのデバイスを手作業でクリーンアップすることになります。

通常のシステム処理中に、allocate または deallocate を対話型モードで実行すると、割り当てを解除しようとしているデバイスからメディアを取り出すように求めるプロンプトが表示されます。スクリプトは、メディアがデバイスから取り出されるまで一時停止します。

フロッピーディスクと CD-ROM 用のデバイスクリーンスクリプト

表 4-3 は、フロッピーディスクと CD-ROM 用のデバイスクリーンスクリプトを示します。

表 4-3 フロッピーディスクと CD-ROM 用のデバイスクリーンスクリプト

テープデバイスのタイプ 

デバイスクリーンスクリプト 

フロッピーディスク 

fd_clean

CD-ROM  

sr_clean

スクリプトは、eject コマンドを使用してドライブからメディアを取り出します。eject(1) のマニュアルページを参照してください。eject が失敗すると、デバイスは割り当てエラー状態になります。

オーディオ用のデバイスクリーンスクリプト

オーディオデバイスは、オーディオクリーンスクリプトによってクリーンアップされます。スクリプトは、AUDIO_DRAIN ioctl システムコールを実行してデバイスをフラッシュさせてから、AUDIO_SETINFO ioctl システムコールを実行してデバイス構成をデフォルトにリセットします。また、スクリプトは AUDIOGETREG ioctl システムコールを使用して、オーディオチップレジスタを検出します。デフォルト以外の値を持つレジスタは、AUDIOSETREG ioctl システムコールを使用してリセットされます。

新しいデバイスクリーンスクリプトの作成

システムに新しい割り当て可能デバイスを追加する場合は、独自のデバイスクリーンスクリプトを作成する必要があります。deallocate コマンドは、デバイスクリーンスクリプトにパラメータを渡します。次のように、パラメータはデバイス名が入った文字列です (device_allocate(4) のマニュアルページを参照)。


st_clean -[I|F|S] device-name

デバイスクリーンスクリプトは、成功した場合は 0 を、失敗した場合は 0 より大きい値を返さなければなりません。オプション -I-F-S を使用すると、スクリプトに実行モードを判別させることができます。

-I は、システムブート中にのみ必要です。すべての出力は、システムコンソールに送らなければなりません。失敗した場合や、メディアを強制的に取り出せない場合は、デバイスを割り当てエラー状態にしなければなりません。

-F は強制クリーンアップ用です。このオプションは対話型で、ユーザがプロンプトに応答するものと見なします。このオプションが付いたスクリプトは、クリーンアップの一部に失敗した場合に、クリーンアップ全体を完了しようとしなければなりません。

-S は標準クリーンアップ用です。このオプションは対話型で、ユーザがプロンプトに応答するものと見なします。

ロックファイルの設定

ロックファイルは、/etc/security/dev 内で割り当て可能デバイスごとに 1 つずつ作成される長さ 0 のファイルです。

割り当て可能デバイスのロックファイルがない場合は、そのデバイスを割り当てできず、誰もアクセスできません。

割り当て可能にするデバイスのロックファイルを設定する方法

  1. dminfo コマンドを使用して、デバイスの名前を device_maps ファイル内の該当するエントリから取得します。

    device_maps ファイル」 と、dminfo(1M)device_maps(4) のマニュアルページを参照してください。たとえば、デバイスタイプ st のデバイス名は st0 です。デバイス名をロックファイル名として使用してください。

  2. touch コマンドを使用し、デバイス名を使用してデバイス用の空のロックファイルを作成します。

       untouchable# cd /etc/security/dev
    untouchable# touch device-name
    untouchable# chmod 600 device-name
    untouchable# chown bin device-name
    untouchable# chgrp bin device-name
    

割り当て機構の機能

この節では、割り当て機構の機能について例を挙げて説明します。

allocate コマンドは、まず/etc/security/dev ディレクトリ内で、指定されたデバイスのデバイス名が付いたロックファイルがあるかどうかをチェックします。ファイルが allocate によって所有されている場合は、ロックファイルの所有権が allocate コマンドを入力したユーザの名前に変更されます。

次に、allocate コマンドは device_allocate ファイル内でデバイスのエントリをチェックし、そのエントリにデバイスが割り当て可能として設定されているかどうかをチェックします。

次の画面例の最初のリストは、/etc/security/dev 内に、st0 デバイスに使用される所有者 bin、グループ bin、モード 600 のロックファイルがあることを示しています。第 2 のリストは、それに関連するデバイス特殊ファイルが正しく設定されていて、所有者は bin、グループは bin、モードは 000: であることを示しています。

untouchable% ls -lg /etc/security/dev/st0
-rw------- 1 bin bin      		      0 Dec 6 15:21 /etc/security/dev/st0
untouchable% ls -lg /devices/sbus@1,f8000000/esp@0,800000
c--------- 1 bin bin		    18,  4 May 12 13:11 st@4,0:
c--------- 1 bin bin	       18, 20 May 12 13:11 st@4,0:b
c--------- 1 bin bin	       18, 28 May 12 13:11 st@4,0:bn
c--------- 1 bin bin	       18, 12 May 12 13:11 st@4,0:c
					 .
					 .
					 .
c--------- 1 bin bin	       18,  0 May 12 13:11 st@4,0:u
c--------- 1 bin bin	       18, 16 May 12 13:11 st@4,0:ub
c--------- 1 bin bin	       18, 24 May 12 13:11 st@4,0:ubn
c--------- 1 bin bin	       18,  8 May 12 13:11 st@4,0:un

次の画面では、ユーザ vanessa がデバイス st0 を割り当てます。

untouchable% whoami
vanessa
untouchable% allocate st0

ユーザ vanessaallocate コマンドを入力してテープ st0 を割り当てると、allocate はまず /etc/security/dev/st0 があるかどうかをチェックします。ロックファイルが存在しない場合や、allocate 以外のユーザに所有されている場合は、vanessa はデバイスを割り当てることができません。

正しい所有権と許可が設定されたロックファイルが見つかると、allocate コマンドはそのデバイスのエントリが device_allocate ファイルに入っているかどうかと、そのエントリでデバイスが割り当て可能として指定されているかどうかをチェックして確認します。

この例では、st0 デバイスのデフォルトの device_allocate エントリでは、デバイスが割り当て可能として指定されています。allocate コマンドでは上記の条件がすべて満たされていることがわかるので、デバイスが vanessa に割り当てられます。

allocate コマンドは、/dev ディレクトリ内でデバイスに関連付けられたデバイス特殊ファイルの所有権と許可を変更します。st0 デバイスを vanessa に割り当てるために、それに関連付けられたデバイス特殊ファイルのモードが 600 に変更され、所有者が vanessa に変更されます。

また、allocate コマンドは、/etc/security/dev ディレクトリ内でデバイスに関連付けられたロックファイルの所有権を変更します。st0 デバイスを vanessa に割り当てるために、/etc/security/dev/st0 の所有者が vanessa に変更されます。

ユーザ vanessa がデバイス名 st0 を使用して allocate コマンドを実行すると、次の画面例のように /etc/security/dev の所有者が vanessa に変更され、それに関連付けられたデバイス特殊ファイルの所有者は vanessa になり、vanessa はファイルを読み書きする許可を持っていることになります。

untouchable% whoami
vanessa
untouchable% allocate st0
untouchable% ls -lg /etc/security/dev/st0
-rw------- 1 vanessa staff 		      0 Dec 6 15:21 /etc/security/dev/st0
untouchable% ls -la /devices/sbus@1,f8000000/esp@0,800000
.
.
.
crw------- 1 vanessa 18,  4 May 12 13:11 st@4,0:
crw------- 1 vanessa 18, 12 May 12 13:11 st@4,0:b
crw------- 1 vanessa 18, 12 May 12 13:11 st@4,0:bn
crw------- 1 vanessa 18, 12 May 12 13:11 st@4,0:c
.
.
.
crw------- 1 vanessa 18,  4 May 12 13:11 st@4,0:u
crw------- 1 vanessa 18, 12 May 12 13:11 st@4,0:ub
crw------- 1 vanessa 18, 12 May 12 13:11 st@4,0:ubn
crw------- 1 vanessa 18, 12 May 12 13:11 st@4,0:un

デバイスの管理と追加

この節で説明する手順は、デバイスを管理する方法と追加する方法を示しています。

デバイスを管理する方法

  1. どのデバイスが device_allocate ファイル内でリストされているか、およびどのデバイスを割り当て可能にできるかを決定します。

  2. どのデバイスを割り当て可能にすべきかを定義します。

  3. どのユーザがデバイスを割り当てることができるようにするかを決定します。

  4. device_allocate ファイルを編集して新しいデバイスを追加します。

新しい割り当て可能デバイスを追加する方法

  1. device_allocate ファイル内でマシン上の新しい割り当て可能デバイスに関するエントリを作成します。

    この方法については、device_allocate ファイル」 を参照してください。

  2. /etc/security/dev ディレクトリ内で、各割り当て可能デバイスごとに空のロックファイルを作成します。

    この方法については、「ロックファイルの設定」を参照してください。

  3. 必要であれば、新しいデバイスごとにデバイスクリーンスクリプトを作成します。

    Xylogics または Archive テープドライブを追加する場合は、st_clean スクリプトを使用できます。それ以外の場合は、独自のスクリプトを作成してください。デバイス処理スクリプトを作成する方法については、「デバイスクリーンスクリプト」 を参照してください。

  4. デバイスのすべてのデバイス特殊ファイルをユーザ bin、グループ bin、モード 000 の所有にします。

    dminfo コマンドを実行すると、割り当て可能にしようとするデバイスに関連付けられたすべてのデバイス特殊ファイルの device_maps ファイルからリストを取得できます。

デバイス割り当ての使用方法

この節で説明する手順とコマンドは、デバイスを管理する方法と追加する方法を示しています。デバイス割り当てコマンドとデバイス割り当て解除コマンドは、コマンドツールまたはシェルツールウィンドウ内のコマンド行から入力します。

表 4-4 allocate のデバイス指定オプション

オプション 

動作 

device-name

デバイス名と一致するデバイスを割り当てる。 

-g device-type

デバイスのグループタイプと一致するデバイスを割り当てる。 

list_devices コマンドには、表 4-5 に示す 3 つのオプションのいずれか 1 つが必要です。

表 4-5 list_devices コマンドのオプション

オプション 

動作 

-l

すべての割り当て可能デバイスのリスト、またはデバイスに関する情報が表示される。 

-n

現在割り当てられていないデバイスのリスト、またはデバイスに関する情報が表示される。 

-u

現在割り当てられているデバイスのリスト、またはデバイスに関する情報が表示される。 

デバイスを割り当てる方法

    次の例のようにデバイス名を指定して allocate コマンドを使用するか、または -g スイッチを付けて入力します。


sar1% allocate st0

コマンドでデバイスを割り当てられない場合は、コンソールウィンドウにエラーメッセージが表示されます。全エラーメッセージのリストについては、allocate(1M) のマニュアルページを参照してください。

デバイスの割り当てを解除する方法

    deallocate コマンドに続けてデバイスファイル名を入力し、テープドライブの割り当てを解除します。


sar1% deallocate st0

割り当てを解除すると、他のユーザがそのデバイスを割り当てることができるようになります。