思考の道具箱 - audit2allowを使ったポリシーモジュール作成。その2
続:audit2allowを使ってポリシーモジュールを作成する
http://danwalsh.livejournal.com/24750.html

fedora-selinux MLへ Frank Murphyからの投稿

質問:
If exim gave an avc denial.
eximアプリケーションを使っていて、拒否のAVCメッセージがログに出たとします。

1: 対応するポリシーをaudit2allowで作りました。

audit2allow -M myexim < /var/log/audit/audit.log

そして、それを適用しました。

semodule -i myexim.pp

2: その後、数日して、eximアプリケーションが今度は別の種類のAVC拒否メッセージを出してきました。

この場合、audit2allowをどうやって使えば、新しいAVCメッセージに対処できるでしょうか?
man audit2allow してみましたが、要領を得ませんでした。

回答:
いくつか解決方法はありますが、まず、audit2allowがなにをしているのか理解する必要があります。
このコマンドはAVCの拒否メッセージを取り込んで、それを許可するためのルールを作成します。
オプションもいくつかあり、もし-Rのオプションを指定したならば、単純にメッセージに一対一対応するルールではなく、既存のドメインのインターフェースを最大限活用するようなルールを作成します。
audit2allowコマンドは、type enforcement(.teの拡張子)ファイルを作成しますが、その際に-Mオプションで名前を指定できます。


# audit2allow -M MYPOLICY < /var/log/audit/audit.log とすると、以下のような.teのファイルを作成します。

module MYPOLICY 1.0;

require {
    type staff_mono_t;
    type shadow_t;
    class file getattr;
}

#============= staff_mono_t ==============
allow staff_mono_t shadow_t:file getattr;

audit2allowコマンドは、.teファイルを作るだけではく、.teファイルをコンパイルして、semoduleコマンドでインストール可能な形式であるポリシーパッケージファイル(拡張子.pp)も作成します。
semoduleコマンドでMYPOLICY.ppのポリシーパッケージをインストールした場合、過去に適用されたMYPOLICY.ppの内容と置き換えられます。したがって、新しいAVCメッセージだけを使って .teファイルを作成し、.ppファイルをインストールしてしまったら、過去のポリシーの内容は消えてしまうのです。

もし、ログに、古いAVCメッセージも一緒に残っていたのなら、問題ありません。新旧のAVCメッセージがまとめてコンパイルされて、それらすべてを許可する新しいポリシーパッケージ(.pp)が作られるので、同じ手順で問題ありません。

一方、AVCメッセージが別のファイルとして残っていた場合で、元の.teファイルが残っているのなら、audit2allowコマンドの出力を、その.teファイルに追加することができます。

# audit2allow >> myexim.te << /var/log/audit/audit.log,

その後で、.teファイルをポリシーパッケージとしてコンパイルすれば、新旧のAVCメッセージの内容が反映されたポリシーを作ることができます。ただし、gen_requireに関する情報を付け加える必要があるかもしれませんので、パッケージインストールの手順は以下のようにしたほうがいいでしょう。

# make -f /usr/share/selinux/devel/Makefile
# semodule -i myexim.pp

もう一つの解決方法は、全く新たにmyexim2というポリシーを作ってしまうことです。こうすれば古いポリシーの内容が消える心配はありません。

# audit2allow -M myexim2 < /var/log/audit/audit.log
# semodule -i myexim2.pp

註:
ポリシーを作成するときは、audit2allowコマンドで作成された.teファイルの中身を一度確認することをお薦めします。おもわぬセキュリティホールを空けてしまうことがあるかもしれません。心配ならばfedora-selinuxなどのMLで質問するのも良いでしょう。バグ報告も歓迎します。