Tetsuo Handa
from-****@I-lov*****
2010年 4月 1日 (木) 22:38:29 JST
熊猫です。 TOMOYO Linux 1.7.2 をリリースしました。 ccs-patch-1.7.2-20100401.tar.gz MD5:5555725f3fc8cb7c203a20cc9ee1ffc8 ccs-tools-1.7.2-20100401.tar.gz MD5:aaaa18f4573e3b02c3c6f56877f9e0fc カーネル 2.6.34-rc3 に対応した他、 Ubuntu 10.04 / RHEL 5.5 などに 対応しています。 今回の目玉は、プログラムの実行を伴わないでドメイン遷移ができるようになった 点です。これにより、 Apache のバーチャルホスト単位やCGIプログラム単位で 異なる権限を与えることができるようになりました。 /proc/ccs/.transition に対して '\0' で終わる任意の文字列を書きこむことによりドメイン遷移が行われます。 例えば、 <kernel> /usr/sbin/httpd ドメインで動作しているプロセスが "app=cgi1 id=10000" + '\0' という文字列を /proc/ccs/.transition に書き込むと <kernel> /usr/sbin/httpd //app=cgi1\040id=10000 ドメインに遷移します。 この処理は Apache が提供している ap_hook_handler() 関数から呼び出します。 安全のために、自動的に // というプレフィックスが付与されるようになっています。 もし、 // というプレフィックスが付与されない場合、例えば <kernel> /usr/sbin/sshd /bin/bash ドメインに対して /proc/ccs/.transition への 書き込みが許可されており、 <kernel> /usr/sbin/sshd /bin/bash /usr/bin/passwd ドメインに対して /etc/shadow へのアクセスが許可されている場合、 <kernel> /usr/sbin/sshd /bin/bash ドメインで動作している /bin/bash プロセスは /proc/ccs/.transition に対して "/usr/bin/passwd" + '\0' という内容を書き込む ことにより /etc/shadow へのアクセスが可能になってしまいます。 /bin/bash に対して /etc/shadow へのアクセスを認めるというのは望まない 結果でしょう。 プログラムの実行をともなわないでドメイン遷移を行うためのパーミッションは allow_transit キーワードによりチェックされます。 allow_execute キーワードとは 異なり、 allow_transit キーワードで指定する文字列はファイルシステム上の実行可能 ファイルを参照するものではありません。そのため、 LDAP の DN エントリのように 任意の文字列の組み合わせを allow_transit キーワードに指定することができます。 もう1つの目玉は、処理の大部分をローダブルカーネルモジュールとして切り出せる ようになった点です。今までは TOMOYO を無効にした状態で起動するには、カーネルの コマンドラインで CCS=disabled という指定をするで /sbin/ccs-init が無効モード用の プロファイルをロードするようにしていました。これはユーザレベルで無効化している 状態ですので、カーネル内の TOMOYO のフックは呼び出されており、パフォーマンスに 影響を与える場合がありました。 TOMOYO 1.7.2 では、カーネルのコマンドラインで ccsecurity=off という指定をする ことにより、カーネルレベルで TOMOYO を無効にした状態で起動できます。 TOMOYO の フック自体が呼び出されなくなるため、パフォーマンスへの影響もありません。 もし、ディストリビューションのカーネルに組み込む場合にも、 TOMOYO を使わない ユーザに対してパフォーマンスへの影響を与えないで済むようになりました。また、 ローダブルカーネルモジュールとしてコンパイルすることにより、 TOMOYO を使わない ユーザに対してファイルサイズ面でも影響を与えないで済むようになりました。 ツールに関しては、 ccs-sortpolicy が use_profile 行を出力するように修正 されました。 ccs-sortpolicy は元々 /proc/ccs/grant_log や /proc/ccs/reject_log を ドメイン名をキーとしてソートすることによりログを圧縮するために開発されました。 ccs-auditd によって /proc/ccs/reject_log が /var/log/tomoyo/reject_log.conf という名前で保存されるようになっている場合、 # grep -A 3 -F 'profile=2 mode=permissive' /var/log/tomoyo/reject_log.conf | /usr/sbin/ccs-sortpolicy > /var/log/tomoyo/log.conf # grep -A 3 -F 'profile=2 mode=permissive' /var/log/tomoyo/reject_log.conf | /usr/lib/ccs/convert-audit-log | /usr/sbin/ccs-sortpolicy > /var/log/tomoyo/log.conf のようにしてアクセスログからポリシーを作成することができます。このポリシーを # /usr/sbin/ccs-loadpolicy -d < /var/log/tomoyo/log.conf のようにすると /proc/ccs/domain_policy に、 # cat /var/log/tomoyo/log.conf >> /etc/ccs/domain_policy.conf のようにすると /etc/ccs/domain_policy.conf に追加できるようになっています。 use_profile 行はドメインのアクセス制御モードを変更します。例えば profile 1 が 学習モード用、 profile 3 が強制モード用として定義されている場合、 use_profile 1 という指定をすると学習モードに、 use_profile 3 という指定をすると強制モードに なります。しかし、 /var/log/tomoyo/reject_log.conf には、あるドメインに対して 相反する指定(例えば use_profile 1 と use_profile 3 の両方)が含まれているかも しれません。そのような指定が含まれたまま、 /var/log/tomoyo/log.conf の内容を /proc/ccs/domain_policy や /etc/ccs/domain_policy.conf に追加すると、 期せずしてアクセス制御モードを変更してしまう危険性があります。そのため、 /var/log/tomoyo/log.conf によって /proc/ccs/domain_policy や /etc/ccs/domain_policy.conf で指定されているアクセス制御モードを上書きして しまうことの無いようにするために、 ccs-sortpolicy は use_profile 行を 除去するようにしていました。 しかし、 /proc/ccs/domain_policy や /etc/ccs/domain_policy.conf を ccs-sortpolicy でソートできると便利ではないかという意見があったため、 ccs-sortpolicy が use_profile 行を出力するように修正しました。 ( /proc/ccs/domain_policy と同様、同じドメインに対して複数の use_profile 行が 含まれていた場合、最後に指定された use_profile 行だけが出力されます。)