Tetsuo Handa
from-****@I-lov*****
2009年 11月 3日 (火) 20:58:26 JST
熊猫です。 11月11日に TOMOYO 1.7.1 ("4th anniversary release") をリリースしようと 思っています。今回は多数のバグフィックスといくつかの機能強化が行われています。 主な変更点について以下に示します。 (1) ディレクトリと再帰的に一致する演算子のサポートが追加されました。 /\{ と \}/ が追加されました。 /\{dir\}/ というパターンは '/' + '1回以上の dir/ の繰り返し' (例: /dir/ /dir/dir/ /dir/dir/dir/ ) に一致します。 (2) アクセスログに含まれる情報を増やしました。 従来は、 /proc/ccs/grant_log /proc/ccs/reject_log /proc/ccs/query には ファイルの uid/gid/mode などの情報は含まれていませんでした。 if 節を使い始めたユーザの中から、 if task.uid=path1.uid のような条件式を 自動的に学習してほしいという要望が出てきています。 しかし、 if 節で指定できる全ての組み合わせをプロファイルで指定させるのは プロファイルが複雑になりすぎるため非現実的です。そこで、アクセスログの中に if 節で指定できる全ての情報を含ませるようにしました。 この変更により、プロファイルで CONFIG::learning={ max_entry=0 } のように 指定するという、学習モードの新しい使い方が登場しました。ポリシーで許可 されていないリクエストは全て mode=learning というヘッダ行と共に /proc/ccs/reject_log へと送られます。 mode=learning というヘッダ行が 含まれているログの中から必要な範囲を切り出して加工し、 /usr/sbin/ccs-loadpolicy -d でポリシーに追加することができます。 CONFIG::learning={ max_entry=0 } を指定した場合の学習モードと確認モードの 違いは、アクセスログのヘッダ行に含まれるモードが mode=learning か mode=permissive かだけとなります。 (3) TOMOYO を有効化するためのトリガをコンフィグで指定できるようにしました。 従来は、 TOMOYO の機能を有効化するためのパス名( /sbin/init または /sbin/ccs-init )はハードコーディングされていました。しかし、 Android 環境 では /sbin/init が存在せず、 /sbin/ccs-init をデーモンプロセスの開始前に 実行させることも困難です。そのため、 /init の実行をトリガとして TOMOYO の 機能を有効化させるようにしました。 TOMOYO を有効化するための代替パス名(デフォルトでは /sbin/ccs-start ) および TOMOYO のポリシーをロードするプログラムのパス名(デフォルトでは /sbin/ccs-init )をカーネルコンフィグで指定できるようにしました。 /sbin/init を持たない環境では /init や /linuxrc のような他のプログラムを /sbin/ccs-init の代わりに指定することができます。 (4) path_group および number_group の読み出し時にクラッシュする不具合を修正しました。 path_group および number_group の読み出しは2重ループなのですが、ループを 抜ける処理が誤っていたため、 path_group または number_group の読み出しが 中断された場合にクラッシュしていました。 (5) 同じ address_group が追加された場合のメモリリークを修正しました。 同じ address_group が追加された場合にメモリを解放する処理が抜けていました。 (6) allow_env の if 節で argv[]/envp[] を参照した場合の処理結果がおかしくなる不具合を修正しました。 環境変数名のチェックと環境変数の値のチェックの両方に同じバッファが使われて いたため、 allow_env PATH if exec.envp["PATH"]="/" のような指定は正しく動作していませんでした。 (7) if 節が 255 バイトを超過した場合に反応がなくなったり比較結果が正しくなくなる不具合を修正しました。 リストの1要素が256バイト以上になることは無いだろうと思ってバイト数を u8 で扱っていたため、複雑な if 節が指定されることで256バイト以上になって しまった場合に、反応がなくなったり比較結果が正しくなくなる不具合を修正 しました。 (8) execute_handler または denied_execute_handler が失敗した場合のエラーコードを修正しました。 ccs_try_alt_exec() でメモリ割り当てに失敗した場合、 -ENOMEM を返すべき ところが ENOMEM を返していたのを修正しました。 スナップショットは http://sourceforge.jp/projects/tomoyo/svn/view/trunk/1.7.x/ccs-patch.tar.gz?root=tomoyo&revision=3134&view=tar からダウンロードすることができます。 Ubuntu 9.10 のカーネルでは AppArmor と TOMOYO の両方が組み込まれています。 しかし、 TOMOYO 2.2.0 は実際のシステムに導入するには機能的に不十分である (例:アクセスログやネットワークの制御が無い)ため、 TOMOYO 1.7.x のバイナリ パッケージも提供します。上記のスナップショットを用いて作成された Ubuntu 9.10 用 カーネルパッケージは以下の場所からダウンロードできます。 http://tomoyo.sourceforge.jp/incoming/linux-image-2.6.31-14-ccs1.7.1-pre_2.6.31-14.48_i386.deb http://tomoyo.sourceforge.jp/incoming/linux-headers-2.6.31-14-ccs1.7.1-pre_2.6.31-14.48_i386.deb http://tomoyo.sourceforge.jp/incoming/linux-headers-2.6.31-14_2.6.31-14.48_all.deb http://tomoyo.sourceforge.jp/incoming/linux-libc-dev_2.6.31-14.48_i386.deb