Tetsuo Handa
from-****@I-lov*****
2008年 8月 26日 (火) 21:54:47 JST
熊猫です。 出来合いのポリシーをパッケージとして配布するのを容易にするために、 /etc/ccs/ 以下のポリシーファイルを「パッケージによりインストールされたもの」と 「ユーザの作業により作成されたもの」の2つに分割してみてはどうかという実験を しています。 現在のポリシーファイルは、 /etc/ccs/system_policy.conf /etc/ccs/exception_policy.conf /etc/ccs/domain_policy.conf /etc/ccs/profile.conf /etc/ccs/manager.conf の5つですが、このままだと rpm や deb を使ってポリシーをインストール/ アンインストールする際に、個々のアプリケーションの部分だけを挿入/除去できない という問題があります。そのため、これらのポリシーファイルを パッケージ用 ユーザ操作用 /etc/ccs/base_system_policy.conf /etc/ccs/system_policy.conf /etc/ccs/base_exception_policy.conf /etc/ccs/exception_policy.conf /etc/ccs/base_domain_policy.conf /etc/ccs/domain_policy.conf /etc/ccs/base_profile.conf /etc/ccs/profile.conf /etc/ccs/base_manager.conf /etc/ccs/manager.conf のように分割してみました。個々のアプリケーション用のポリシーを 例えば /etc/ccs/conf.d/ のようなディレクトリ以下に配置し、 rpm や deb でインストール/アンインストールした際には cat /etc/ccs/conf.d/system_*.conf > /etc/ccs/base_system_policy.conf cat /etc/ccs/conf.d/exception_*.conf > /etc/ccs/base_exception_policy.conf cat /etc/ccs/conf.d/domain_*.conf > /etc/ccs/base_domain_policy.conf cat /etc/ccs/conf.d/profile_*.conf > /etc/ccs/base_profile.conf cat /etc/ccs/conf.d/manager_*.conf > /etc/ccs/base_manager.conf という操作により更新します。 そして、 ccs-tools パッケージは /etc/ccs/base_\*.conf を読み取り専用として 利用し、 /proc/ccs/\* との差分だけを /etc/ccs/\*.conf\-base_\*.conf に 読み書き用として保存します。 /sbin/ccs-init や ccs-loadpolicy や ccs-editpolicy などは /etc/ccs/system_policy.conf の前に /etc/ccs/base_system_policy.conf を、 /etc/ccs/exception_policy.conf の前に /etc/ccs/base_exception_policy.conf を、 /etc/ccs/domain_policy.conf の前に /etc/ccs/base_domain_policy.conf を、 /etc/ccs/profile.conf の前に /etc/ccs/base_profile.conf を、 /etc/ccs/manager.conf の前に /etc/ccs/base_manager.conf を 読み込むようにします。また、 ccs-savepolicy などは /proc/ccs/system_policy から /etc/ccs/base_system_policy.conf を 引いたものを /etc/ccs/system_policy.conf に、 /proc/ccs/exception_policy から /etc/ccs/base_exception_policy.conf を 引いたものを /etc/ccs/exception_policy.conf に、 /proc/ccs/domain_policy から /etc/ccs/base_domain_policy.conf を 引いたものを /etc/ccs/domain_policy.conf に、 /proc/ccs/profile から /etc/ccs/base_profile.conf を引いたものを /etc/ccs/profile.conf に、 /proc/ccs/manager から /etc/ccs/base_manager.conf を引いたものを /etc/ccs/manager.conf に保存するようにします。 例えば、 /proc/ccs/domain_policy の内容が <kernel> allow_execute /sbin/init allow_execute /sbin/modprobe use_profile 1 となっており、 /etc/ccs/base_domain_policy.conf の内容が <kernel> allow_execute /sbin/init allow_execute /sbin/hotplug use_profile 1 <kernel> /sbin/init use_profile 1 となっていた場合、 ccs-savepolicy は /etc/ccs/domain_policy.conf を delete <kernel> /sbin/init <kernel> delete allow_execute /sbin/hotplug allow_execute /sbin/modprobe という内容で保存するようになります。 この状態で ccs-init や ccs-editpolicy や ccs-loadpolicy が /etc/ccs/base_domain_policy.conf → /etc/ccs/domain_policy.conf の順に 読み込むことで、 /proc/ccs/domain_policy の内容を復元できます。 ちょうど、 LDAP の LDIF 形式で変更点(差分)だけを記述して読み込ませるイメージ です。(と書かれても困ると思いますが、何故か TOMOYO Linux の操作は ldapmodify コマンドによる LDAP 操作と似ているようです。) ccs-loadpolicy や ccs-savepolicy で標準入力から読み込む/標準出力へ書き出す 場合には /etc/ccs/base_\*.conf を無視すべきかどうか迷っています。 とりあえずリビジョン 1485 では /etc/ccs/base_\*.conf を無視する仕様に しています。 ccs-savepolicy -d の場合に /etc/ccs/base_domain_policy.conf の 内容を減算してくれると便利な場合もあるかもしれませんが、 ccs-loadpolicy -d の 場合に /etc/ccs/base_domain_policy.conf の内容を加算してしまうと、せっかく /etc/ccs/domain_policy.conf により消去されたエントリ(上の例では allow_execute /sbin/hotplug )が復活してしまうので、 ccs-loadpolicy -d の場合には /etc/ccs/base_domain_policy.conf を加算すべきでは ないと考えて、 ccs-savepolicy -d の場合にも /etc/ccs/base_domain_policy.conf を 減算しないようにしました。 リリースは9/3を予定しています。期間が短いですが、何かご意見やご質問が ありましたら返信ください。