Tetsuo Handa
from-****@I-lov*****
2011年 11月 19日 (土) 14:59:56 JST
早間義博 さんは書きました: > <kernel> の直下にある「ドメインデータ」 e.g. file read などの目的・機能 > > ドメインがコマンドを指している場合ドメイン内にある > file execute > file read > などの設定は当該ドメインを構成しているコマンドの実行に影響を与えて、 > ファイルの読み込みなどを制限出来ます。 はい。 > 第 0 行にある <kernel> に何らかのコマンドが結びつけられているとは > 思えないのです。 パソコンの構造として、電源が入るとまずブートローダによりカーネルという プログラムがメモリ上に読み込まれて実行されます。カーネルプログラムの パス名は通常「 /boot/vmlinuz-カーネルバージョン」です。 カーネルプログラムは(必要であれば)初期RAMディスクを利用して / ディレクトリを含んでいるパーティション(通常はハードディスク)を マウントします。その後、 /sbin/init という最初のプログラムを実行します。 ( TOMOYO は /sbin/init の実行要求を契機として有効化されます。) TOMOYO における <kernel> というのは、ブートローダにより読み込まれて 実行されたカーネルというプログラムに結び付けられています。そのため、 <kernel> ドメインを学習モードにすると、 /sbin/init の実行 ( file execute /sbin/init )などが観測されます。 TOMOYO における <kernel> /sbin/init というのは、ブートローダにより読み込まれて 実行されたカーネルから実行された /sbin/init というプログラムに結び付けられて います。そのため、 <kernel> /sbin/init ドメインを学習モードにすると、 システムの初期化スクリプトやサーバプログラム起動スクリプトの実行などが 観測されます。 > また、kernel の機能としてアクセス制限が出来るなら > ばここで指定された内容が下位のすべてのドメインに対し適用されること > になります。 アクセス許可の記述方式として親に与えられていたものを自動的に子に継承する方式と 継承しない方式があり、どちらにも利点と欠点があります。 TOMOYO ではアクセス許可の継承をしない方式を採用しています。そのため、 <kernel> ドメインに与えられているアクセス許可が暗黙のうちに <kernel> /sbin/init ドメインにも与えられるということはありません。 (例外として、プログラムの実行に伴い TOMOYO のドメインが新規作成された場合、 プログラムの実行を要求したドメインの use_profile および use_group の設定内容が 継承されます。そのため、 /usr/lib/tomoyo/init_policy を実行して <kernel> ドメインだけを作成した状態で <kernel> ドメインにプロファイル 1 を割り当てた 場合、 <kernel> /sbin/init などのドメインにもプロファイル 1 が引き継がれ、 結果としてシステム全体の動作が観測されるようになります。) > もし下位のドメインに対しすべて適用されるならば > 0: 3 <kernel> <<-- Enforcing Mode > として内容を空のままで実行させることによりパニックにならないとも限 > りません。 TOMOYO では自動的に下位のドメインに対して適用されることはありません。 あるドメインに与えられたアクセス許可は、そのドメインに対してだけ適用されます。 なお、 <kernel> ドメインに対して file execute /sbin/init というアクセス許可を 与えないままプロファイル 3 を割り当てた場合、ブートローダにより読み込まれて 実行されたカーネルというプログラムが /sbin/init を実行できなくなるため、 パニックになります。 > (1) <kernel> 以下・直下のドメインデータは何に影響を与えるのか。 > > が疑問点です。 ブートローダにより読み込まれて実行されたカーネルというプログラムの動作に影響を 与えます。 > (2) <kernel> は特殊(私の理解の外)な場合を除いて Profile は 0 > (Disabled Mode) が良い。 バッファオーバーフローなどにより /bin/sh などが実行されるのを防ぐために、 全てのドメインに対してプロファイル 3 を指定することが望ましいです。(現実には 労力の観点から、特定のドメインに対してのみプロファイル 3 を指定することが 多いです。) 尤も、カーネル内でのバッファオーバーフローによりカーネルから任意のプログラムを 起動できるような状態であるならば TOMOYO を無効化することもできてしまう可能性が あります。その時はプロファイル 3 を指定していても制限できないことをご容赦 ください。 > (3) <kernel> にある設定は無用(何にも影響を与えない)である。 <kernel> にある設定はカーネルというプログラムの動作(厳密に言うと、 <kernel> というドメインに所属しているプロセスの動作)に影響を与えます。 もし、例外ポリシーで keep_domain any from any のような指定がされており、 他に initialize_domain や reset_domain という指定が無ければ、全てのプログラムが <kernel> ドメインで動作することになるでしょう。ただし、状況を識別してそれぞれの 状況に応じて必要最小限のアクセス許可を与えるという、強制アクセス制御の導入目的に 反することになるため、全てのプログラムが <kernel> ドメインで動作するような指定を するのは無意味です。