SELinuxのポリシー・モジュールを自作する~FileContexts編

 Muninには最初からTomcatプラグインが含まれているのですが、これよりもMunin.warの方がいろんな情報を取得できるので重宝しています。Munin.warについてはこちらを参考してください。

   http://woontai.dip.jp/muninwar/

 このMunin.warのセキュリティ・コンテキストは次のようになっています。

system_u:object_r:munin_unconfined_plugin_exec_t:s0

  これは /etc/selinux/targeted/contexts/files/file_contexts に次のように定義されているためです。

/usr/share/munin/plugins/.* -- system_u:object_r:munin_unconfined_plugin_exec_t:s0

 このファイルにはプラグイン個別に別のタイプが設定されていて、例えばTomcatプラグインは次のように定義されています。

/usr/share/munin/plugins/tomcat_.* -- system_u:object_r:munin_services_plugin_exec_t:s0

 Munin.warのプラグイン名は cataline_.* なので、これが適用されません。 munin_unconfined_plugin_exec_t のままでも問題なく動くのですが、なんとなく気持ち悪いので、munin_services_plugin_exec_t に合わせてみようかと思います。セキュリティ・コンテキストを変更する方法として、chcon コマンドがあります。

chcon -t munin_services_plugin_exec_t /usr/share/munin/plugins/catalina_* 

 けれど、chcon コマンドは一時的なもので、restorecon コマンドを実行したり、autorelabel を実行した場合、上記の file_contexts ファイルに定義されたものに貼り直されてしまいます。なので、セキュリティ・ポリシー・モジュールを作成した方が良いでしょう。

 以前のブログ記事でもセキュリティ・ポリシー・モジュールを作成する方法を記述しましたが、今回は別コンテキストへの実行許可ではなく、ファイル・コンテキストの設定のみしたいので、前回作成しなかったfcファイルを作成します。

 まず、teファイルを作成します。モジュール名は munin-plugin-catalina にします。requireブロックは不要かと思いましたが、記述しないとコンパイルに失敗するので記述しました。typeとして、今回設定する型を記述します。

module munin-plugin-catalina 1.0;
require {
type munin_services_plugin_t;
}

 次に、fcファイルを作成します。

/usr/share/munin/plugins/catalina_.* -- gen_context(system_u:object_r:munin_services_plugin_exec_t,s0)

 コンパイルして、インストールします。

make -f /usr/share/selinux/devel/Makefile
semodule -i munin-plugin-catalina.pp

 インストールしたポリシーを適用します。

restorecon /usr/share/catalina_*

 ls -Z コマンドで適用前と適用後を見比べてみてください。munin_unconfied_plugin_exec_t になっているはずです。

 

追記

 munin.fc の設定や書式については次を参照してください。

   http://oss.tresys.com/projects/refpolicy/browser/policy/modules/services/munin.fc?rev=2666722f002608e57f4eb984c2decc317fdbf9ce


 

 ちなみに、fc ファイルは次の書式でも有効です。

/usr/share/munin/plugins/catalina_.* -- system_u:object_r:munin_services_plugin_exec_t:s0