
私はalterme(http://www.pldaniels.com/altermime/)は、電子メールを途中で変更するpostfix(SMTPサーバー)用です。スパムのため、私は私たちのサーバーから送信されたすべての電子メールに「X-ListUnsubscribe」ヘッダーを挿入します。
Altimemeは/var/spool/filterに書くことができなければなりません(通常postfixは/var/spool/postfixに書くと思います)。とにかくSELinuxを無効にすると、これはうまく機能しますが、有効にすると競合が発生します。
単にSELinuxをオフにして終了したいという誘惑があるかもしれませんが、私はこの方法で自分のコンピュータのセキュリティを損なうことはありません。そこで/var/spool/filterに書き込むようにSELinuxを修正してみました。
私は試した:
cat /var/log/audit/audit.log | audit2why
これは例外を示しています(以下に含めます)。
私はこれを何度もやってきました:
audit2allow -M altermime < /var/log/audit/audit.log
semodule -i altermime.pp
しかし、これはうまくいかないようです。これは、audit2allowがブロックされた個々のファイル(/var/spool/filter/xxxx)とディレクトリ全体(/var/spool/filter/*)の名前を指定するためであると仮定します。アクセスを許可するようにポリシーを作成したり、SELinuxを変更したりする方法がわかりません。
以下は2whyの私のレビューから抜粋したものです。
type=AVC msg=audit(1409231063.712:263024): avc: denied { add_name } for pid=21280 comm="disclaimer" name="in.21279" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
type=AVC msg=audit(1409231065.905:263025): avc: denied { add_name } for pid=21285 comm="disclaimer" name="in.21284" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
type=AVC msg=audit(1409231067.380:263026): avc: denied { add_name } for pid=21289 comm="disclaimer" name="in.21288" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
答え1
私は自分の質問に答えます。まず、私は次のことをしました。
semodule -l | grep mymodulename
(mymodulenameをインポートした古いモジュールに置き換えます)。以前にモジュールをインポートしたことがない場合は、この手順をスキップしてください。
次に、このコマンドを実行して、以前にインポートしたモジュールをすべて削除します。以前のモジュールをインポートしていない場合は、この手順を再度スキップしてください。
semodule -r names_of_modules_returned_from_prior_command
今、「きれいな」状態に戻る必要があります。
次に、次のコマンドを実行してselinuxを特権(モニター/ログ、ブロックしない)に設定します。
setenforce 0
getenforceを実行し、次のものを返すことを確認してください。
SELinux ログを消去するには、次のコマンドを実行します。
echo "" >/var/log/audit.log
selinuxが/var/log/audit/audit.logに新しいログエントリを生成するまで少なくとも15〜20分待ちます。
次に、次のコマンドを実行して包括的な selinux ポリシーを作成します。
cat /var/log/audit/audit.log | audit2allow -m yourname >yourname.te
次に、.teファイルを確認し、.modファイル(?)を生成する次のコマンドを実行します。
checkmodule -M -m -o yourname.mod yourname.te
次に、次のコマンドを使用して.modファイルをバイナリ.ppファイルにコンパイルします。
semodule_package -m yourname.mod -o yourname.pp
最後にモジュールを取り付けます。
semodule -i yourname.pp
しばらくの間 /var/log/audit/audit.log を監視し、新しいエントリが表示されないことを確認してください。
cat /var/log/audit/audit.log | audit2why
新しい項目が表示されない場合は、selinux を再適用するように設定します。
setenforce 1
これは私にとって効果的なようです。必要以上に少し緩いかもしれませんが、少なくともSELinuxを完全にオフにするわけではありません。
これが他の人に役立つことを願っています。
ありがとう、ブラッド