from-****@i-lov*****
from-****@i-lov*****
2007年 8月 9日 (木) 15:43:37 JST
熊猫です。 > これは、 /proc/ccs/acceptpolicy とかを読み出すと、 > "1,2,3" > みたいに返ってくる? そうです。 > 2.毎回、起動のたびに何度もポリシーのバージョンをチェックするコストは > ポリシがでかくなると我慢しがたくなりそうでいやだ。 起動1回につき、ポリシーローダ内でのチェックが1回、 カーネル内でのチェックが1回の2回だけだと思いますが? > 3.カーネル読み込み時にはエラーにならないことが確実にできるにしても、 > 結局ローダの延長線上で拒否しなくちゃいけなくなって、それで、 SELinux の場合は /sbin/init がポリシーをロードするような改造が加えられていますが、 TOMOYO Linux の場合は /sbin/init がポリシーをロードするような改造を加えることは ( /sbin/init をメンテナンスできる立場では無いので)できません。 (↓ Fedora Core 6 の場合) <kernel> /sbin/init 6 /dev/console 6 /dev/initctl 6 /dev/tty\$ 4 /etc/inittab 1 /etc/rc.d/rc 1 /etc/rc.d/rc.sysinit 4 /etc/selinux/config 4 /etc/selinux/targeted/policy/policy.21 4 /proc/cmdline 1 /sbin/init 1 /sbin/mingetty 4 /selinux/enforce 6 /selinux/load 4 /selinux/mls 4 /selinux/policyvers 2 /var/log/wtmp 6 /var/run/utmp allow_capability SYS_IOCTL allow_capability SYS_MOUNT allow_capability SYS_REBOOT allow_capability create_fifo allow_mkfifo /dev/initctl allow_rewrite /var/log/wtmp だから、 init= を明示して /sbin/init の起動前に(標準入出力が利用可能になった状態で) ポリシーローダを実行するようにしていました。 しかし、 init= を指定しないで済むようにしたいという意見があるので、 call_usermodehelper() を用いて /sbin/init の起動前に(標準入出力が利用不可能な状態で) ポリシーローダを実行するように変更されようとしています。 SELinux の /sbin/init と同じように標準入出力を使える状態にしたいのなら、 call_usermodehelper() ではなく init= による実行をするしか無いのではないでしょうか? > それくらいなら、一度、ポリシーファイルを「コンパイル」してデジタル署名 > をつけるようにして(MD5?)、改ざん防止の仕組みを作りこむ・・・そのときに > ポリシーバージョンもあわせてチェックしてしまう・・・とかの方がよほど > きれいです。 コンパイルというイメージが湧かないのですが・・・。 コンパイル前 +----------------------------+ |テキストで記述されたポリシー| +----------------------------+ コンパイル後 +----------------------------+ |ポリシーファイルのバージョン| +----------------------------+ |データ部のMD5SUM(バイナリ)| +----------------------------+ |データ部(バイナリ) | +----------------------------+ のようなイメージなのでしょうか? でも、このままでは「データ部のMD5SUM」と「データ部」を一緒に改ざんされてしまいます。 データ部はカーネルによって生成されますが、それ以外にもポリシーエディタを用いた変更が発生します。 仮に、データ部の改ざんが行われていないことを検証させるとしても、 データ部に問題(サポートされていない構文や不適切な値)が無いことは保証できないと思います。 改ざん防止の仕組みを作りこむかどうかにかかわらず カーネル内でバイナリデータの中に問題が無いかどうかを検証する必要があると思います。 テキストをパースするよりかは高速に処理できるかもしれませんが、 ポリシーをカーネル内に読み込んだ後で検証する必要性は変わらないと思います。