Tetsuo Handa
from-****@I-lov*****
2006年 1月 29日 (日) 21:08:43 JST
version 1.0.1 公開後、いくつかのバグ修正と仕様変更が 行なわれています。そろそろ修正を終わりにして version 1.0.2 としたいのですが、手続き上の理由により、 今すぐ差分を CVS 等にアップロードすることはできません。 とりあえず version 1.0.1 公開後から現時点までの ChangeLog をお知らせします。 ・unix_bind() の中で CheckWritePermission() を追加。 sys_mknod() でソケットを作成する場合は CheckWritePermission() を 呼んでいるのに、 unix_bind() でソケットを作成する場合には 呼ばれていないというのは不整合だと思い、追加しました。 具体的には unix_bind() で /dev/log を作成する際に書き込み権限が チェックされるようになりました。 ・フックのバージョンを proc_misc_init() の中で表示。 TOMOYO Linux パッチのフックを掛ける部分はカーネルバージョンに 依存しているため、フック部分の最終更新日を知ることができるように proc_misc_init() の中で表示するようにしました。 ・パーミッションチェック箇所を filp_open() から open_namei() に変更。 TOMOYO Linux によるパーミッションチェックを行う位置を変更しました。 ・バグ: 2.6.15-rc5 用パッチの filp_open() の処理を修正。 2.6.15-rc5 用パッチのみ、エラー時のリソース解放処理に誤りがありました。 次回公開時に含まれる 2.6.15 用のパッチで修正されます。 なお、このバグは 2.6.15-rc5 用のパッチを使用して 「File Access Control support」を有効にしている場合のみ影響します。 ・/proc/ccs/info/self_domain を追加。 ユーザランドのプログラムが必要に応じて自分の属しているドメイン名を 知ることができるようにしました。これは、学習モードで動作中に ポリシーを再読み込みするプログラムを使用してポリシーを上書きした場合、 ポリシーを再読み込みするプログラムに対する学習結果が失われてしまうのを 回避する為の修正です。 なお、ポリシーを再読み込みするプログラムは次回公開時に含まれる予定です。 ・CheckTaskCapability() で使用している定数を統合。 常に *_INHERITABLE_* と *_LOCAL_* を同時に指定するのは無駄なので統合しました。 ・バグ: DropTaskCapability() が成功時に -EAGAIN を返すように変更。 DropTaskCapability() は do_execve() の中から呼ばれる為、 0 を返してしまうと do_execve() が成功したのと区別が付かなくなってしまいます。 なお、このバグは「Dropping capabilities interface support (EXPERIMENTAL)」を 有効にしている場合のみ影響します。 ・バグ: chroot() 制限が機能していなかったのを修正。 CheckChRootPermission() | CheckTaskCapability() とすべき所が CheckChRootPermission() || CheckTaskCapability() となっていたため、 チェックは行われても拒否されないようになっていました。 なお、このバグは「chroot() restriction support」または 「Dropping capabilities interface support (EXPERIMENTAL)」を 有効にしている場合のみ影響します。 ・TOMOYO のメッセージの出力を抑制。 いくつかのメッセージについて、 KERN_DEBUG を指定することで コンソール上には表示させないようにしました。 ・AddChrootACL() と AddMountACL() 内で isRoot() の呼び出しを廃止。 Fedora Core 5 test 2 に付属の Avahi Daemon が uid=euid=0 ではない状態で chroot() を呼び出していたため、学習モードにおいて自動的に追加されない 状況になっていました。学習モードにおいて自動的に追加できるよう、 uid=euid=0 であるかどうかのチェックを除外しました。 なお、手動での追加は uid=euid=0 の場合のみ可能です。 ・AddMountACL() に渡されたデバイス名が NULL の場合は "<NULL>" に変更。 VMware が vmware-hgfs をマウントする際にデバイス名を NULL にしていたため、 学習モードにおいて自動的に追加されない状況になっていました。 学習モードにおいて自動的に追加できるよう、 NULL を "<NULL>" に マッピングしました。 ・SAKURA のメッセージの出力を抑制。 いくつかのメッセージについて、 KERN_DEBUG を指定することで コンソール上には表示させないようにしました。 ・プロファイルをロードできなかったら panic() を呼ぶように変更。 カーネルコマンドラインで明示的にプロファイル番号を指定された場合に そのプロファイルをロードできなかった場合、停止するようにしました。 これは、アクセス制御を無効化させるために不適切なプロファイル番号を 指定することでプロファイルの読み込みを回避されるのを防ぐための修正です。 プロファイル作成前に TOMOYO Linux カーネルで起動する場合を想定し、 プロファイル番号を指定されなかった場合にはプロファイル0を ロードできなかった場合でも続行するようになっています。 ・IsGloballyReadableFile() で full_name_hash() を使うように変更。 手順書の見直しで多くのファイルを allow_read することにしたので、 検索を高速に行なえるようにしました。 ・バグ: CheckSignalACL() でチェック漏れがあったのを修正。 ドキュメントには「シグナルの送信先ドメインのドメイン名がシグナルの 送信元ドメインのドメイン名で始まる場合はシグナルの種類によらず 常に許可される」と記述されていますが、実際にはそうではなく、 「シグナルの送信先ドメインがシグナルの送信元ドメインと一致する場合は シグナルの種類によらず常に許可される」となっています。これについては、 ソースコードを修正せず、ドキュメントの修正で対応します。 CheckSignalACL() 内の条件分岐ミスで pid = -1 の場合に チェックが行なわれていませんでした。なお、このバグは 「Signal Control support」を有効にしている場合のみ影響します。 以下、英文での ChangeLog 差分です。 Fix 2006/01/04 @ Add CheckWritePermission() check in unix_bind(). I modified to check write permission in unix_bind(), for sys_mknod(S_IFSOCK) checks write permission. @ Show hook version in proc_misc_init(). The hook part of this patch depends on the kernel's version, while the rest part of this patch doesn't. I added the hook version so that the administrator can know the last modified date of the hooks. @ Move permission checks from filp_open() to open_namei(). I moved the location of checking MAC's permission from filp_open() to open_namei(). @ Fix an error in filp_open(). (only 2.6.15-rc5) This error was only in the patch 2.6.15-rc5 and was fixed in the patch for 2.6.15. Fix 2006/01/12 @ Add /proc/ccs/info/self_domain. I added /proc/ccs/info/self_domain so that the userland programs can know the name of domain they belong to if necessary. Fix 2006/01/13 @ Merge constants for CheckTaskCapability(). I merged *_INHERITABLE_* and *_LOCAL_* to avoid always calling CheckTaskCapability() with both constants. @ DropTaskCapability() returns -EAGAIN on success. DropTaskCapability() must not return 0 on success, for DropTaskCapability() is called from do_execve(). @ Fix an error for chroot() permission check. The chroot() restriction was not working due to the following mistake. CheckChRootPermission() || CheckTaskCapability() returns 0 or 1, while CheckChRootPermission() | CheckTaskCapability() returns 0 or -EPERM. Fix 2006/01/17 @ Suppress some of debug messages in TOMOYO. I added KERN_DEBUG to suppress some of debug messages. Fix 2006/01/19 @ Remove isRoot() checks in AddChrootACL() and AddMountACL(). I found a program that needs to chroot by non-root. So, I stopped checking uid=euid=0 for these functions so that "accept mode" can append ACLs. The isRoot() is checked at AddChrootPolicy() and AddMountPolicy(). @ Map NULL device name to "<NULL>" in AddMountACL(). VMware mounts vmware-hgfs with NULL device name. So I mapped NULL device name to "<NULL>". Fix 2006/01/20 @ Suppress some of debug messages in SAKURA. I added KERN_DEBUG to suppress some of debug messages. @ Call panic() if failed to load given profile. Call panic() if profile index was given via CCS= parameter but the profile doesn't exist. If CCS= parameter is not given, the kernel attempts to load profile 0, but it doesn't call panic() if profile 0 doesn't exist. Fix 2006/01/24 @ Use full_name_hash() for IsGloballyReadableFile(). I modified to use full_name_hash() for faster scan. @ Add signal checking condition in CheckSignalACL(). The documentation says "if the target domain's domainname starts with the source domain's domainname, it is always granted" but actually it isn't. I'll change the documentation instead of changing the source code. Also, checking for pid = -1 was missing. This error was fixed.