web-dev-qa-db-ja.com

MySQL5.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ラウンド追加した後、ファイルが変更されていないことに気付きました。 IEこの方法で追加できるものはすべてすでに追加されています。好奇心から実行しました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 0その後、mysqlは正常に起動するため、(SE)はまだ邪魔になっています。

SFを検索すると this up-結果に変化はありませんでした。

SO:閉塞がどこにあるかを知るにはどうすればよいですか?

編集:

[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
2
ethrbunny

新しいディレクトリのセキュリティコンテキストを/ 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
1
Manuel Sousa

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

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

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

1
KM.