Tetsuo Handa
from-****@I-lov*****
2006年 9月 24日 (日) 23:50:13 JST
熊猫です。 > > ドメイン単位でモードを持たせるようにすることは簡単に実装できますが、 > ドメイン単位よりAP単位ではどうでしょうか? > 任意のドメインとそのドメイン以下のポリシーをまとめた単位をイメージしています。 何を基準にグループ化するかですね。 <kernel> /usr/sbin/httpd を基点とした単位と <kernel> /usr/sbin/httpd /var/www/cgi-bin/sample1.cgi を基点とした単位を 混在されるとドメイン定義が重複して厄介ですし。 <kernel> /usr/sbin/httpd 以下全体を新規学習させたい場合もあれば、 <kernel> /usr/sbin/httpd と <kernel> /usr/sbin/httpd /var/www/cgi-bin/sample1.cgi は 学習済みなので <kernel> /usr/sbin/httpd /var/www/cgi-bin/sample2.cgi だけを 学習させたいという場合もあるでしょう。さらに <kernel> /usr/sbin/httpd /var/www/cgi-bin/sample1.cgi と <kernel> /usr/sbin/httpd /var/www/cgi-bin/sample2.cgi が学習済みの状態から <kernel> /usr/sbin/httpd だけを学習させたいという場合もあることでしょう。 このような要望に対処するには、ドメイン単位で指定できる必要があります。 で、試作してみました。 diff によると 186 行削除 308 行追加なので 細かい仕様を決めて作り直しても数百行程度の改修で実現できると思います。 現在の仕様としては ・ /proc/ccs/status の構文を拡張して 256 個までのプロファイルを定義できるようにする。 MAC_FOR_FILE=1 のようになっていたのを 0-MAC_FOR_FILE=1 1-MAC_FOR_FILE=3 といった具合に、先頭にプロファイル番号を付加する。 ・それに合わせて /root/security/profile\$.txt に以下のように複数のプロファイルを記述する。 0-MAC_FOR_FILE=1 0-MAC_FOR_NETWORK=1 0-MAC_FOR_signal=1 1-MAC_FOR_FILE=3 1-MAC_FOR_FILE=3 2-MAC_FOR_FILE=2 ・ドメイン単位でプロファイル番号を保持させる。 アクセス許可のチェックはそのドメインに割り当てられているプロファイル番号で 指定された制御レベルを使用する。 ・ /proc/ccs/policy/domain_policy の構文を拡張してそのドメインに割り当てる プロファイル番号を指定できるようにする。 <kernel> /usr/sbin/httpd use_profile 1 4 /var/www/html/\* <kernel> /usr/sbin/httpd /var/www/cgi-bin/sample1.cgi use_profile 1 <kernel> /usr/sbin/httpd /var/www/cgi-bin/sample2.cgi use_profile 0 <kernel> /usr/sbin/sshd use_profile 0 1 /bin/bash <kernel> /usr/sbin/sshd /bin/bash use_profile 2 1 /bin/cat ・プロファイルの追加は /proc/ccs/status への書き込みで行い、 ドメインに割り当てられているプロファイル番号の変更は /proc/ccs/policy/domain_policy への書き込みで行う。 となっています。なお、まだ確定仕様ではありません。 > status は /proc/ccs/status/{httpd | sshd} にAP別に管理できるようにすると、 basename だと /etc/rc.d/init.d/httpd と /usr/sbin/httpd のように 同名のファイルがある場合に対処できなくなりますね。 > --------------- sshd ポリシー ------------------------ > <kernel> /usr/sbin/sshd > 1 /bin/bash > > <kernel> /usr/sbin/sshd /bin/bash > 1 /bin/ls > > --------------- httpd ポリシー ------------------------ > <kernel> /usr/sbin/httpd > 4 /var/www/html/\* ユーザランドでやってくださいね〜。(^^; カーネル内でやるとドメイン名衝突時の折衝が面倒+メモリ消費が増えますから。