Tetsuo Handa
from-****@i-lov*****
2009年 7月 6日 (月) 13:58:07 JST
熊猫です。 組込み環境だと find とか which とかを用意するのが面倒なのと、 処理時間を短縮することで .rpm や .deb の post install セクションで ポリシーの初期化をしてしまおうという企みのもと、 init_policy.c の make_exception() 部分をCプログラム化してみました。 http://sourceforge.jp/projects/tomoyo/svn/view/branches/ccs-tools/ccstools/make_exception.c?root=tomoyo&view=co&content-type=text%2Fplain ( make_alias() 部分は既に make_alias.c に置き換わっています。) (↓所要時間は環境により大きく異なります。) −−− init_policy.sh の make_exception() 1回目−−− real 0m10.579s user 0m0.167s sys 0m1.109s −−− make_exception.c 1回目−−− real 0m9.431s user 0m0.003s sys 0m0.293s −−− init_policy.sh の make_exception() 2回目−−− real 0m0.921s user 0m0.155s sys 0m0.833s −−− make_exception.c 2回目−−− real 0m0.044s user 0m0.017s sys 0m0.029s ディスクアクセス待ちが実行時間のほとんどを占めているので 処理時間の短縮効果はあまり無いことが判りました。 重たいのは file_pattern と allow_read を登録するために find で /usr/share 以下から fonts ディレクトリや icons ディレクトリなどを 検索する処理だと考えています。 これらは学習モードで学習された後に \* に置換しても差し支えないでしょうし、 ディレクトリ階層が意味を持たないので file_pattern を使って複数行として学習 させるよりも path_group を使って手動で1行の @ に置換する方が適していると 思います。 でしたら、 ccs-savepolicy の実行前または後に何らかのコマンドを実行することで 学習後に置換させるという方法が考えられます。(現在は ccs-patternize という コマンドがありますが、パターンを自分で与える必要があるため、あまり使われて いないと思います。) 最初から init_policy.sh に全てのプログラム用の file_pattern と allow_read が 記述されていれば良いのですが、予め全てのパターンを網羅することは不可能です。 さらに、予め file_pattern や allow_read を作成する方法だと、一度 exception_policy.conf を作成した後は ccs-tools がアップデートされて init_policy.sh に新しいパターン情報が追加されたとしても反映されません。 でしたら、 init_policy.sh には必要最低限のパターンのみを登録し、 新しい file_pattern や allow_read が追加されたら domain_policy.conf を更新する という方法をとる方が使いやすいような気がしています。 つまり、 init_policy.sh を大幅に簡略化して、学習モードでざっと学習後に パターン化を行うというアプローチに移行してはどうかというアイデアです。 どうでしょう?