Hogex spotted

Feed Rss

Postfix + MySQL + PostfixAdminのバーチャルドメイン環境をSELinux Enforcingで運用する。

02.20.2013, SELinux, by .

CentOS6.3 + SELinux Enforcing環境でPostfix + MySQL + PostfixAdminのバーチャルドメイン環境を作ったらSELinux周りで色々苦労したので覚書。

いい加減何も考えずにSELinux OFFというのからはインフラ屋として脱却したいところですねえ。

 

まず、SELinux関連のツールを入れないと何も出来ないのでyumで次のパッケージを入れましょう

setools

setroubleshoot

 

ツールを入れたら次はログからどこで引っかかっているかを見る。

/var/log/audit/audit.logのtype=AVCとなっているものがSELinuxのログ。参考に1つレコードを出すと

 

type=AVC msg=audit(1361331465.429:2108): avc: denied { connectto } for pid=7711 comm=”cleanup” path=”/var/lib/mysql/mysql.sock” scontext=unconfined_u:system_r:postfix_cleanup_t:s0 tcontext=unconfined_u:system_r:mysqld_t:s0 tclass=unix_stream_socket

 

このようなログが表示される。読み方としてはまず「avc: denied { connectto }」でconnecttoアクションがSELinuxで拒否されたという意味。次にscontextがソースプロセスのコンテクスト。これの内容は完全には把握しきれていないけれど、今回注目するのは「postfix_cleanup_t」の部分。tcontextはターゲットファイルのコンテクスト。こちらも同じく「mysqld_t」の部分に注目する。最後にtclassの右辺部分。今回はこの4つの情報を元にSELinux側で処理を通過させる為のデータを作成します。

 

これらのデータを元にSELinuxの挙動を変更するモジュールデータを作成します。まずは適当な作業ディレクトリ上で「local.te」というファイルを作成します。内容は前述したサンプルのログレコードの場合、次のようになります。

1行目はおまじないだそうです。尚、コメント行は#で挿入できます。

ファイルが出来たら

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

コマンドを実行します。エラーが無ければカレントディレクトリに「local.pp」ファイルができるので、これを

$ semodule -i local.pp

コマンドで読み込ませます。読み込ませるのには少し時間がかかります。

成功していれば同じ処理をした時にaudit.logから該当ログが消えているはずです。

実際に私がバーチャルドメインを正常に動かす為に用意したlocal.teファイルがこちらになります。

また、これらのファイルをaudit.logから自動生成してくれるaudit2allowコマンドやaudit.logを解析して解決のヒントを提示してくれる「audit2why」コマンド等もあるようです。

いずれも $ audit2why < /var/log/audit/audit.log のような形で食わせてやれば結果が表示されます。

また、$ setsebool -P *****=true のようなコマンドで解決できる場合もあるので、そちらで解決できるならその方がお手軽だと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


   Beat diabetes   Diabetes diet