Tetsuo Handa
from-****@I-lov*****
2011年 11月 8日 (火) 17:17:32 JST
TOMOYO カーネルにおけるドメインの扱い方は Linux 上でのファイル操作と同様に 考えてください。 <kernel> /usr/local/bin/mycommand という行を書き込むのは、 open("<kernel> /usr/local/bin/mycommand", O_CREAT | O_RDWR, 0666) に相当 します。 open() に O_CREAT を渡した場合、そのファイルが存在しなければ作成した 上でオープンし、既に存在する場合にはそのファイルをオープンします。ドメインに ついても同様で、そのドメインが存在しなければ作成した上で選択し、既に存在する 場合にはそのドメインを選択します。 select <kernel> /usr/local/bin/mycommand という行を書き込むのは、 open("<kernel> /usr/local/bin/mycommand", O_RDWR) に相当します。 open() に O_CREAT を渡さない場合、そのファイルが存在しなければオープン されません。ドメインについても同様で、そのドメインが存在しなければ選択 されません。 delete <kernel> /usr/local/bin/mycommand という行を書き込むのは、 unlink("<kernel> /usr/local/bin/mycommand") に相当します。そのファイルが 存在していれば削除されますし、存在しなければ削除されません。ファイルが削除 される前に利用を開始したプロセスは、そのファイルの利用を終了する(ファイルを 閉じる)までは、ファイルが削除された後でも継続して利用することができます。 ドメインについても同様で、そのドメインが存在していれば削除されますし、存在 しなければ削除されません。ドメインが削除される前にそのドメインに到達した プロセスは、そのドメインから去る(プロセスが終了するか他のドメインへ遷移する) までは、ドメインが削除された後でも継続して利用することができます。 unlink("<kernel> /usr/local/bin/mycommand") に続けて open("<kernel> /usr/local/bin/mycommand", O_CREAT | O_RDWR, 0666) を行った 場合、 unlink() される前に open() されたファイルを利用しているプロセス ( pid が 100 と仮定します)と、 unlink() された後に open() されたファイルを 利用しているプロセス( pid が 200 と仮定します)とでは、ファイル名は同じでも 異なるファイルを利用していることになります。このような場合に pid が 100 の プロセスが利用しているファイルに到達するためには、 open("<kernel> /usr/local/bin/mycommand", O_CREAT | O_RDWR, 0666) の代わりに open("/proc/100/fd/数字", O_RDWR, 0666) のように実行します。 ドメインについても同様で、 delete <kernel> /usr/local/bin/mycommand という行を書き込む前に <kernel> /usr/local/bin/mycommand ドメインに到達したプロセス( pid が 300 と 仮定します)のポリシーに到達したい場合、 select <kernel> /usr/local/bin/mycommand の代わりに select pid=300 のように 実行します。 TOMOYO カーネルにおけるアクセス許可の追加や削除は、差分指定により行います。 ファイルを編集する際にはまず open() でファイルをオープンするのと同様に、 ドメインのアクセス許可を編集するにはまず <kernel> /usr/local/bin/mycommand や select <kernel> /usr/local/bin/mycommand という行を書き込んでそのドメインを 選択します。その後、そのドメインに対してエントリの追加や削除を行います。 その際、既に存在するエントリと同じものを追加しようとしても追加されません。 また、存在しないエントリを削除しようとしても削除されません。 既に存在していたり、既に削除されていた場合でも、エラーにはなりませんので、 同じ処理を1回しても2回以上しても同じ結果が得られます。 早間義博 さんは書きました: > (1) 同じドメインがある場合は一つのドメインだけが残る。 > (2) 上記の場合、同一のドメインに属するドメインデータは残される一つ > のドメインに集められる。 tomoyo-sortpolicy や tomoyo-editpolicy は前述のカーネルが行う動作を真似 します。そのため、 <kernel> /usr/local/bin/mycommand という行が複数回登場した 場合、1個にマージします。 > また、一般的に、 > (3) 同一ドメイン内では重複する定義は一つだけ残し、他は削除される。 はい。 > (4) 他の設定に包含されると判断されたデータは削除される。 そのような機能は tomoyo-sortpolicy にはありません。(^x^; > と考えて良いですか。 > > tomoyo-sortpolicy 処理前 > ---------------------------- ここから --------------------------- > <kernel> /usr/local/bin/mycommand > > file read /etc/passwd > file read /var/tmp/\* > > . > . > > <kernel> /usr/local/bin/mycommand > > file read /tmp/\* > file read /var/tmp/mycommand.tmp > ---------------------------- ここまで --------------------------- > > > tomoyo-sortpolicy 処理後 > ---------------------------- ここから --------------------------- > <kernel> /usr/local/bin/mycommand > > file read /etc/passwd > file read /var/tmp/\* > file read /tmp/\* ここに file read /var/tmp/mycommand.tmp が抜けていませんか? > > . > . > ---------------------------- ここまで ---------------------------