启用selinux以允许在nfs共享上读取和写入mysql文件

我已经将我的/ var / lib / mysql目录移动到一个nfs共享中,更新了所有的configuration文件并在适当的地方创build了符号链接。 这在我closuresselinux的情况下工作,但是当selinux打开时mysqld无法启动。 我已经search了一个解决scheme,但还没有find任何工作。 我怀疑我缺less一些简单的东西。

这是我试过的:

yum install policycoreutils-python semanage fcontext -a -t mysqld_db_t "/nfs/data0/mysql(/.*)?" restorecon -Rv /nfs/data0/mysql 

我怀疑我可能会在这里使用错误的背景,但不知道什么是正确的。 有什么build议么?

更新:

根据build议查看/var/log/audit/audit.log后,我看到以下错误:

 type=AVC msg=audit(1398346018.436:3455): avc: denied { write } for pid=10980 comm="httpd" name="mysql.sock" dev=0:13 ino=18438 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=sock_file type=AVC msg=audit(1398346018.439:3456): avc: denied { search } for pid=12395 comm="mysqld" name="mysql" dev=0:13 ino=14805 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir type=AVC msg=audit(1398346019.657:3457): avc: denied { open } for pid=12395 comm="mysqld" name="cache_admin_menu.frm" dev=0:13 ino=23322 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=file 

不知道我需要做什么来解决这个问题。 我有以下sebools启用:

 mysql_connect_any httpd_can_network_connect_db httpd_can_network_connect httpd_can_network_memcache httpd_can_sendmail httpd_use_nfs httpd_builtin_scripting 

谢谢。

我会导致auditd启动一个新的日志文件( kill -USR1 pidofauditd ),然后让SELinux处于Permissive模式( setenforce 0 ),然后执行你平常的操作。 这将生成适当的审计消息。 然后

 cat audit.log | audit2allow -M myLocalPolicy ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i MyLocalPolicy.pp 

检查MyLocalPolicy.te文件以查看策略的执行情况,如果您愿意,可以使用提供的semodule命令进行安装。

“打开”错误表示它可能不会find“mysql.sock”。 您是否尝试将名称调整为系统所在位置的完整path?

fyi – 我只是build议,因为我发现你的问题时,谷歌search类似的错误,这是httpd,但“写”name ='/ tmp / mysql.sock'我已经定义在My​​SQL的my.cnf和php.ini 。

这个问题有点老,但没有看到一个正确的答案。

所以我遇到了这个问题与AWS和EFS使用centos AMI来运行mysql。

这里有两个问题。 常规mysql文件的权限和mysql套接字及其locking文件的权限。

看起来,mysql套接字是使用mysqld_var_run_t的上下文创build的,locking文件的上下文是mysqld_db_t,就像普通的mysql文件一样。

现在,NFS挂载通常被赋予nsf_t的上下文。

看来,一个nfs挂载只能在挂载上下文。 所以当我通过nfs进行安装时,我必须做的事情如下:

  1. 使用mysqld_db_t上下文挂载NFS共享。
  2. 使用mysqld_db_t上下文将mysql套接字移至其他目录。

所以在fstab安装看起来像这样:

 nfs-share-url:/ /data nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noatime,context="system_u:object_r:mysqld_db_t:s0" 0 0 

my.cnf看起来像这样:

 datadir=/data socket=/var/lib/mysql-files/mysql.sock 

因此,所有文件的权限都是正确的,并且mysql现在将数据存储在EFS NFS共享上。