思考の道具箱 - 2つのアプリケーションでファイルを共有するには
Sharing files between two confined domains.
http://danwalsh.livejournal.com/24147.html

Sebastian Hennebruederの質問:

「Postfix(SMTPサーバ)とdovecot(IMAP/POP3サーバ)はお互いに認証鍵を共有しています。
SELinuxでは共有をどうしたらいいかわからなかったので、鍵のファイルをコピーして、それぞれの環境に置きました。でもこういうやりかたはしたくありません。共有した場合に報告されるメッセージをaudit2allowで処理して、ポリシーを修正すればよいのかもしれませんが、中身がわからないままやりたくありません。
最も望ましいのは、どちらのドメインからも利用できる新しい設定を作ることです。この場合、どうやって書き始めたらいいでしょう。簡単なことなのでしょうが、適当な情報が見当たりませんでした。」

新しくカスタムのポリシーモジュールを作るのは簡単です。自分ならこうする、というやり方をお教えしましょう。

まず mypostfix_dovecot.te というファイルを作ります。

policy_module(mypostfix_dovecot, 1.0)

gen_require(`
type postfix_t, dovecot_t;
')

type postfix_dovecot_cert_t;
files_type(postfix_dovecot_cert_t)

read_files_pattern(postfix_t, postfix_dovecot_cert_t, postfix_dovecot_cert_t)
read_files_pattern(dovecot_t, postfix_dovecot_cert_t, postfix_dovecot_cert_t)

このファイルから、 mypostfix_dovecot.fc を作ることができますし、semanage コマンドで下記のパスにfcontextを割り当てることができます。

/etc/pki/mycerts(/.*)? gen_context(system_u:object_r:postfix_dovecot_cert_t,s0)

これらをコンパイルします。

# make -f /usr/share/selinux/devel/Makefile

できたポリシーをインストールするには次のコマンドを実行します。

# semodule -i mypostfix_dovecot.pp

ポリシーをファイルのラベルづけに反映させます。

# restorecon -R -v /etc/pki/mycerts

これでおしまいです。
作った .pp (ポリシーファイル)は、他のマシンにコピーして使うことができます。上記の設定変更はサーバを再起動しても有効ですし、アクセスの方法を追加したければ、mypostfix_dovecot.te のファイルにインターフェースを追加すれば良いのです。

今回作ったポリシーを削除したい場合には、次のようにします。

# semodule -r mypostfix_dovecot

ポリシーの削除をファイルのラベル付けに反映させるのは次のコマンドです。

# restorecon -R -v /etc/pki/mycerts