MySQL 5.6とSELinuxが論争中

MySQL 5.6とSELinuxが論争中

CentOS 6.4(x64) / MySQL 5.6.10

ソース ファイルから MySQL をインストールし、元の場所 (/var/lib/mysql) で正常に起動しました。すべてを別のボリューム (/u0/mysql) に移動し、SELinux から除外する操作を数回実行しました (cat /var/log/audit/audit.log | audit2allow -M mysql-*その後semodule -i mysql-*.pp)。この操作を繰り返すたびに、サービスを再起動しようとすると、次のエラーが表示されます。

Starting MySQL..The server quit without updating PID file (/u0/mysql/server.pid).
 [FAILED]

3 ~ 4 回にわたって例外を追加した後、ファイルがもう変更されていないことに気付きました。つまり、この方法で追加できるものはすべてすでに追加されていました。好奇心から実行してみたところaudit2why -a、次のような結果が大量に出力されました。

type=AVC msg=audit(1387207317.009:666): avc:  <some permission> for  pid=20640 
  comm="mysqld" dev=sdc1 ino=36831373 scontext=unconfined_u:system_r:mysqld_t:s0 
  tcontext=system_u:object_r:default_t:s0 tclass=file
 Was caused by:
     Unknown - would be allowed by active policy
     Possible mismatch between this policy and the one under which the audit message was generated.
     Possible mismatch between current in-memory boolean settings vs. permanent ones.

このことから、私はすべき動作しています。SELinux を無効にすると、setenforce 0mysql は正常に起動しますが、SE がまだ邪魔になっています。

SFを検索してこれアップ - 試してみましたが、結果は変わりませんでした。

それで、詰まりがどこにあるかどうやって調べるのでしょうか?

編集:

[root@server u0]# ls -ldZ /var/lib/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /var/lib/mysql

[root@server u0]# ls -ldZ /u0/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /u0/mysql

答え1

新しいディレクトリのセキュリティ コンテキストを /var/lib/mysql と同じになるように変更する必要があります。

例えば:

ls -ldZ /var/lib/mysql/
drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/

次に、chconを使用して新しいディレクトリを同じ設定に変更します。

chcon -R -u system_u -r object_r -t mysqld_db_t /u0/mysql

答え2

次のようなことも試すことができます:

chcon --reference=/path/to/existing/file /path/to/new/file

ちなみに、SELinux の素晴らしい紹介がこちらにあります:http://www.youtube.com/watch?v=MxjenQ31b70Redhat 2012 Summit から。また、ログ ファイルで/var/log/audit/audit.logまたは のエラー メッセージを確認してください/var/log/messages

関連情報