from-****@i-lov*****
from-****@i-lov*****
2007年 8月 9日 (木) 13:03:30 JST
熊猫です。 (1) /proc/{ccs,tomoyo}/version から カーネルがサポートしているポリシーのバージョン番号を取得できるようにする。 (2) カーネルがサポートしているポリシーのバージョン番号が同じなのに サポートされている構文がカーネルコンフィグに依存しないようにするために、 カーネルコンフィグで各機能(CONFIG_TOMOYO_MAC_FOR_FILE CONFIG_TOMOYO_MAC_FOR_ARGV0 等)の 選択を行わせないようにする。 (3) サポートしているポリシーのバージョン番号は複数表示できるようにする。 例えばポリシーのバージョン 1 と 2 と 3 が定義されており、 バージョン 3 はバージョン 2 を完全に包含している (バージョン 2 のポリシーをバージョン 3 のカーネルで使える)場合は 2 3 の両方を表示する。 バージョン 3 がバージョン 2 を完全には包含していない (バージョン 2 のポリシーをバージョン 3 のカーネルで使えない)場合は 3 だけを表示する。 (4) ポリシー構文チェッカの checkpolicy の引数にポリシーのバージョン番号を 指定するようにして、定義されている全てのバージョンのポリシーをチェックできるようにする。 (5) ポリシーローダ( /sbin/{ccs,tomoyo}-init )の処理を以下のように変更する。 変更前 (1) ポリシーファイルを /proc/{ccs,tomoyo}/ インタフェースに流し込む。 サポートされていない構文やエラーを含む行はカーネルにより読み捨てられる。 変更後 (1) /proc/{ccs,tomoyo}/version からサポートされているポリシーのバージョン番号を取得する。 (2) /etc/{ccs,tomoyo}/ にあるポリシーファイルの内容をポリシー構文チェッカ checkpolicy に流し込み、問題が無いことを確認する。 (3) ポリシーファイルを /proc/{ccs,tomoyo}/ インタフェースに流し込む。 サポートされていない構文やエラーを含む行はカーネルにより読み捨てられるが、 先に checkpolicy で確認してから流し込むので読み捨てられることは無い。 ポリシーファイルの先頭行にバージョン番号を付与する方法は採用しない。その理由は、 (1) ポリシーファイルの先頭行にあるバージョン番号が正しくても ポリシーの内容にエラーが含まれていないことを保証できない。 (2) ポリシーファイルの先頭行にあるバージョン番号が正しくても ポリシーの内容にサポートされていない構文が含まれていないことを保証できない。 (3) sort コマンドや sortpolicy コマンドで行単位(ドメイン用ポリシーはドメイン単位)の 並べ替えが可能という利点が失われる。 課題としては (1) checkpolicy はポリシーローダから呼ばれるので / パーティションに置かなければいけない。 (2) init= を用いてポリシーローダを実行しない( call_usermodehelper() に実行させる)場合、 標準入出力が無いのでポリシーに問題があってもエラーメッセージを表示できない。 そのため、問題があった場合、エラーメッセージを表示できないままポリシーローダの中で永遠にスリープするか ポリシーをロードできないままポリシーローダが終了することでカーネルパニックするかしか選択肢がない。