開発、テスト、およびデバッグは、メインシステム上のセキュリティポリシーにソフトウェアのバグや未完成のコードで害を与えないように、独立した開発システムで行うことをお勧めします。
余分なデバッグコード (特に、マニュアルにない機能やセキュリティチェックを回避する不法な手段) を削除します。
インストール前にシステム管理者がセキュリティ問題を検査できるように、アプリケーションのデータ操作を簡単にします。
すべてのプログラミングインタフェースのコードが正しく実行されるかどうかをテストします。呼び出しに失敗すると、予測しない結果を招くことがあります。予測しないエラー状況が発生した場合には、必ずアプリケーションを終了させなければなりません。
実行予定のすべての機密ラベルと役割を使用してアプリケーションを実行し、すべての機能をテストします。
プログラムが役割ではなく一般ユーザーによって実行される場合、ユーザー認可範囲の実行予定のラベルで一般ユーザーとしてコマンド行からプログラムを起動します。
プログラムが役割によって実行される場合、実行予定の管理ラベル (ADMIN_HIGH または ADMIN_LOW) で管理役割から、あるいはユーザー認可範囲の実行予定ラベルでユーザー役割から、コマンド行で起動します。
アプリケーションに必要な特権がすべてあるか、アプリケーションが試行すべきでない特権作業を試行していないかを知るために、特権デバッグモードですべての機能をテストします。
特権ブラケットを理解し、設定を行います。
特権の使用によるセキュリティ上の影響を理解し、アプリケーションが特権を使用することによりシステムセキュリティを侵害しないことを確認します。
特権アプリケーションを検査するために、SUNWSpro debugger/dbx/dbxtool を実施する場合、初めにデバッガを始動させ、後でデバッガを実行中のプロセスに渡さなければなりません。コマンド名を引数としてデバッガを始動させることはできません。
特権デバッグモードについては、『Trusted Solaris 管理の手順』で説明しています。ここでは、特権デバッグを有効にする手順と、特権デバッグモードで runpd(1M) を使用してアプリケーションをテストする手順の概要を述べます。
特権デバッグモードは、必要な特権を持たないアプリケーションの実行を成功させ、どの特権が欠如しているかを示します。
/etc/system ファイルで、tsol_privs_debug 変数を 1 に設定します。このファイルは ADMIN_LOW で、所有者はスーパーユーザー (root) です。
/etc/syslog.conf ファイルで、kern.debug 行すなわち local0.debug 行のコメントを解除します。このファイルは ADMIN_LOW で、所有者は sys です。
/var/log/privdebug.log ファイルが存在していなければ作成します。このファイルは ADMIN_HIGH で、所有者はスーパーユーザー (root) です。
システムをリブートします。
プロファイル内の runpd(1M) を使用して、管理役割を取得します。
runpd(1M) コマンドを使用して、実行可能ファイルを起動し、欠如している特権がないか確認します。次のコマンド行は、Zelda の Confidential ホームディレクトリ内の実行可能ファイルを起動します。欠如している特権に関する情報が、コマンド行に表示されるとともに /var/log/privdebug.log ファイルに記録されます。
phoenix# runpd /export/home/.MLD.Zelda/.SLD.2/executable runpd terminated with a status of 1 process runpd pid 822 lacking privilege file_mac_search to perform special method upon resource VNODE (Jan 29 12:45) process runpd pid 822 lacking privilege file_mac_read to perform read method upon resource VNODE (Jan 29 12:45) |
/var/log/privdebug.log ファイル内の特権番号を解釈します。特権番号は、語句の特権の後に現れます。プロセス 822 には、file_mac_search と file_mac_read に対応する特権番号 11 と 10 が欠如しています。
Jan 29 12:45:39 phoenix unix DEBUG: runpd pid 822 lacking privilege 11 to 5 79 Jan 29 12:45:39 phoenix unix DEBUG: runpd pid 822 lacking privilege 10 to 2 79 |
組織内のほかのユーザーに配布して使用させるための特権を持つスクリプトを作成する方法は、『Trusted Solaris 管理の手順』で説明しています。この節では、setfpriv(1) を使用するスクリプトを作成し、アプリケーション開発時にアプリケーションのテストとデバッグを行う実行可能ファイルに強制された特権と許容された特権を割り当てる方法の概要を述べます。
まず、作業対象のユーザーまたは役割に、setfpriv(1) コマンドを持つプロファイルとそれに対する file_setpriv 特権が必要です。このコマンドと特権は、デフォルトシステムのオブジェクト特権管理プロファイルに入っています。任意のシェルからスクリプトを実行し、スクリプトによって起動されたコマンドをそのプロファイルシェルで実行してプロファイル特権を継承させるには、次の例に示すようにスクリプトの先頭で pfsh(1M) を起動します。
この例は、executable (実行可能ファイル) に強制された特権と許容された特権を割り当てます。-s -f オプションは、executable に強制された特権を設定します。-a オプションは、executable に許容された特権を設定します。このスクリプトは、file_setpriv 特権がコマンドによって継承されないかぎり、「executable: not owner (executable : 所有者ではありません)」というエラーを出力して終了します。
#/bin/pfsh setfpriv -s -f ipc_mac_write,ipc_upgrade_il,proc_setsl,sys_trans_label -a ipc_mac_write,ipc_upgrade_il,proc_setsl,sys_trans_label executable
スクリプトを使用して実行可能ファイルに強制された特権と許容された特権を設定する場合、次の点に注意してください。
スクリプトに指定された許容セットから特権を削除する場合、強制セットからもその特権を削除する必要があります。許容セットからだけ特権を削除すると、スクリプトの実行時に「executable: Invalid argument (executable : 引数が正しくありません)」というエラーが出力されます。
プログラムが特権を継承する場合、継承される特権を持つプロファイルシェルでコマンド行からプログラムを起動します。
実行可能ファイルの許容セットには、継承される特権が必要です。
プログラムが特権を継承するだけの場合、実行可能ファイルの強制セットは空でなければなりません。
いつ継承されたかによって特権の強制時にプログラムが異なるアクションを実行する場合、特権を強制セットと許容セットに設定してプログラムを起動し、続いて特権を許容セットに設定して継承される特権を持つプロファイルシェルから再度プログラムを起動してください。
プログラムは、必ず実行時に使用するすべてのラベルでテストしてください。