AltimemeとSELINUX

AltimemeとSELINUX

私は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を完全にオフにするわけではありません。

これが他の人に役立つことを願っています。

ありがとう、ブラッド

おすすめ記事